Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef SHERPA_PerturbativePhysics_Hard_Decay_Handler_H
0002 #define SHERPA_PerturbativePhysics_Hard_Decay_Handler_H
0003 
0004 #include <map>
0005 #include <set>
0006 #include <string>
0007 #include <vector>
0008 #include "ATOOLS/Phys/Flavour.H"
0009 #include "ATOOLS/Org/Scoped_Settings.H"
0010 #include "SHERPA/Single_Events/Decay_Handler_Base.H"
0011 #include "PDF/Main/Cluster_Definitions_Base.H"
0012 
0013 namespace MODEL {
0014   class Single_Vertex;
0015   typedef std::vector<Single_Vertex *>  Vertex_List;
0016 }
0017 
0018 namespace ATOOLS {
0019   class NLO_subevtlist;
0020 }
0021 
0022 namespace PHASIC {
0023   class Decay_Channel;
0024 }
0025 
0026 namespace SHERPA {
0027 
0028   typedef std::pair<ATOOLS::Particle *,ATOOLS::Particle *> ParticlePair;
0029   typedef std::pair<std::pair<ATOOLS::Particle *,ATOOLS::Particle *>,ATOOLS::Particle *> ParticlePairPair;
0030   typedef std::vector<ParticlePair> ParticlePair_Vector;
0031   typedef std::vector<ParticlePairPair> ParticlePairPair_Vector;
0032 
0033   class Hard_Decay_Handler : public Decay_Handler_Base {
0034     std::string              m_resultdir, m_offshell;
0035     std::set<std::string>    m_disabled_channels;
0036     std::map<ATOOLS::Flavour,std::set<std::string> > m_forced_channels;
0037     std::map<std::string, double> m_external_widths;
0038     int                      m_store_results;
0039     bool                     m_decay_tau, m_set_widths,
0040                              m_br_weights, m_usemass;
0041     double                   m_min_prop_width;
0042     ATOOLS::Flavour_Set      m_decmass;
0043     std::map<ATOOLS::Flavour, std::map<std::string, std::vector<double> > >
0044                              m_read;
0045     PDF::Cluster_Definitions_Base *p_clus;
0046     ATOOLS::NLO_subevtlist *p_newsublist;
0047     double                   m_int_accuracy;
0048     int                      m_int_niter, m_int_target_mode;
0049 
0050     void SetDecayMasses();
0051     void InitializeDirectDecays(PHASIC::Decay_Table* dt);
0052     void InitializeOffshellDecays(PHASIC::Decay_Table* dt);
0053     void SetHOSMWidths(ATOOLS::Scoped_Settings& s);
0054     bool TriggerOffshell(PHASIC::Decay_Channel* dc, std::vector<PHASIC::Decay_Channel*> new_dcs);
0055     std::vector<PHASIC::Decay_Channel*> ResolveDecay(PHASIC::Decay_Channel* dc);
0056     bool ProperVertex(MODEL::Single_Vertex* sv);
0057     
0058     void AddDecayClustering(ATOOLS::Cluster_Amplitude*& ampl,
0059                             ATOOLS::Blob* blob,
0060                             size_t& imax,
0061                             size_t idmother);
0062     void AddSplitPhotonsClustering(ATOOLS::Cluster_Amplitude*& ampl,
0063                               const ATOOLS::Particle_Vector daughters,
0064                               ParticlePairPair_Vector& splitphotons,
0065                               size_t& imax,
0066                               const std::vector<size_t>& ids);
0067     void AddPhotonsClustering(ATOOLS::Cluster_Amplitude*& ampl,
0068                               const ATOOLS::Particle_Vector daughters,
0069                               ParticlePair_Vector& photons,
0070                               size_t& imax,
0071                               const std::vector<size_t>& ids);
0072     void UnsplitPhotons(const ATOOLS::Particle_Vector& splitphotonproducts,
0073                         ParticlePairPair_Vector& splitphotons);
0074     void AssignPhotons(const ATOOLS::Particle_Vector& daughters,
0075                        ParticlePair_Vector& photons);
0076     void AssignSplitPhotons(const ATOOLS::Particle_Vector& daughters,
0077                             ParticlePairPair_Vector& splitphotons);
0078     ATOOLS::Vec4D RecombinedMomentum(const ATOOLS::Particle * daughter,
0079                                      const ParticlePair_Vector& photons,
0080                                      const ParticlePairPair_Vector& splitphotons,
0081                                      size_t& stat);
0082 
0083     void ReadDecayTable(ATOOLS::Flavour decayer);
0084     void WriteDecayTables();
0085     bool CalculateWidth(PHASIC::Decay_Channel* dc);
0086 
0087     void FindDecayProducts(ATOOLS::Particle* decayer,
0088                            std::list<ATOOLS::Particle*>& decayproducts);
0089     double BRFactor(ATOOLS::Blob* blob) const;
0090 
0091   public :
0092     Hard_Decay_Handler();
0093     ~Hard_Decay_Handler();
0094 
0095     void CreateDecayBlob(ATOOLS::Particle* inpart);
0096     void TreatInitialBlob(ATOOLS::Blob* blob,
0097                           METOOLS::Amplitude2_Tensor* amps,
0098                           const ATOOLS::Particle_Vector& origparts);
0099 
0100     bool DefineInitialConditions(ATOOLS::Cluster_Amplitude* ampl,
0101                                  ATOOLS::Blob* initial_blob);
0102 
0103     double Mass(const ATOOLS::Flavour &fl) const;
0104     bool Decays(const ATOOLS::Flavour& flav);
0105 
0106     inline void SetCluster(PDF::Cluster_Definitions_Base *clus) { p_clus=clus; }
0107   };
0108 }
0109 
0110 #endif