Back to home page

EIC code displayed by LXR

 
 

    


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 }// end of namespace SHERPA
0087 
0088 #endif