File indexing completed on 2025-04-19 09:10:02
0001 #ifndef DIRE__Shower__Lorentz_H
0002 #define DIRE__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 "DIRE/Tools/Kernel_Key.H"
0008 #include "DIRE/Tools/Splitting.H"
0009
0010 namespace DIRE {
0011
0012 class Shower;
0013
0014 class Lorentz {
0015 protected:
0016
0017 Kernel *p_sk;
0018 int m_type;
0019
0020 ATOOLS::Flavour_Vector m_fl;
0021
0022 const 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 int mode) const;
0032
0033 public:
0034
0035 Lorentz(const Kernel_Key &k,const int type);
0036
0037 virtual ~Lorentz();
0038
0039 virtual double Value(const Splitting &s) const = 0;
0040 virtual double Jacobian(const Splitting &s) const = 0;
0041
0042 virtual double Estimate(const Splitting &s) const = 0;
0043 virtual double Integral(const Splitting &s) const = 0;
0044
0045 virtual bool GeneratePoint(Splitting &s) const = 0;
0046 virtual int Construct(Splitting &s,const int mode) const = 0;
0047 virtual bool Cluster(Splitting &s,const int mode) const = 0;
0048
0049 virtual void SetMS(ATOOLS::Mass_Selector *const ms);
0050
0051 virtual bool Allowed(const Splitting &s) const;
0052
0053 bool SetLimits(Splitting &s) const;
0054
0055 inline const ATOOLS::Flavour &Flav(const int i) const { return m_fl[i]; }
0056 inline const ATOOLS::Flavour_Vector &Flavs() const { return m_fl; }
0057
0058 inline void SetMS(const ATOOLS::Mass_Selector *const ms) { p_ms=ms; }
0059
0060 };
0061
0062 typedef ATOOLS::Getter_Function
0063 <Lorentz,Kernel_Key,std::less<std::string> > Lorentz_Getter;
0064
0065 }
0066
0067 #endif