00001 // -*- C++ -*- 00002 // 00003 // MECuts.h is a part of ThePEG - Toolkit for HEP Event Generation 00004 // Copyright (C) 1999-2007 Leif Lonnblad 00005 // 00006 // ThePEG is licenced under version 2 of the GPL, see COPYING for details. 00007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 00008 // 00009 #ifndef ThePEG_MECuts_H 00010 #define ThePEG_MECuts_H 00011 // This is the declaration of the MECuts class. 00012 00013 #include "ThePEG/Interface/Interfaced.h" 00014 #include "ThePEG/Vectors/LorentzRotation.fh" 00015 #include "ThePEG/Utilities/Triplet.h" 00016 #include "ThePEG/PDT/StandardMatchers.h" 00017 00018 namespace ThePEG { 00019 00044 class MECuts: public Interfaced { 00045 00046 public: 00047 00051 MECuts(); 00052 00053 public: 00054 00059 void cut(const SubProcess &) const; 00060 00061 public: 00062 00067 Energy mHatMin() const { return theMHatMin; } 00072 Energy mHatMax() const { 00073 theMHatMax > mHatMin()? theMHatMax: Constants::MaxEnergy; 00074 } 00079 Energy sHatMin() const { return sqr(mHatMin()); } 00084 Energy sHatMax() const { return sqr(mHatMax()); } 00085 00090 Energy pTHatMin() const { return thePTHatMin; } 00095 Energy pTHatMax() const { 00096 return thePTHatMax > pTHatMin()? thePTHatMax: Constants::MaxEnergy; 00097 } 00098 00104 Energy pTHatSingularMin() const { return thePTHatSingularMin; } 00110 Energy singularMassMax() const { return theSingularMassMax; } 00111 00116 double cTHMin() const { return theCTHMin; } 00121 double cTHMax() const { return theCTHMax; } 00122 00126 Energy2 tHatMin() const { return theTHatMin; } 00130 Energy2 tHatMax() const { 00131 return theTHatMax > tHatMin()? theTHatMax: Constants::MaxEnergy2; 00132 } 00133 00137 Energy2 uHatMin() const { return theUHatMin; } 00141 Energy2 uHatMax() const { 00142 return theUHatMax > uHatMin()? theUHatMax: Constants::MaxEnergy2; 00143 } 00144 00149 Energy2 scaleMin() const { return theScaleMin; } 00154 Energy2 scaleMax() const { 00155 return theScaleMax > scaleMin()? theScaleMax: Constants::MaxEnergy2; 00156 } 00157 00158 public: 00159 00163 void persistentOutput(PersistentOStream &) const; 00167 void persistentInput(PersistentIStream &, int); 00168 00172 static void Init(); 00173 00174 protected: 00175 00181 virtual void newcut(const SubProcess &) const; 00182 00183 protected: 00184 00188 virtual void doupdate(); 00189 00193 virtual IBPtr clone() const; 00194 00195 private: 00196 00201 Energy theMHatMin; 00206 Energy theMHatMax; 00207 00212 Energy thePTHatMin; 00217 Energy thePTHatMax; 00218 00224 Energy thePTHatSingularMin; 00230 Energy theSingularMassMax; 00231 00236 double theCTHMin; 00241 double theCTHMax; 00242 00246 Energy2 theTHatMin; 00250 Energy2 theTHatMax; 00251 00255 Energy2 theUHatMin; 00259 Energy2 theUHatMax; 00260 00265 Energy2 theScaleMin; 00270 Energy2 theScaleMax; 00271 00272 private: 00273 00277 static ClassDescription<MECuts> initMECuts; 00278 00282 MECuts & operator=(const MECuts &); 00283 00284 }; 00285 00292 template <> 00293 struct BaseClassTrait<MECuts,1>: public ClassTraitsType { 00295 typedef Interfaced NthBase; 00296 }; 00297 00302 template <> 00303 struct ClassTraits<MECuts>: 00305 public ClassTraitsBase<MECuts> { 00306 static string className() { return "ThePEG::MECuts"; } 00307 }; 00308 00311 } 00312 00313 #endif /* ThePEG_MECuts_H */