Back to home page

EIC code displayed by LXR

 
 

    


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