Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_DipoleSubtraction_Single_LOProcess_H
0002 #define AMEGIC_DipoleSubtraction_Single_LOProcess_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 "PHASIC++/Process/Single_Process.H"
0009 #include <vector>
0010 
0011 
0012 namespace AMEGIC {
0013   class Helicity;
0014 
0015   typedef std::set<std::pair<size_t,size_t> >     Combination_Set;
0016   typedef std::map<size_t,ATOOLS::Flavour_Vector> CFlavVector_Map;
0017 
0018   class Single_LOProcess : public Process_Base {
0019   protected:
0020     int                     m_gen_str;
0021     std::string             m_ptypename,m_libname,m_pslibname;
0022     ATOOLS::sbt::subtype    m_stype;
0023     Polarisation            m_pol;
0024     bool                    m_newlib;
0025     double                  m_iresult;
0026     int                     m_emit,m_spect,m_type;
0027 
0028     Helicity              * p_hel;
0029     Basic_Sfuncs          * p_BS;
0030     Amplitude_Handler     * p_ampl;
0031     String_Handler        * p_shand;
0032 
0033     Single_LOProcess      * p_partner;
0034     std::vector<size_t>     m_partonlistqcd, m_partonlistqed;
0035     std::vector<int>        m_rsmap,m_srmap;
0036 
0037     size_t                  m_pspissplscheme, m_pspfssplscheme;
0038 
0039     std::vector<double>     m_maxcpliqcd, m_mincpliqcd,
0040                             m_maxcpliew, m_mincpliew;
0041 
0042     std::map<int, size_t>   m_flavrestrictions;
0043 
0044     std::vector<ATOOLS::Vec4D> m_epol;
0045 
0046     ATOOLS::NLO_subevt *p_sub;
0047 
0048     Combination_Set m_ccombs;
0049     CFlavVector_Map m_cflavs;
0050 
0051     void FillCombinations(Point *const p,size_t &id);
0052     void FillCombinations();    
0053     void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0054                         std::vector<std::vector<Complex> >& cols,
0055                         double sfactor);
0056 
0057     /*------------------------------------------------------------------------------
0058 
0059       Constructors
0060 
0061       ------------------------------------------------------------------------------*/
0062   public:
0063 
0064    Single_LOProcess(const PHASIC::Process_Info &pi,
0065                     BEAM::Beam_Spectra_Handler *const beam,
0066                     PDF::ISR_Handler *const isr,
0067                     YFS::YFS_Handler *const yfs,
0068                     const ATOOLS::sbt::subtype& st);
0069     ~Single_LOProcess();
0070 
0071     bool Combinable(const size_t &idi,const size_t &idj);
0072     const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0073     
0074     const MODEL::Coupling_Map *CouplingMap() const { return &m_cpls; }
0075     void SetProcMap(PHASIC::NLOTypeStringProcessMap_Map *apmap) { p_apmap=apmap; }
0076     /*------------------------------------------------------------------------------
0077 
0078       Initializing libraries, amplitudes, etc.
0079 
0080       ------------------------------------------------------------------------------*/
0081   private :
0082     int                 Tests(std::vector<double>* =NULL);
0083     int                 TestLib(std::vector<double>* =NULL);
0084     int                 CheckLibraries(std::vector<double>* =NULL);
0085     int                 CheckStrings(Single_LOProcess*,std::vector<double>* =NULL);
0086     void                WriteLibrary();
0087     bool                FoundLib(std::string& pID);
0088   protected:
0089     void                CreateMappingFile(Single_LOProcess*);
0090     void                UpdateMappingFile(std::string,std::map<std::string,Complex> &); 
0091     void                WriteAlternativeName(std::string aname);
0092     bool                CheckAlternatives(std::vector<Process_Base *> & links,
0093                       std::string procname);
0094     bool                CompareTestMoms(const ATOOLS::Vec4D*);
0095   public:
0096     std::string         CreateLibName();
0097     void                AddChannels(std::list<std::string>*);
0098     bool                NewLibs() {return m_newlib;}
0099     bool                FoundMappingFile(std::string &,std::string &);
0100     int                 InitAmplitude(Amegic_Model *,Topology *,
0101                       std::vector<Process_Base *> &,
0102                       std::vector<Process_Base *> &);
0103     virtual int         InitAmplitude(Amegic_Model *,Topology *,
0104                       std::vector<Process_Base *> &,
0105                       std::vector<Process_Base *> &,int);
0106     virtual int         InitAmplitude(Amegic_Model *,Topology *,
0107                       std::vector<Process_Base *> &,
0108                       std::vector<Process_Base *> &,
0109                       std::vector<ATOOLS::Vec4D>*,std::vector<double>*);
0110     bool                SetUpIntegrator();
0111     String_Handler    * GetStringHandler();
0112     Amplitude_Handler * GetAmplitudeHandler();
0113     Helicity *          GetHelicity();
0114     double              Result()                       { return m_iresult; } 
0115 
0116     int                             NumberOfDiagrams();
0117     AMEGIC::Point                 * Diagram(int i);
0118     bool                IsFreeOfFourVertex(Point * _p) { return 1-p_ampl->ExistFourVertex(_p); }
0119 
0120     Basic_Sfuncs      * GetBS() {return p_BS;} 
0121     double              Norm()  {return m_Norm;}
0122 
0123     inline size_t       GetEmit()  { return m_emit; }
0124     inline size_t       GetSpect() { return m_spect; }
0125     inline void         SetSubEvt(ATOOLS::NLO_subevt *sub) { p_sub=sub; }
0126     inline void         SetPhotonSplittingModes(const size_t &im,
0127                                                 const size_t &fm)
0128                         { m_pspissplscheme=im; m_pspfssplscheme=fm; }
0129     inline void         SetMaxOrdersIQCD(const std::vector<double> &o)
0130                         { m_maxcpliqcd=o; }
0131     inline void         SetMinOrdersIQCD(const std::vector<double> &o)
0132                         { m_mincpliqcd=o; }
0133     inline void         SetMaxOrdersIEW(const std::vector<double> &o)
0134                         { m_maxcpliew=o; }
0135     inline void         SetMinOrdersIEW(const std::vector<double> &o)
0136                         { m_mincpliew=o; }
0137     /*------------------------------------------------------------------------------
0138 
0139       Process management
0140 
0141       ------------------------------------------------------------------------------*/
0142   public:
0143     std::string      LibName()                          { return m_libname;     }
0144     std::string      PSLibName()                        { return m_pslibname;   }
0145     Process_Base   * Partner()   const                  { return p_partner;     }
0146     void             Minimize();
0147     inline int  Type() { return m_type; }
0148     inline const ATOOLS::sbt::subtype& GetSubType() const   { return m_stype; }
0149     inline const std::vector<size_t>& PartonListQCD() const { return m_partonlistqcd; }
0150     inline const std::vector<size_t>& PartonListQED() const { return m_partonlistqed; }
0151     inline const bool HasInitialStateQCDEmitter() const
0152     { return m_partonlistqcd.size()?m_partonlistqcd[0]<m_nin:false; }
0153     inline const bool HasInitialStateQEDEmitter() const
0154     { return m_partonlistqed.size()?m_partonlistqed[0]<m_nin:false; }
0155     inline const bool HasInitialStateEmitter() const
0156     { return HasInitialStateQCDEmitter() || HasInitialStateQEDEmitter(); }
0157     inline Polarisation *GetPolarisation()             { return &m_pol; }
0158     bool CheckIQCDMappability() const;
0159     bool CheckIQEDMappability() const;
0160     bool IsValid();
0161 
0162     /*------------------------------------------------------------------------------
0163 
0164       Calculating total cross sections
0165 
0166       ------------------------------------------------------------------------------*/
0167   private:
0168     double         Calc_M2ik(const int& ci, const int& ck,
0169                              const std::vector<double>&,
0170                              const std::vector<double>&);
0171   public:
0172     double Partonic(const ATOOLS::Vec4D_Vector&,
0173                     ATOOLS::Variations_Mode,
0174                     int mode);
0175     virtual double operator()(const ATOOLS::Vec4D_Vector &,const ATOOLS::Vec4D *,
0176                   std::vector<double>*,std::vector<ATOOLS::Vec4D>*,const int);
0177     void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0178                         std::vector<std::vector<Complex> >& cols);
0179     virtual void   Calc_AllXS(const ATOOLS::Vec4D_Vector &,
0180                               const ATOOLS::Vec4D *,
0181                               std::vector<std::vector<double> > &,
0182                               std::vector<std::vector<double> > &,
0183                               const int);
0184     inline const std::vector<int> &RSMap() const { return m_rsmap; }
0185     inline const std::vector<int> &SRMap() const { return m_srmap; }
0186   };
0187 }
0188 
0189 
0190 
0191 #endif
0192