Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_DipoleSubtraction_Single_DipoleTerm_H
0002 #define AMEGIC_DipoleSubtraction_Single_DipoleTerm_H
0003 
0004 #include "AMEGIC++/DipoleSubtraction/Single_LOProcess.H"
0005 
0006 #include "AMEGIC++/DipoleSubtraction/DipoleSplitting_Base.H"
0007 #include "PHASIC++/Process/Single_Process.H"
0008 #include <vector>
0009 
0010 namespace AMEGIC {
0011   class Helicity;
0012   class Amplitude_Handler;
0013   class DipoleSplitting_Base;
0014   class Single_DipoleTerm : public Process_Base {
0015   private:
0016     double                  m_iresult;
0017     bool                    m_valid;
0018     bool                    m_noISclustertolepton;
0019     double                  m_dalpha;
0020     double                  m_dkt2max;
0021     double                  m_maxgsmass;
0022 
0023     Single_DipoleTerm     * p_partner;
0024 
0025     Single_LOProcess      * p_LO_process;
0026     ATOOLS::Vec4D         * p_LO_mom;
0027     ATOOLS::Vec4D_Vector    p_LO_labmom;
0028 
0029     ATOOLS::sbt::subtype        m_stype;
0030     ATOOLS::dpt::dipoletype     m_dtype;
0031     ATOOLS::spt::splittingtype  m_ftype;
0032 
0033     size_t                  m_pi,m_pj,m_pk;
0034     size_t                  m_LOpij,m_LOpk;
0035     ATOOLS::Flavour         m_fli,m_flj,m_flij,m_flk;
0036     ATOOLS::Flavour_Vector  m_lofl;
0037     DipoleSplitting_Base*   p_dipole;
0038     ATOOLS::NLO_subevt      m_subevt;
0039     double                  m_smth;
0040     size_t                  m_nphotonsplits;
0041     size_t                  m_pspissplitscheme,m_pspfssplitscheme;
0042 
0043     PHASIC::Process_Integrator*     p_realint;
0044 
0045     std::vector<size_t> m_sids;
0046     /*------------------------------------------------------------------------------
0047 
0048       Constructors
0049 
0050       ------------------------------------------------------------------------------*/
0051   public:
0052 
0053     Single_DipoleTerm(const PHASIC::Process_Info &,size_t,size_t,size_t,
0054                       ATOOLS::sbt::subtype,PHASIC::Process_Integrator*);
0055     ~Single_DipoleTerm();
0056 
0057     void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0058     void SetKFactor(const PHASIC::KFactor_Setter_Arguments &args);
0059     size_t SetMCMode(const size_t mcmode);
0060     size_t SetClusterMode(const size_t cmode);
0061     void FillProcessMap(PHASIC::NLOTypeStringProcessMap_Map *apmap);
0062     void SetCaller(PHASIC::Process_Base *const proc);
0063 
0064     /*------------------------------------------------------------------------------
0065 
0066       Generic stuff for initialization of Single_DipoleTermes
0067 
0068       ------------------------------------------------------------------------------*/
0069 
0070     void           SetLOMomenta(const ATOOLS::Vec4D*,const ATOOLS::Poincare &);
0071   private:
0072     bool           DetermineType();
0073     bool           DetermineQCDType();
0074     bool           DetermineEWType();
0075     bool           CompareLOmom(const ATOOLS::Vec4D*);
0076 
0077     /*------------------------------------------------------------------------------
0078 
0079       Initializing libraries, amplitudes, etc.
0080 
0081       ------------------------------------------------------------------------------*/
0082 
0083   public:
0084 
0085     ATOOLS::Flavour ReMap(const ATOOLS::Flavour &fl,const size_t &id) const;
0086     void                AddChannels(std::list<std::string>*);
0087     bool                NewLibs() {return p_LO_process?p_LO_process->NewLibs():false;}
0088     int                 InitAmplitude(Amegic_Model *,Topology *,
0089                       std::vector<Process_Base *> &,
0090                       std::vector<Process_Base *> &);
0091     bool                SetUpIntegrator();
0092     bool                Trigger(const ATOOLS::Vec4D_Vector &p);
0093     String_Handler    * GetStringHandler()             { return p_partner->GetLOProcess()->GetStringHandler();}
0094     Amplitude_Handler * GetAmplitudeHandler()          { return p_partner->GetLOProcess()->GetAmplitudeHandler();}
0095     Helicity *          GetHelicity()                  { return p_partner->GetLOProcess()->GetHelicity(); }    
0096     double              Result()                       { return m_iresult; } 
0097     bool                IsValid()                      { return m_valid; }
0098 //     Vec4D*              GetLOMomenta()                 { return m_LO_mom; }
0099 //     Flavour*            GetLOFlavs()                   { return m_LO_process->Flavour(); }
0100     Single_LOProcess*   GetLOProcess()                 { return p_LO_process; }
0101     ATOOLS::sbt::subtype        GetSubtractionType()   { return m_stype; }
0102     ATOOLS::dpt::dipoletype     GetDipoleType()        { return m_dtype; }
0103     ATOOLS::spt::splittingtype  GetSplittingType()     { return m_ftype; }
0104     ATOOLS::NLO_subevt* GetSubevt()                    { return &m_subevt; }
0105     ATOOLS::Vec4D*      GetLOmom()                     { return p_LO_mom; }
0106     void                PrintProcessSummary(int it);
0107 
0108     int                 NumberOfDiagrams();
0109     AMEGIC::Point     * Diagram(int i);
0110     const DipoleSplitting_Base* Dipole() const         { return p_dipole; }
0111 
0112     inline size_t       Lijt()                         { return p_LO_process->GetEmit(); }
0113     inline size_t       Lkt()                          { return p_LO_process->GetSpect(); }
0114     inline size_t       Li()                           { return m_pi; }
0115     inline size_t       Lj()                           { return m_pj; }
0116     inline size_t       Lk()                           { return m_pk; }
0117 
0118     inline void SetNPhotonSplittings(const size_t &n) { m_nphotonsplits=n; }
0119 
0120     /*------------------------------------------------------------------------------
0121 
0122       Process management
0123 
0124       ------------------------------------------------------------------------------*/
0125   public:
0126     void             SetLookUp(const bool lookup);
0127     std::string      PSLibName()                        { return p_partner->GetLOProcess()->PSLibName();   }
0128     Process_Base   * Partner() const                    { return p_partner;     }
0129     void             Minimize();
0130 
0131     void SetChargeFactors();
0132     void SetSelector(const PHASIC::Selector_Key &key);
0133     void SetShower(PDF::Shower_Base *const ps);
0134     void SetNLOMC(PDF::NLOMC_Base *const mc);
0135 
0136     void SetRealSubevt(ATOOLS::NLO_subevt *real) { m_subevt.p_real=real; }
0137     
0138     /*------------------------------------------------------------------------------
0139 
0140       Calculating total cross sections
0141 
0142       ------------------------------------------------------------------------------*/
0143   public:
0144     double Partonic(const ATOOLS::Vec4D_Vector &,
0145                     ATOOLS::Variations_Mode varmode,
0146                     int mode);
0147     double         operator()(const ATOOLS::Vec4D *,const ATOOLS::Poincare &cms,const int);
0148 
0149     int            Type() { return 15; }
0150     void PrintLOmom();
0151     inline void SetSmearThreshold(const double &th) { m_smth=th; }
0152   };
0153 }
0154 
0155 
0156 
0157 #endif
0158