File indexing completed on 2025-04-19 09:10:02
0001 #ifndef DIRE__Shower__Kernel_H
0002 #define DIRE__Shower__Kernel_H
0003
0004 #include "DIRE/Shower/Lorentz.H"
0005 #include "DIRE/Shower/Gauge.H"
0006 #include "DIRE/Tools/Weight.H"
0007
0008 #include <vector>
0009
0010 namespace DIRE {
0011
0012 class Shower;
0013
0014 class Kernel {
0015 private:
0016
0017 Shower *p_ps;
0018
0019 Lorentz *p_lf;
0020 Gauge *p_gf;
0021
0022 double m_ef;
0023 int m_type, m_mode, m_on;
0024
0025 public:
0026
0027 Kernel(Shower *const ps,Kernel_Key key);
0028
0029 ~Kernel();
0030
0031 double Value(const Splitting &s) const;
0032
0033 Weight GetWeight(const Splitting &s,const double &o,
0034 const Weight *w=NULL) const;
0035
0036 bool GeneratePoint(Splitting &s) const;
0037
0038 double Integral(Splitting &s) const;
0039
0040 int Construct(Splitting &s,const int mode) const;
0041
0042 std::string Class() const;
0043
0044 inline bool Allowed(const Splitting &s)
0045 { return p_lf->Allowed(s)&&p_gf->Allowed(s); }
0046
0047 inline Lorentz *LF() const { return p_lf; }
0048 inline Gauge *GF() const { return p_gf; }
0049
0050 inline Shower *PS() const { return p_ps; }
0051
0052 inline int Type() const { return m_type; }
0053 inline int Mode() const { return m_mode; }
0054
0055 inline int On() const { return m_on; }
0056
0057 inline void SetOn(const int &on) { m_on=on; }
0058
0059 inline void SetEF(const double &ef) { m_ef=ef; }
0060
0061 };
0062
0063 typedef std::vector<Kernel*> Kernel_Vector;
0064
0065 }
0066
0067 #endif