Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_DipoleSubtraction_Single_OSTerm_H
0002 #define AMEGIC_DipoleSubtraction_Single_OSTerm_H
0003 
0004 #include "AMEGIC++/DipoleSubtraction/Single_LOProcess.H"
0005 #include "AMEGIC++/Main/Single_Process.H"
0006 
0007 #include "AMEGIC++/DipoleSubtraction/DipoleSplitting_Base.H"
0008 #include "PHASIC++/Process/Single_Process.H"
0009 #include "PHASIC++/Process/Process_Info.H"
0010 #include <vector>
0011 
0012 namespace AMEGIC {
0013   class Helicity;
0014   class Amplitude_Handler;
0015   class DipoleSplitting_Base;
0016   class Single_OSTerm : public Process_Base {
0017   private:
0018     bool                    m_valid;
0019     Single_OSTerm     * p_partner;
0020     ATOOLS::Vec4D         * p_OS_mom;
0021     ATOOLS::Vec4D_Vector    p_OS_labmom;
0022 
0023     Process_Base           * p_os_process;
0024     PHASIC::Process_Info              m_osinfo;
0025 
0026     size_t                  m_pi,m_pj,m_pk;
0027     size_t                  m_switch;
0028 //     size_t                  m_LOpij,m_LOpk;
0029     ATOOLS::Flavour         m_fli,m_flj,m_flij,m_flk;
0030     double                 m_wwindow;
0031     ATOOLS::NLO_subevt      m_subevt;
0032 
0033     PHASIC::Process_Integrator*     p_realint;
0034 
0035     std::vector<size_t> m_sids;
0036     /*------------------------------------------------------------------------------
0037 
0038       Constructors
0039 
0040       ------------------------------------------------------------------------------*/
0041   public:
0042 
0043     Single_OSTerm(const PHASIC::Process_Info &,
0044                   size_t,size_t,size_t,
0045                   PHASIC::Process_Integrator*);
0046     ~Single_OSTerm();
0047 
0048     void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0049 
0050     /*------------------------------------------------------------------------------
0051 
0052       Generic stuff for initialization of Single_OSTermes
0053 
0054       ------------------------------------------------------------------------------*/
0055 
0056   private:
0057     void           BuildDecay(PHASIC::Subprocess_Info&);
0058     bool           DetermineType();
0059     std::vector<PHASIC::Subprocess_Info>::iterator
0060                    FindInInfo(PHASIC::Subprocess_Info& fi, int idx) const;
0061     void           SetLOMomenta(const ATOOLS::Vec4D*,const ATOOLS::Poincare &);
0062     double         lambda(double x, double y, double z);
0063 
0064     /*------------------------------------------------------------------------------
0065 
0066       Initializing libraries, amplitudes, etc.
0067 
0068       ------------------------------------------------------------------------------*/
0069 
0070   public:
0071     void                AddChannels(std::list<std::string>*);
0072     bool                NewLibs() {return p_os_process->NewLibs();}
0073     int                 InitAmplitude(Amegic_Model *,Topology *,
0074                       std::vector<Process_Base *> &,
0075                       std::vector<Process_Base *> &);
0076     bool                SetUpIntegrator();
0077     String_Handler    * GetStringHandler()             {  return NULL;  }
0078     Amplitude_Handler * GetAmplitudeHandler()          { return p_partner->GetOSProcess()->GetAmplitudeHandler();}
0079     Helicity *          GetHelicity()                  {  return p_partner->GetOSProcess()->GetHelicity(); }    
0080     bool                IsValid()                      { return m_valid; }
0081     Process_Base*     GetOSProcess()                 { return p_os_process; }
0082     ATOOLS::NLO_subevt* GetSubevt()                    { return &m_subevt; }
0083     ATOOLS::Vec4D*      GetLOmom()                     { return p_OS_mom; }
0084     void                PrintProcessSummary(int it);
0085 
0086     int                 NumberOfDiagrams();
0087     AMEGIC::Point     * Diagram(int i);
0088 
0089     inline size_t       Li()                           { return m_pi; }
0090     inline size_t       Lj()                           { return m_pj; }
0091     inline size_t       Lk()                           { return m_pk; }
0092     /*------------------------------------------------------------------------------
0093 
0094       Process management
0095 
0096       ------------------------------------------------------------------------------*/
0097   public:
0098     void             SetLookUp(const bool lookup);
0099     std::string      PSLibName()                        { return p_partner->GetOSProcess()->PSLibName();   }
0100     Process_Base   * Partner() const                    { return p_partner;     }
0101     void             Minimize();
0102 
0103     void SetSelector(const PHASIC::Selector_Key &key);
0104     
0105     /*------------------------------------------------------------------------------
0106 
0107       Calculating total cross sections
0108 
0109       ------------------------------------------------------------------------------*/
0110   public:
0111     double Partonic(const ATOOLS::Vec4D_Vector&,
0112                     ATOOLS::Variations_Mode varmode,
0113                     int mode);
0114     double         operator()(const ATOOLS::Vec4D *,const ATOOLS::Poincare &cms,const int);
0115 
0116     int            Type() { return 15; }
0117     void PrintLOmom();
0118   };
0119 }
0120 
0121 
0122 
0123 #endif
0124