|
|
|||
File indexing completed on 2026-08-06 09:38:21
0001 // -*- C++ -*- 0002 // 0003 // SimpleDISCut.h is a part of ThePEG - Toolkit for HEP Event Generation 0004 // Copyright (C) 1999-2019 Leif Lonnblad 0005 // 0006 // ThePEG is licenced under version 3 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef THEPEG_SimpleDISCut_H 0010 #define THEPEG_SimpleDISCut_H 0011 // 0012 // This is the declaration of the SimpleDISCut class. 0013 // 0014 0015 #include "ThePEG/Cuts/TwoCutBase.h" 0016 0017 namespace ThePEG { 0018 0019 /** 0020 * SimpleDISCut inherits from TwoCutBase and omplements a simple 0021 * \f$Q^2\f$ cut on the a scattered lepton, either neutral or charged 0022 * current. 0023 * 0024 * @see \ref SimpleDISCutInterfaces "The interfaces" 0025 * defined for SimpleDISCut. 0026 */ 0027 class SimpleDISCut: public TwoCutBase { 0028 0029 public: 0030 0031 /** 0032 * The default constructor. 0033 */ 0034 SimpleDISCut() 0035 : theMinQ2(1.0*GeV2), theMaxQ2(100.0*GeV2),theMiny(0.0), theMaxy(1.0), 0036 theMinW2(100.0*GeV2), theMaxW2(1000000.0*GeV2), chargedCurrent(false) {} 0037 0038 public: 0039 0040 /** @name Overridden virtual functions defined in the base class. */ 0041 //@{ 0042 /** 0043 * Return the minimum allowed squared invariant mass of two outgoing 0044 * partons of type \a pi and \a pj. Returns zero. 0045 */ 0046 virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; 0047 0048 /** 0049 * Return the minimum allowed value of the negative of the squared 0050 * invariant mass of an incoming parton of type \a pi and an 0051 * outgoing parton of type \a po. Return the minimum \f$Q^2\f$ if 0052 * the incoming and outgoing particles are matching leptons. 0053 */ 0054 virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; 0055 0056 /** 0057 * Return the minimum allowed value of \f$\Delta 0058 * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two 0059 * outgoing partons of type \a pi and \a pj. Returns zero. 0060 */ 0061 virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; 0062 0063 /** 0064 * Return the minimum allowed value of the longitudinally invariant 0065 * \f$k_\perp\f$-algorithms distance measure. This is defined as 0066 * \f$\min(p_{\perp i}, p_{\perp 0067 * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing 0068 * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a 0069 * single outgoing parton. Returns 0 if both partons are incoming. A 0070 * null pointer indicates an incoming parton, hence the type of the 0071 * incoming parton is irrelevant. Returns zero. 0072 */ 0073 virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; 0074 0075 /** 0076 * Return the minimum allowed value of the Durham 0077 * \f$k_\perp\f$-algorithms distance measure. This is defined as 0078 * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two 0079 * outgoing partons. Returns zero. 0080 */ 0081 virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const; 0082 0083 /** 0084 * Return true if a pair of particles with type \a pitype and \a 0085 * pjtype and momenta \a pi and \a pj respectively passes the 0086 * cuts. \a inci and \a inj indicates if the corresponding particles 0087 * are incoming. 0088 */ 0089 virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, 0090 LorentzMomentum pi, LorentzMomentum pj, 0091 bool inci = false, bool incj = false) const; 0092 //@} 0093 0094 /** 0095 * Describe the currently active cuts in the log file. 0096 */ 0097 virtual void describe() const; 0098 0099 protected: 0100 0101 /** 0102 * Check that the types of the incoming and outgoing particle types 0103 * matches a DIS event. 0104 */ 0105 bool check(long idi, long ido) const; 0106 0107 public: 0108 0109 /** @name Functions used by the persistent I/O system. */ 0110 //@{ 0111 /** 0112 * Function used to write out object persistently. 0113 * @param os the persistent output stream written to. 0114 */ 0115 void persistentOutput(PersistentOStream & os) const; 0116 0117 /** 0118 * Function used to read in object persistently. 0119 * @param is the persistent input stream read from. 0120 * @param version the version number of the object when written. 0121 */ 0122 void persistentInput(PersistentIStream & is, int version); 0123 //@} 0124 0125 /** 0126 * The standard Init function used to initialize the interfaces. 0127 * Called exactly once for each class by the class description system 0128 * before the main function starts or 0129 * when this class is dynamically loaded. 0130 */ 0131 static void Init(); 0132 0133 protected: 0134 0135 /** @name Clone Methods. */ 0136 //@{ 0137 /** 0138 * Make a simple clone of this object. 0139 * @return a pointer to the new object. 0140 */ 0141 virtual IBPtr clone() const; 0142 0143 /** Make a clone of this object, possibly modifying the cloned object 0144 * to make it sane. 0145 * @return a pointer to the new object. 0146 */ 0147 virtual IBPtr fullclone() const; 0148 //@} 0149 0150 private: 0151 0152 /** 0153 * Helper function used by the interface. 0154 */ 0155 double maxMiny() const; 0156 0157 /** 0158 * Helper function used by the interface. 0159 */ 0160 double minMaxy() const; 0161 0162 /** 0163 * Helper function used by the interface. 0164 */ 0165 Energy2 maxMinQ2() const; 0166 0167 /** 0168 * Helper function used by the interface. 0169 */ 0170 Energy2 minMaxQ2() const; 0171 0172 /** 0173 * Helper function used by the interface. 0174 */ 0175 Energy2 maxMinW2() const; 0176 0177 /** 0178 * Helper function used by the interface. 0179 */ 0180 Energy2 minMaxW2() const; 0181 0182 private: 0183 0184 /** 0185 * The minimum \f$Q^2\f$. 0186 */ 0187 Energy2 theMinQ2; 0188 0189 /** 0190 * The maximum \f$Q^2\f$. This is only applied as a post-cut. 0191 */ 0192 Energy2 theMaxQ2; 0193 0194 /** 0195 * The minimum \f$y\f$. 0196 */ 0197 double theMiny; 0198 0199 /** 0200 * The maximum \f$y\f$. This is only applied as a post-cut. 0201 */ 0202 double theMaxy; 0203 0204 0205 0206 /** 0207 * The minimum \f$W^2\f$. This is only applied as a post-cut. 0208 */ 0209 Energy2 theMinW2; 0210 0211 /** 0212 * The maximum \f$W^2\f$. This is only applied as a post-cut. 0213 */ 0214 Energy2 theMaxW2; 0215 0216 /** 0217 * If true the cut is applied to charged current events, otherwise 0218 * it is applied to neutral current events. 0219 */ 0220 bool chargedCurrent; 0221 0222 private: 0223 0224 /** 0225 * The static object used to initialize the description of this class. 0226 * Indicates that this is a concrete class with persistent data. 0227 */ 0228 static ClassDescription<SimpleDISCut> initSimpleDISCut; 0229 0230 /** 0231 * The assignment operator is private and must never be called. 0232 * In fact, it should not even be implemented. 0233 */ 0234 SimpleDISCut & operator=(const SimpleDISCut &) = delete; 0235 0236 }; 0237 0238 } 0239 0240 #include "ThePEG/Utilities/ClassTraits.h" 0241 0242 namespace ThePEG { 0243 0244 /** @cond TRAITSPECIALIZATIONS */ 0245 0246 /** This template specialization informs ThePEG about the 0247 * base classes of SimpleDISCut. */ 0248 template <> 0249 struct BaseClassTrait<SimpleDISCut,1> { 0250 /** Typedef of the first base class of SimpleDISCut. */ 0251 typedef TwoCutBase NthBase; 0252 }; 0253 0254 /** This template specialization informs ThePEG about the name of 0255 * the SimpleDISCut class and the shared object where it is defined. */ 0256 template <> 0257 struct ClassTraits<SimpleDISCut> 0258 : public ClassTraitsBase<SimpleDISCut> { 0259 /** Return a platform-independent class name */ 0260 static string className() { return "ThePEG::SimpleDISCut"; } 0261 /** Return the name of the shared library be loaded to get 0262 * access to the SimpleDISCut class and every other class it uses 0263 * (except the base class). */ 0264 static string library() { return "SimpleDISCut.so"; } 0265 }; 0266 0267 /** @endcond */ 0268 0269 } 0270 0271 #endif /* THEPEG_SimpleDISCut_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|