File indexing completed on 2025-04-19 09:10:05
0001 #ifndef MCATNLO_Showers_Sudakov_H
0002 #define MCATNLO_Showers_Sudakov_H
0003
0004 #include "PDF/Main/ISR_Handler.H"
0005 #include "PDF/Main/PDF_Base.H"
0006 #include "MCATNLO/Showers/Splitting_Function_Group.H"
0007 #include "MCATNLO/Tools/Parton.H"
0008 #include "MODEL/Main/Running_AlphaS.H"
0009 #include "ATOOLS/Phys/Weights.H"
0010
0011 namespace MCATNLO {
0012 typedef std::map<ATOOLS::Flavour,Splitting_Function_Base*> SF_E_Map;
0013 typedef std::map<ATOOLS::Flavour,SF_E_Map> SF_EE_Map;
0014 typedef std::map<ATOOLS::Flavour,SF_EE_Map> SF_EEE_Map;
0015
0016 class Shower;
0017
0018 class Sudakov : public Splitting_Function_Group {
0019 double m_k0sqi, m_k0sqf, m_k0sq_gsplit_fac, m_phi;
0020 double m_deltaz, m_kperp2, m_z, m_y, m_x, m_ymin, m_ymax, m_scale;
0021 double m_zmin,m_zmax, m_weight;
0022 int m_ewmode, m_scalescheme;
0023 const ATOOLS::Mass_Selector * p_rms;
0024 ATOOLS::Flavour m_cfl, m_flspec;
0025 Parton * p_split, * p_spect;
0026 SF_EEE_Map m_fffmap, m_ffimap, m_iffmap, m_ifimap, m_fifmap, m_fiimap;
0027 SF_EEE_Map m_sffmap, m_sfimap, m_sifmap, m_siimap;
0028 std::vector<Splitting_Function_Base *> m_addsplittings;
0029 Shower *p_shower;
0030 std::vector<SFC_Getter*> m_cgets;
0031 bool m_keeprewinfo;
0032 double m_reweightscalecutoff;
0033 std::pair<double, double> m_pdfmin;
0034 std::vector<size_t> m_disallowflav;
0035 void RegisterDefaults() const;
0036 void ProduceT();
0037 bool Veto(double,double);
0038 bool Splitting(double,double);
0039 bool DefineFFBoundaries(double,double);
0040 bool DefineFIBoundaries(double,double,int);
0041 bool DefineIFBoundaries(double,double,int);
0042 bool DefineIIBoundaries(double,double,int);
0043 void Add(Splitting_Function_Base * split);
0044 void AddToMaps(Splitting_Function_Base * split,const int mode=1);
0045 public:
0046 Sudakov(PDF::ISR_Handler *isr,const int qed);
0047 ~Sudakov();
0048
0049 void InitSplittingFunctions(MODEL::Model_Base *md,const int kfmode);
0050 void SetCoupling(MODEL::Model_Base *md,
0051 const double &k0sqi,const double &k0sqf,
0052 const double &isfac,const double &fsfac,
0053 const double &k0sq_gsplit_fac);
0054 void SetKeepReweightingInfo(bool on) { m_keeprewinfo = on; }
0055 void SetReweightScaleCutoff(double v) { m_reweightscalecutoff = v; }
0056 void SetPDFMin(std::pair<double, double>& m) { m_pdfmin = m; }
0057 bool Generate(Parton *);
0058 double OverIntegrated(const double,const double,const double,
0059 const double=1.,const int=-1);
0060
0061 inline void GetSplittingParameters(double &,double &,double &,double &);
0062
0063 inline void SetMS(const ATOOLS::Mass_Selector *const ms) { p_rms=ms; }
0064
0065 inline const ATOOLS::Mass_Selector *MS() const { return p_rms; }
0066
0067 inline const SF_EEE_Map &FFFMap() const { return m_fffmap; }
0068 inline const SF_EEE_Map &FFIMap() const { return m_ffimap; }
0069 inline const SF_EEE_Map &IFFMap() const { return m_iffmap; }
0070 inline const SF_EEE_Map &IFIMap() const { return m_ifimap; }
0071 inline const SF_EEE_Map &FIFMap() const { return m_fifmap; }
0072 inline const SF_EEE_Map &FIIMap() const { return m_fiimap; }
0073
0074 const SF_E_Map *HasKernel(const ATOOLS::Flavour &fli,
0075 const ATOOLS::Flavour &flj,
0076 const cstp::code type) const;
0077
0078 int HasKernel(const ATOOLS::Flavour &fli,
0079 const ATOOLS::Flavour &flj,
0080 const ATOOLS::Flavour &flk,
0081 const cstp::code type) const;
0082
0083 inline double FSPT2Min() const { return m_k0sqf; }
0084 inline double ISPT2Min() const { return m_k0sqi; }
0085
0086 inline void SetShower(Shower *const shower) { p_shower=shower; }
0087 inline double Weight() const { return m_weight; }
0088
0089 inline void SetDisallowFlavour(const std::vector<size_t>& df)
0090 { m_disallowflav=df; }
0091 };
0092
0093 void Sudakov::GetSplittingParameters
0094 (double & kt2,double & z,double & y,double & phi) {
0095 kt2 = m_kperp2; z = m_z; y = m_y; phi = m_phi;
0096 }
0097 }
0098
0099 #endif