Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_DipoleSubtraction_Single_Real_Correction_H
0002 #define AMEGIC_DipoleSubtraction_Single_Real_Correction_H
0003 
0004 #include "AMEGIC++/Main/Process_Base.H"
0005 
0006 #include "AMEGIC++/DipoleSubtraction/Single_DipoleTerm.H"
0007 #include "AMEGIC++/DipoleSubtraction/Single_OSTerm.H"
0008 
0009 #include "AMEGIC++/Amplitude/Amplitude_Handler.H"
0010 #include <vector>
0011 
0012 namespace AMEGIC {
0013   class Single_DipoleTerm;
0014   class Helicity;
0015 
0016   struct DM_Info {
0017     ATOOLS::Flavour_Vector *p_fl;
0018     std::vector<size_t> *p_id;
0019     std::string m_pname;
0020     DM_Info(ATOOLS::Flavour_Vector *const fl=NULL,
0021         std::vector<size_t> *const id=NULL,
0022         const std::string &pname=""):
0023       p_fl(fl), p_id(id), m_pname(pname) {}
0024   };
0025 
0026   class Single_Real_Correction : public Process_Base {
0027   private:
0028     bool                    m_newlib, m_no_tree, m_listdips;
0029     double                  m_iresult;
0030     double                  m_smear_threshold, m_smear_power;
0031     int                     m_libnumb;
0032     bool                    m_ossubon;
0033     ATOOLS::sbt::subtype    m_user_stype;
0034     size_t                  m_pspisrecscheme,m_pspfsrecscheme;
0035 
0036     Single_Real_Correction     * p_partner;
0037 
0038     Process_Base          * p_tree_process;
0039     ATOOLS::Vec4D_Vector    m_real_momenta;
0040     std::vector<Single_DipoleTerm*> m_subtermlist;
0041     std::vector<Single_OSTerm*>     m_subostermlist;
0042     ATOOLS::NLO_subevtlist          m_subevtlist;
0043     ATOOLS::NLO_subevt              m_realevt;
0044 
0045     std::vector<size_t> m_sids;
0046     std::map<void*,DM_Info> m_dfmap;
0047 
0048     void FillProcessMap(PHASIC::NLOTypeStringProcessMap_Map *apmap);
0049     void ReMapFlavs(ATOOLS::NLO_subevt *const sub,const int mode=0);
0050     void SmearCounterEvents(ATOOLS::NLO_subevtlist& subevtlist);
0051     bool AllowAsSpecInISPFF(const size_t &k);
0052     bool AllowAsSpecInFSPFF(const size_t &k);
0053 
0054     /*------------------------------------------------------------------------------
0055 
0056       Constructors
0057 
0058       ------------------------------------------------------------------------------*/
0059   public:
0060 
0061     Single_Real_Correction();
0062     ~Single_Real_Correction();
0063  
0064     bool FillIntegrator(PHASIC::Phase_Space_Handler *const psh);
0065     bool Combinable(const size_t &idi,const size_t &idj);
0066     const ATOOLS::Flavour_Vector &CombinedFlavour(const size_t &idij);
0067     void SetCaller(PHASIC::Process_Base *const proc);
0068 
0069     void SetFixedScale(const std::vector<double> &s);
0070     void SetSelectorOn(const bool on);
0071     void SetGenerator(PHASIC::ME_Generator_Base *const gen);
0072     size_t SetMCMode(const size_t mcmode);
0073     size_t SetClusterMode(const size_t cmode);
0074     /*------------------------------------------------------------------------------
0075 
0076       Initializing libraries, amplitudes, etc.
0077 
0078       ------------------------------------------------------------------------------*/
0079   public:
0080     void                AddChannels(std::list<std::string>*);
0081     bool                NewLibs() {return m_newlib;}
0082     int                 InitAmplitude(Amegic_Model *,Topology *,
0083                       std::vector<Process_Base *> &,
0084                       std::vector<Process_Base *> &);
0085     bool                SetUpIntegrator();
0086     Amplitude_Handler * GetAmplitudeHandler()          { return p_tree_process->GetAmplitudeHandler();}
0087     Helicity *          GetHelicity()                  { return p_tree_process->GetHelicity(); }    
0088     double              Result()                       { return m_iresult; } 
0089 
0090     /*------------------------------------------------------------------------------
0091 
0092       Process management
0093 
0094       ------------------------------------------------------------------------------*/
0095   public:
0096     void             SetLookUp(const bool lookup);
0097     std::string      LibName()                          { return p_tree_process->LibName();     }
0098     std::string      PSLibName()                        { return p_tree_process->PSLibName();   }
0099     Process_Base   * Partner() const                    { return p_partner;     }
0100     void             Minimize();
0101 
0102     void SetSelector(const PHASIC::Selector_Key &key);
0103     void SetShower(PDF::Shower_Base *const ps);
0104     void SetNLOMC(PDF::NLOMC_Base *const mc);
0105 
0106     inline ATOOLS::NLO_subevtlist*             GetSubevtList()
0107     { return &m_subevtlist; }
0108     inline Single_DipoleTerm*                  GetSubTerm(size_t i)
0109     { return m_subtermlist[i]; }
0110     inline size_t                              GetSubTermNumber()
0111     { return m_subtermlist.size(); }
0112 
0113     int Type() { return 100; }
0114 
0115     inline void SetNoTree(const int notree) { m_no_tree=notree; }    
0116     /*------------------------------------------------------------------------------
0117 
0118       Calculating total cross sections
0119 
0120       ------------------------------------------------------------------------------*/
0121   public:
0122     double Partonic(const ATOOLS::Vec4D_Vector&,
0123                     ATOOLS::Variations_Mode varmode,
0124                     int mode);
0125     double         operator()(const ATOOLS::Vec4D_Vector &,const int mode);
0126     void FillAmplitudes(std::vector<METOOLS::Spin_Amplitudes>& amps,
0127                         std::vector<std::vector<Complex> >& cols);
0128 
0129     bool Trigger(const ATOOLS::Vec4D_Vector &p);
0130 
0131     void SetScale(const PHASIC::Scale_Setter_Arguments &args);
0132     void SetKFactor(const PHASIC::KFactor_Setter_Arguments &args);
0133 
0134     int            NumberOfDiagrams();
0135     Point        * Diagram(int i);
0136 
0137     ATOOLS::Flavour ReMap(const ATOOLS::Flavour &fl,const size_t &id) const;
0138 
0139    /*------------------------------------------------------------------------------
0140 
0141       Helpers
0142       
0143       ------------------------------------------------------------------------------*/
0144   public:
0145     void           PrintProcessSummary(int=0); 
0146     void           PrintSubevtSummary();
0147     size_t         NumberOfDipoles() {return m_subtermlist.size();} 
0148     Process_Base *GetReal();
0149 
0150   };
0151 }
0152 
0153 
0154 
0155 #endif
0156