File indexing completed on 2025-04-19 09:09:44
0001 #ifndef AHADIC_Tools_Splitter_Base_H
0002 #define AHADIC_Tools_Splitter_Base_H
0003
0004 #include "AHADIC++/Tools/Flavour_Selector.H"
0005 #include "AHADIC++/Tools/KT_Selector.H"
0006 #include "AHADIC++/Tools/Z_Selector.H"
0007 #include "AHADIC++/Tools/Soft_Cluster_Handler.H"
0008 #include "ATOOLS/Math/Poincare.H"
0009 #include "ATOOLS/Math/Histogram.H"
0010 #include <map>
0011
0012 namespace AHADIC {
0013 class Splitter_Base {
0014 protected:
0015 std::list<Cluster *> * p_cluster_list;
0016 Soft_Cluster_Handler * p_softclusters;
0017
0018 Single_Transitions * p_singletransitions;
0019 Double_Transitions * p_doubletransitions;
0020 Constituents * p_constituents;
0021 Flavour_Selector m_flavourselector;
0022 KT_Selector m_ktselector;
0023 Z_Selector m_zselector;
0024
0025 bool m_ktorder;
0026 size_t m_attempts;
0027
0028 Proto_Particle * p_part[3];
0029 ATOOLS::Vec4D m_Qvec;
0030 bool m_barrd;
0031 double m_minmass;
0032 double m_Q2, m_Q, m_E, m_mass[3], m_m2[3], m_Emax;
0033 double m_lc[2];
0034
0035 Flavour_Pair m_flavs1, m_flavs2;
0036 double m_popped_mass, m_popped_mass2, m_msum[2], m_msum2[2];
0037 ATOOLS::Flavour m_newflav[2];
0038 double m_minQ[2], m_minQ2[2], m_mdec[2], m_mdec2[2];
0039
0040 double m_zmin[2], m_zmax[2], m_z[2];
0041 double m_ktmax, m_kt2max, m_ktfac, m_kt, m_kt2, m_phi;
0042 ATOOLS::Vec4D m_ktvec;
0043
0044 ATOOLS::Poincare m_boost, m_rotat;
0045
0046 bool m_analyse;
0047 std::map<std::string,ATOOLS::Histogram *> m_histograms;
0048
0049 virtual bool InitSplitting(Proto_Particle * part1,Proto_Particle * part2,
0050 Proto_Particle * part3);
0051 virtual void FillMasses();
0052 virtual void ConstructLightCone(const double & kt2=0.);
0053 virtual void ConstructPoincare();
0054
0055 virtual bool MakeSplitting();
0056 virtual void PopFlavours();
0057 virtual void DetermineMinimalMasses();
0058 virtual bool MakeKinematics();
0059 virtual void MakeTransverseMomentum();
0060 virtual bool MakeLongitudinalMomenta() = 0;
0061 virtual bool FillParticlesInLists() = 0;
0062 virtual bool CheckKinematics() = 0;
0063 public:
0064 Splitter_Base(std::list<Cluster *> * cluster_list,
0065 Soft_Cluster_Handler * softclusters);
0066 ~Splitter_Base();
0067 virtual void Init(const bool & isgluon);
0068
0069 virtual bool operator()(Proto_Particle * part1,Proto_Particle * part2,
0070 Proto_Particle * part3=0);
0071 virtual double WeightFunction(const double & z,
0072 const double & zmin,const double & zmax,
0073 const unsigned int & cnt)=0;
0074 };
0075
0076 }
0077
0078 #endif