File indexing completed on 2025-04-19 09:10:11
0001 #ifndef PHASIC_Process_Single_Process_H
0002 #define PHASIC_Process_Single_Process_H
0003
0004 #include "PHASIC++/Process/Process_Base.H"
0005 #include "ATOOLS/Phys/Variations.H"
0006
0007 namespace ATOOLS {
0008 class Hard_Process_Variation_Generator_Base;
0009 }
0010
0011 namespace PHASIC {
0012
0013 class Single_Process: public Process_Base {
0014
0015 protected:
0016
0017 double m_lastxs, m_lastbxs, m_dsweight, m_lastflux;
0018 ATOOLS::Weights_Map m_dadswgtmap;
0019 bool m_zero, m_pdfcts, m_dads;
0020 size_t m_nfconvscheme;
0021 ATOOLS::Cluster_Sequence_Info m_csi;
0022 std::vector<ATOOLS::asscontrib::type> m_asscontrib;
0023
0024
0025 virtual double KPTerms(int mode, double scalefac2=1.0) { return 0.; };
0026
0027
0028
0029
0030 virtual double CustomRelativeVariationWeightForRenormalizationScaleFactor(double) const {
0031 THROW(not_implemented, "This must be implemented in a subclass.");
0032 }
0033
0034 public:
0035
0036 Single_Process();
0037 virtual ~Single_Process();
0038
0039 size_t Size() const override;
0040 Process_Base *operator[](const size_t &i) override;
0041
0042 ATOOLS::Weight_Info *OneEvent(
0043 const int wmode,
0044 ATOOLS::Variations_Mode varmode=ATOOLS::Variations_Mode::all,
0045 const int mode=0) override;
0046
0047 double KFactor(const int mode=0) const;
0048
0049 double NfSchemeConversionTerms() const;
0050 double CollinearCounterTerms
0051 (const int i,const ATOOLS::Flavour &fl,const ATOOLS::Vec4D &p,
0052 const double &z,const double &t1,const double &t2,
0053 const double &muf2fac=1.0,
0054 const double &mur2fac=1.0,
0055 MODEL::Running_AlphaS * as=NULL) const;
0056
0057 #if 0
0058 double Differential(const ATOOLS::Vec4D_Vector &p);
0059 #endif
0060
0061 bool CalculateTotalXSec(const std::string &resultpath,
0062 const bool create) override;
0063 void SetLookUp(const bool lookup) override;
0064
0065 void SetScale(const Scale_Setter_Arguments &args) override;
0066 void SetKFactor(const KFactor_Setter_Arguments &args) override;
0067 void InitializeTheReweighting(ATOOLS::Variations_Mode) override;
0068
0069 ATOOLS::Cluster_Amplitude *Cluster(const ATOOLS::Vec4D_Vector &p,
0070 const size_t &mode=0);
0071
0072
0073
0074
0075
0076
0077
0078
0079 virtual double Partonic(
0080 const ATOOLS::Vec4D_Vector &p,
0081 ATOOLS::Variations_Mode varmode=ATOOLS::Variations_Mode::all,
0082 int mode=0) = 0;
0083
0084 inline virtual const double SPrimeMin() const override { return -1.; }
0085 inline virtual const double SPrimeMax() const override { return -1.; }
0086 inline virtual const bool HasInternalScale() const override { return false; }
0087 inline virtual const double InternalScale() const override { return -1.; }
0088
0089 virtual bool Combinable(const size_t &idi,
0090 const size_t &idj);
0091 virtual const ATOOLS::Flavour_Vector &
0092 CombinedFlavour(const size_t &idij);
0093
0094 virtual ATOOLS::Flavour ReMap
0095 (const ATOOLS::Flavour &fl,const size_t &id) const;
0096
0097 inline void ResetLastXS() { m_lastxs=0.0; }
0098
0099 inline double LastXS() const { return m_lastxs; }
0100
0101 inline bool Zero() const { return m_zero; }
0102
0103 private:
0104
0105
0106 ATOOLS::Cluster_Sequence_Info ClusterSequenceInfo(
0107 const ATOOLS::ClusterAmplitude_Vector &,
0108 const double &Q2,
0109 const double &muf2fac=1.0,
0110 const double &mur2fac=1.0,
0111 const double &showermuf2fac=1.0,
0112 MODEL::Running_AlphaS * as=NULL,
0113 const ATOOLS::Cluster_Sequence_Info * const nominalcsi=NULL);
0114 void AddISR(ATOOLS::Cluster_Sequence_Info &,
0115 const ATOOLS::ClusterAmplitude_Vector &,
0116 const double &Q2,
0117 const double &muf2fac=1.0,
0118 const double &mur2fac=1.0,
0119 const double &showermuf2fac=1.0,
0120 MODEL::Running_AlphaS * as=NULL,
0121 const ATOOLS::Cluster_Sequence_Info * const nominalcsi=NULL);
0122 void AddBeam(ATOOLS::Cluster_Sequence_Info &, const double &Q2);
0123
0124
0125 struct BornLikeReweightingInfo {
0126 BornLikeReweightingInfo() {}
0127 BornLikeReweightingInfo(const ATOOLS::ME_Weight_Info& mewgtinfo,
0128 const ATOOLS::ClusterAmplitude_Vector& ampls,
0129 double fallbackresult):
0130 m_wgt {mewgtinfo.m_B + mewgtinfo.m_VI + mewgtinfo.m_KP},
0131 m_orderqcd {mewgtinfo.m_oqcd},
0132 m_fl1 {mewgtinfo.m_fl1},
0133 m_fl2 {mewgtinfo.m_fl2},
0134 m_x1 {mewgtinfo.m_x1},
0135 m_x2 {mewgtinfo.m_x2},
0136 m_muF2 {mewgtinfo.m_muf2},
0137 m_muR2 {mewgtinfo.m_mur2},
0138 m_ampls {ampls},
0139 m_fallbackresult {fallbackresult}
0140 {}
0141 double m_wgt;
0142 size_t m_orderqcd;
0143 int m_fl1, m_fl2;
0144 double m_x1, m_x2;
0145 double m_muR2, m_muF2;
0146 ATOOLS::ClusterAmplitude_Vector m_ampls;
0147 double m_fallbackresult;
0148 };
0149
0150 double ReweightBornLike(ATOOLS::QCD_Variation_Params&,
0151 BornLikeReweightingInfo&);
0152
0153 ATOOLS::Cluster_Sequence_Info
0154 ClusterSequenceInfo(ATOOLS::QCD_Variation_Params& varparams,
0155 BornLikeReweightingInfo& info,
0156 const double& mur2fac,
0157 const ATOOLS::Cluster_Sequence_Info* const nominalcsi);
0158
0159 double KPTerms(const ATOOLS::QCD_Variation_Params *);
0160 virtual double KPTerms(int mode, PDF::PDF_Base *pdfa,
0161 PDF::PDF_Base *pdfb, double scalefac2=0.);
0162
0163 double MuR2(const ATOOLS::QCD_Variation_Params&,
0164 Single_Process::BornLikeReweightingInfo&) const;
0165
0166 double AlphaSRatio(double mur2old, double mur2new,
0167 MODEL::Running_AlphaS * asnew);
0168
0169 ATOOLS::Weights_Map Differential(const ATOOLS::Vec4D_Vector&,
0170 ATOOLS::Variations_Mode) override;
0171
0172
0173 void ResetResultsForDifferential(ATOOLS::Variations_Mode);
0174 void InitMEWeightInfo();
0175 void UpdateIntegratorMomenta(const ATOOLS::Vec4D_Vector&);
0176 void UpdateIntegratorMomenta(ATOOLS::ClusterAmplitude_Vector&);
0177 void UpdateSubeventMomenta(ATOOLS::NLO_subevt&);
0178 void CalculateFlux(const ATOOLS::Vec4D_Vector&);
0179 void UpdateMEWeightInfo(Scale_Setter_Base*);
0180 void ReweightBVI(ATOOLS::ClusterAmplitude_Vector&);
0181 void ReweightRS(ATOOLS::ClusterAmplitude_Vector&);
0182 void CalculateAssociatedContributionVariations();
0183
0184 std::vector<ATOOLS::Hard_Process_Variation_Generator_Base*>
0185 m_hard_process_variation_generators;
0186
0187 };
0188
0189 }
0190
0191 #endif