File indexing completed on 2025-04-19 09:10:14
0001 #ifndef SHERPA_SoftPhysics_Resonance_Finder_H
0002 #define SHERPA_SoftPhysics_Resonance_Finder_H
0003
0004 #include <map>
0005 #include <string>
0006 #include <vector>
0007 #include "ATOOLS/Math/Vector.H"
0008
0009 namespace ATOOLS {
0010 class Blob;
0011 class Scoped_Settings;
0012 class Flavour;
0013 class Particle;
0014 typedef std::vector<Blob *> Blob_Vector;
0015 typedef std::vector<Flavour> Flavour_Vector;
0016 typedef std::vector<Particle *> Particle_Vector;
0017 }
0018
0019 namespace PHASIC {
0020 struct Process_Info;
0021 struct Subprocess_Info;
0022 class Process_Base;
0023 }
0024
0025 using PHASIC::Subprocess_Info;
0026
0027 namespace MODEL {
0028 class Single_Vertex;
0029 typedef std::vector<Single_Vertex *> Vertex_List;
0030 }
0031
0032 namespace SHERPA {
0033 typedef std::vector<const Subprocess_Info *> SubInfoVector;
0034 class Matrix_Element_Handler;
0035
0036 class Resonance_Finder {
0037 private:
0038 bool m_on;
0039 double m_resdist;
0040 bool m_inclres;
0041 Matrix_Element_Handler * p_mehandler;
0042 std::map<std::string,SubInfoVector> m_proc_lep_map;
0043 std::map<std::string,MODEL::Vertex_List> m_proc_restab_map;
0044
0045 void ScanModelForEWResonances();
0046 void FindProcessPossibleResonances(const ATOOLS::Flavour_Vector& fv,
0047 MODEL::Vertex_List& vlist);
0048 void InitialiseHelperParticles();
0049 void IdentifyEWSubprocesses();
0050
0051 void FindSubProcessInfosContainingLeptons(const PHASIC::Process_Info&,
0052 SubInfoVector&);
0053 void FindSubProcessInfosContainingLeptons(const PHASIC::Subprocess_Info&,
0054 SubInfoVector&);
0055
0056 void FillBlob(ATOOLS::Blob *,
0057 const PHASIC::Subprocess_Info&,
0058 ATOOLS::Particle_Vector&);
0059 void FillBlob(ATOOLS::Blob *,
0060 const ATOOLS::Flavour&,
0061 ATOOLS::Particle_Vector&);
0062
0063 bool FindResonances(ATOOLS::Particle_Vector&,
0064 std::vector<ATOOLS::Particle_Vector>&,
0065 ATOOLS::Flavour_Vector&,
0066 const MODEL::Vertex_List&);
0067
0068 bool ContainsNoAmbiguities(const ATOOLS::Particle_Vector&);
0069
0070 ATOOLS::Flavour DetermineGenericResonance(const ATOOLS::Particle_Vector&);
0071 ATOOLS::Vec4D MomentumSum(const ATOOLS::Particle_Vector&);
0072
0073 public:
0074 Resonance_Finder(Matrix_Element_Handler*);
0075 Resonance_Finder(PHASIC::Process_Base*);
0076 ~Resonance_Finder();
0077
0078 void BuildResonantBlobs(ATOOLS::Particle_Vector&,
0079 ATOOLS::Blob_Vector& blobs);
0080
0081 void BuildResonantBlobs(ATOOLS::Particle_Vector&,
0082 ATOOLS::Blob_Vector& blobs,
0083 PHASIC::Process_Base*);
0084
0085 };
0086 }
0087
0088 #endif