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