File indexing completed on 2025-04-19 09:09:44
0001 #ifndef AHADIC_Tools_Soft_Cluster_Handler_H
0002 #define AHADIC_Tools_Soft_Cluster_Handler_H
0003
0004 #include "AHADIC++/Tools/KT_Selector.H"
0005 #include "AHADIC++/Tools/Single_Transitions.H"
0006 #include "AHADIC++/Tools/Double_Transitions.H"
0007 #include "AHADIC++/Tools/Cluster.H"
0008
0009 namespace AHADIC {
0010 class Soft_Cluster_Handler {
0011 private:
0012 std::list<Proto_Particle *> * p_hadrons;
0013 Constituents * p_constituents;
0014 Single_Transitions * p_singletransitions;
0015 Double_Transitions * p_doubletransitions;
0016 KT_Selector m_ktselector;
0017 double m_dec_threshold,m_trans_threshold, m_chi, m_ktmax, m_ktfac, m_zeta;
0018 double m_piphoton_threshold, m_dipion_threshold, m_open_threshold;
0019
0020 Cluster * p_cluster;
0021 double m_mass2, m_mass;
0022 Flavour_Pair m_flavs;
0023
0024 bool m_forceddecay, m_direct_transition, m_ktorder;
0025
0026 ATOOLS::Vec4D m_moms[2];
0027 ATOOLS::Flavour m_hads[2];
0028
0029 void FillFlavours(Cluster * cluster);
0030 int CheckOutsideRange();
0031 int Decay();
0032 double PhaseSpace(const double & m2,const double & m3,const bool heavyB);
0033 double DecayWeight();
0034 double RadiationWeight(const bool & withPS=true);
0035 double Annihilation();
0036 bool FixKinematics();
0037 bool DiQuarkToQuarks(const ATOOLS::Flavour & di,
0038 ATOOLS::Flavour & q1,ATOOLS::Flavour & q2);
0039 bool AnnihilateFlavour(const ATOOLS::Flavour & one1,
0040 const ATOOLS::Flavour & one2,
0041 const ATOOLS::Flavour & two1,
0042 const ATOOLS::Flavour & two2);
0043 double DefineHadronsInAnnihilation(const Flavour_Pair & one,
0044 const Flavour_Pair & two);
0045 bool TreatSingletCluster();
0046 public:
0047 Soft_Cluster_Handler(std::list<Proto_Particle *> * hadrons);
0048 ~Soft_Cluster_Handler();
0049
0050 void Init();
0051 void Reset();
0052 bool PromptTransit(Cluster * cluster,ATOOLS::Flavour & had);
0053 bool MustPromptDecay(Cluster * cluster);
0054 bool MustPromptDecay(const ATOOLS::Flavour & fl1,
0055 const ATOOLS::Flavour & fl2,
0056 const double & mass);
0057 int Treat(Cluster * cluster,bool force=false);
0058 bool TreatTwoGluons(Cluster * cluster);
0059 bool RadiativeDecay(Cluster * cluster);
0060 bool Rescue(Cluster * cluster);
0061
0062 double TransitionThreshold(const ATOOLS::Flavour & fl1,
0063 const ATOOLS::Flavour & fl2);
0064 double DecayThreshold(const ATOOLS::Flavour & fl1,
0065 const ATOOLS::Flavour & fl2);
0066 double MinSingleMass(const ATOOLS::Flavour & fl1,
0067 const ATOOLS::Flavour & fl2);
0068 ATOOLS::Flavour LowestTransition(const ATOOLS::Flavour & fl1,
0069 const ATOOLS::Flavour & fl2);
0070 double MinDoubleMass(const ATOOLS::Flavour & fl1,
0071 const ATOOLS::Flavour & fl2);
0072 ATOOLS::Flavour GetDecHadron(const size_t & i) { return m_hads[i]; }
0073
0074 std::list<Proto_Particle *> * GetHadrons() const { return p_hadrons; }
0075 };
0076 }
0077 #endif