00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef THEPEG_V2LeptonsCut_H
00010 #define THEPEG_V2LeptonsCut_H
00011
00012
00013
00014
00015 #include "ThePEG/Cuts/MultiCutBase.h"
00016
00017 namespace ThePEG {
00018
00028 class V2LeptonsCut: public MultiCutBase {
00029
00033 enum Family {
00034 electron = 1,
00035 muon = 2,
00036 tau = 4
00037 };
00038
00042 enum CComb {
00043 posneg,
00044 negneu,
00045 posneu,
00046 neuneu
00047 };
00048
00049 public:
00050
00056 V2LeptonsCut() : theMinM(70.0*GeV), theMaxM(90.0*GeV), theFamilies(electron|muon),
00057 theCComb(negneu|posneu) {}
00058
00062 virtual ~V2LeptonsCut();
00064
00065 public:
00066
00074 virtual Energy2 minS(const tcPDVector & pv) const;
00075
00081 virtual Energy2 maxS(const tcPDVector & pv) const;
00082
00087 virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype,
00088 const vector<LorentzMomentum> & p) const;
00090
00094 virtual void describe() const;
00095
00096 protected:
00097
00101 bool checkTypes(long id1, long id2) const;
00102
00106 int family(long id) const;
00107
00108 public:
00109
00116 void persistentOutput(PersistentOStream & os) const;
00117
00123 void persistentInput(PersistentIStream & is, int version);
00125
00132 static void Init();
00133
00134 protected:
00135
00142 virtual IBPtr clone() const;
00143
00148 virtual IBPtr fullclone() const;
00150
00151 private:
00152
00156 Energy maxMinM() const;
00157
00161 Energy minMaxM() const;
00162
00163 private:
00164
00168 Energy theMinM;
00169
00173 Energy theMaxM;
00174
00178 int theFamilies;
00179
00183 int theCComb;
00184
00185 private:
00186
00191 static ClassDescription<V2LeptonsCut> initV2LeptonsCut;
00192
00197 V2LeptonsCut & operator=(const V2LeptonsCut &);
00198
00199 };
00200
00201 }
00202
00203 #include "ThePEG/Utilities/ClassTraits.h"
00204
00205 namespace ThePEG {
00206
00211 template <>
00212 struct BaseClassTrait<V2LeptonsCut,1> {
00214 typedef MultiCutBase NthBase;
00215 };
00216
00219 template <>
00220 struct ClassTraits<V2LeptonsCut>
00221 : public ClassTraitsBase<V2LeptonsCut> {
00223 static string className() { return "ThePEG::V2LeptonsCut"; }
00227 static string library() { return "V2LeptonsCut.so"; }
00228 };
00229
00232 }
00233
00234 #endif