Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:47

0001 #ifndef AMEGIC_Main_Single_Process_MHV_H
0002 #define AMEGIC_Main_Single_Process_MHV_H
0003 
0004 #include "AMEGIC++/Main/Process_Base.H"
0005 
0006 #include "AMEGIC++/Main/Polarisation.H"
0007 #include "AMEGIC++/Amplitude/Amplitude_Handler.H"
0008 // #include "ATOOLS/Phys/Spin_Correlation_Tensor.H"
0009 #include <vector>
0010 #include "AMEGIC++/Amplitude/Zfunctions/Mom.H"
0011 #include "AMEGIC++/Amplitude/FullAmplitude_MHV_Base.H"
0012 
0013 namespace AMEGIC {
0014   class Helicity;
0015   class Phase_Space_Generator;
0016 
0017   typedef std::set<std::pair<size_t,size_t> >     Combination_Set;
0018   typedef std::map<size_t,ATOOLS::Flavour_Vector> CFlavVector_Map;
0019 
0020   class Single_Process_MHV: public Process_Base {
0021   private:
0022     int                     m_gen_str;
0023     std::string             m_ptypename,m_libname,m_pslibname;
0024     Polarisation            m_pol;
0025     bool                    m_newlib;
0026     double                  m_iresult;
0027     int                     m_libnumb;
0028     bool                    m_ownamps;
0029 
0030     Helicity              * p_hel;
0031     Basic_Sfuncs          * p_BS;
0032     Amplitude_Handler     * p_ampl;
0033     String_Handler        * p_shand;
0034     Phase_Space_Generator * p_psgen;
0035 
0036     FullAmplitude_MHV_Base    * p_MHVamp;
0037     MomentumList              * p_momlist;
0038     Single_Process_MHV        * p_partner;
0039 
0040     Combination_Set m_ccombs;
0041     CFlavVector_Map m_cflavs;
0042 
0043     void FillCombinations(Point *const p,size_t &id);
0044     void FillCombinations();
0045     /*------------------------------------------------------------------------------
0046 
0047       Constructors
0048 
0049       ------------------------------------------------------------------------------*/
0050   public:
0051 
0052     Single_Process_MHV();
0053     ~Single_Process_MHV();
0054     
0055     bool FillIntegrator(PHASIC::Phase_Space_Handler *const psh);
0056 
0057     bool Combinable(const size_t &idi,const size_t &idj);
0058 
0059     const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0060 
0061     void           PolarizationNorm();
0062   private:
0063 
0064     /*------------------------------------------------------------------------------
0065 
0066       Initializing libraries, amplitudes, etc.
0067 
0068       ------------------------------------------------------------------------------*/
0069   protected :
0070     int                 Tests();
0071     bool                CreateChannelLibrary();
0072   public:
0073     void                AddChannels(std::list<std::string>*);
0074     bool                NewLibs() {return m_newlib;}
0075     bool                FoundMappingFile(std::string &,std::string &);
0076     int                 InitAmplitude(Amegic_Model *,Topology *,
0077                       std::vector<Process_Base *> &,
0078                       std::vector<Process_Base *> &);
0079     bool                SetUpIntegrator();
0080     String_Handler    * GetStringHandler()             { return p_shand;}
0081     Amplitude_Handler * GetAmplitudeHandler()          { return p_ampl;}
0082     Helicity *          GetHelicity()                  { return p_hel; }    
0083     double              Result()                       { return m_iresult; } 
0084 
0085     int                             NumberOfDiagrams();
0086     AMEGIC::Point                 * Diagram(int i);
0087 //     bool                            IsFreeOfFourVertex(AMEGIC::Point * _p);
0088     /*------------------------------------------------------------------------------
0089 
0090       Process management
0091 
0092       ------------------------------------------------------------------------------*/
0093   public:
0094     std::string      LibName()                          { return m_libname;     }
0095     std::string      PSLibName()                        { return m_pslibname;   }
0096     AMEGIC::Process_Base   * Partner() const            { return p_partner;     }
0097     void             Minimize();
0098 
0099     /*------------------------------------------------------------------------------
0100 
0101       Calculating total cross sections
0102 
0103       ------------------------------------------------------------------------------*/
0104   public:
0105     double Partonic(const ATOOLS::Vec4D_Vector&,
0106                     ATOOLS::Variations_Mode varmode,
0107                     int mode);
0108     double         DSigma(const ATOOLS::Vec4D_Vector &,bool);
0109     double         operator()(const ATOOLS::Vec4D *);
0110     void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0111                         std::vector<std::vector<Complex> >& cols);
0112     void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0113                         std::vector<std::vector<Complex> >& cols,
0114                         double sfactor);
0115 
0116     int  Type() { return 1; }
0117   };
0118 }
0119 
0120 
0121 
0122 #endif