File indexing completed on 2025-04-19 09:10:02
0001 #ifndef DIM__Shower__Lorentz_H
0002 #define DIM__Shower__Lorentz_H
0003
0004 #include "ATOOLS/Org/Getter_Function.H"
0005 #include "ATOOLS/Phys/Flavour.H"
0006 #include "PHASIC++/Channels/CSS_Kinematics.H"
0007 #include "DIM/Tools/Kernel_Key.H"
0008 #include "DIM/Tools/Splitting.H"
0009
0010 namespace DIM {
0011
0012 class Shower;
0013
0014 class Lorentz {
0015 protected:
0016
0017 Kernel *p_sk;
0018 int m_type;
0019
0020 ATOOLS::Flavour m_fl[3];
0021
0022 ATOOLS::Mass_Selector *p_ms;
0023
0024 inline double Lam(const double &a,
0025 const double &b,
0026 const double &c) const
0027 { return (a-b-c)*(a-b-c)-4.0*b*c; }
0028
0029 void SetParams(Splitting &s,const PHASIC::Kin_Args &ff) const;
0030
0031 int Update(Splitting &s,const PHASIC::Kin_Args &ff,
0032 const int mode) const;
0033
0034 public:
0035
0036 Lorentz(const Kernel_Key &k,const int type);
0037
0038 virtual ~Lorentz();
0039
0040 virtual double Value(const Splitting &s) const = 0;
0041 virtual double Jacobian(const Splitting &s) const = 0;
0042
0043 virtual double Estimate(const Splitting &s) const = 0;
0044 virtual double Integral(const Splitting &s) const = 0;
0045
0046 virtual bool GeneratePoint(Splitting &s) const = 0;
0047 virtual int Construct(Splitting &s,const int mode) const = 0;
0048
0049 virtual bool Compute(Splitting &s) const = 0;
0050
0051 virtual double MEPSWeight(const Splitting &s) const = 0;
0052
0053 virtual double AsymmetryFactor(const Splitting &s) const;
0054
0055 bool Allowed(const Splitting &s) const;
0056
0057 bool SetLimits(Splitting &s) const;
0058
0059 inline const ATOOLS::Flavour &Flav(const int i) const { return m_fl[i]; }
0060
0061 inline void SetMS(ATOOLS::Mass_Selector *const ms) { p_ms=ms; }
0062
0063 };
0064
0065 typedef ATOOLS::Getter_Function
0066 <Lorentz,Kernel_Key,std::less<std::string> > Lorentz_Getter;
0067
0068 }
0069
0070 #endif