00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef THEPEG_MadGraphTwoCut_H
00010 #define THEPEG_MadGraphTwoCut_H
00011
00012
00013
00014
00015 #include "ThePEG/Cuts/TwoCutBase.h"
00016
00017 namespace ThePEG {
00018
00028 class MadGraphTwoCut: public TwoCutBase {
00029
00030 public:
00031
00035 enum CutType {
00036 INVMASS,
00037 DELTAR
00039 };
00040
00044 enum PType {
00045 JET,
00046 LEP,
00047 PHO,
00048 BOT,
00049 NOT
00050 };
00051
00055 enum PPType {
00056 JETJET,
00057 LEPLEP,
00059 PHOPHO,
00060 BOTBOT,
00061 BOTJET,
00063 PHOJET,
00065 JETLEP,
00067 PHOBOT,
00068 BOTLEP,
00069 PHOLEP
00070 };
00071
00072 public:
00073
00079 MadGraphTwoCut()
00080 : cutType(DELTAR), pairType(JETJET), theCut(0.0) {}
00081
00088 MadGraphTwoCut(CutType t, PPType p, double c)
00089 : cutType(t), pairType(p), theCut(c) {}
00090
00092
00093 public:
00094
00101 virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const;
00102
00108 virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const;
00109
00115 virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const;
00116
00127 virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const;
00128
00135 virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const;
00136
00143 virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype,
00144 LorentzMomentum pi, LorentzMomentum pj,
00145 bool inci = false, bool incj = false) const;
00147
00148 protected:
00149
00154 bool checkType(tcPDPtr pi, tcPDPtr pj) const;
00155
00159 PType getType(tcPDPtr p) const;
00160
00161 public:
00162
00169 void persistentOutput(PersistentOStream & os) const;
00170
00176 void persistentInput(PersistentIStream & is, int version);
00178
00185 static void Init();
00186
00187 protected:
00188
00195 virtual IBPtr clone() const;
00196
00201 virtual IBPtr fullclone() const;
00203
00204 private:
00205
00209 CutType cutType;
00210
00214 PPType pairType;
00215
00219 double theCut;
00220
00221 private:
00222
00227 static ClassDescription<MadGraphTwoCut> initMadGraphTwoCut;
00228
00233 MadGraphTwoCut & operator=(const MadGraphTwoCut &);
00234
00235 };
00236
00237 }
00238
00239 #include "ThePEG/Utilities/ClassTraits.h"
00240
00241 namespace ThePEG {
00242
00247 template <>
00248 struct BaseClassTrait<MadGraphTwoCut,1> {
00250 typedef TwoCutBase NthBase;
00251 };
00252
00255 template <>
00256 struct ClassTraits<MadGraphTwoCut>
00257 : public ClassTraitsBase<MadGraphTwoCut> {
00259 static string className() { return "ThePEG::MadGraphTwoCut"; }
00263 static string library() { return "MadGraphReader.so"; }
00264 };
00265
00268 }
00269
00270 #endif