Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:14

0001 #ifndef SHERPA_PerturbativePhysics_MI_Handler_H
0002 #define SHERPA_PerturbativePhysics_MI_Handler_H
0003 
0004 #include "PDF/Main/ISR_Handler.H"
0005 #include "ATOOLS/Phys/Blob_List.H"
0006 #include "ATOOLS/Org/CXXFLAGS.H"
0007 
0008 namespace ATOOLS   { class Cluster_Amplitude; }
0009 namespace BEAM     { class Beam_Spectra_Handler; }
0010 namespace REMNANTS { class Remnant_Handler; }
0011 namespace PHASIC   { class Process_Base; }
0012 namespace MODEL    { class Model_Base; }
0013 namespace AMISIC   { class Amisic; }
0014 namespace SHRIMPS  { class Shrimps; }
0015 namespace YFS      { class YFS_Handler;          }
0016 
0017 namespace SHERPA {
0018   class Matrix_Element_Handler;
0019   class Shower_Handler;
0020 
0021   class MI_Handler {
0022   public:
0023     
0024     enum typeID {
0025       none    =  0,
0026       amisic  =  1,
0027       shrimps =  2,
0028       unknown = 99
0029     };
0030 
0031   private:
0032     PDF::ISR_Handler          * p_isr;
0033     YFS::YFS_Handler          * p_yfs;
0034     PDF::isr::id                m_id;   
0035     REMNANTS::Remnant_Handler * p_remnants;
0036     AMISIC::Amisic            * p_amisic;
0037     SHRIMPS::Shrimps          * p_shrimps;
0038     ATOOLS::Cluster_Amplitude * p_ampl;
0039     PHASIC::Process_Base      * p_proc;
0040     Shower_Handler            * p_shower;
0041 
0042     bool         m_on, m_stop, m_firstrescatter;
0043     typeID       m_type;
0044     std::string  m_name;
0045 
0046     double m_ycut; 
0047     
0048     void InitAmisic(MODEL::Model_Base *model);
0049     void InitShrimps(MODEL::Model_Base *model);
0050   public:
0051     MI_Handler(MODEL::Model_Base *model, PDF::ISR_Handler *isr,
0052                YFS::YFS_Handler *yfs, REMNANTS::Remnant_Handler * remnant_handler);
0053     ~MI_Handler();
0054     
0055     bool InitialiseMPIs(const double & scale);
0056     void SetMaxEnergies(const double & E1,const double & E2);
0057     void ConnectColours(ATOOLS::Blob * showerblob);
0058     
0059     ATOOLS::Blob              * GenerateHardProcess();
0060     ATOOLS::Cluster_Amplitude * ClusterConfiguration(ATOOLS::Blob * blob);
0061     void Reset();
0062     void CleanUp();
0063     
0064     const double ScaleMin() const;
0065     const double ScaleMax() const;
0066     const double ImpactParameter() const;
0067     const ATOOLS::Vec4D SelectPositionForScatter() const;
0068 
0069     inline const typeID      & Type() const { return m_type; }
0070     inline const std::string & Name() const { return m_name; }
0071     inline const bool          On()   const { return m_on; }
0072     inline const bool          Done() const { return !m_on || m_stop; }
0073     inline const double      & YCut() const { return m_ycut; }
0074     inline const PDF::isr::id & Id()   const { return m_id; }
0075     const bool   IsMinBias() const;
0076     inline const bool IsFirstRescatter() const {
0077       return m_id==PDF::isr::bunch_rescatter && m_firstrescatter;
0078     }
0079     
0080     inline PDF::ISR_Handler          * ISRHandler() const { return p_isr; }
0081     inline REMNANTS::Remnant_Handler * Remnants()   const { return p_remnants; }
0082     inline PHASIC::Process_Base      * Process()    const { return p_proc; }
0083     inline Shower_Handler            * Shower()     const { return p_shower; }
0084     inline AMISIC::Amisic            * Amisic()     const { return p_amisic; }
0085     inline SHRIMPS::Shrimps          * Shrimps()    const { return p_shrimps; }
0086 
0087     inline void SetShowerHandler(Shower_Handler * const sh) { p_shower=sh; }
0088     inline void SetRemnantHandler(REMNANTS::Remnant_Handler *const rh) {
0089       p_remnants = rh;
0090     }
0091 
0092     bool   VetoScatter(ATOOLS::Blob *blob);
0093     void   SetMassMode(const int & massmode);
0094     int    ShiftMasses(ATOOLS::Cluster_Amplitude * ampl);
0095   }; 
0096   typedef std::map<PDF::isr::id,MI_Handler *> MI_Handler_Map;
0097 }
0098 
0099 #endif