|
|
|||
File indexing completed on 2026-08-06 09:38:21
0001 // -*- C++ -*- 0002 // 0003 // V2LeptonsCut.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_V2LeptonsCut_H 0010 #define THEPEG_V2LeptonsCut_H 0011 // 0012 // This is the declaration of the V2LeptonsCut class. 0013 // 0014 0015 #include "ThePEG/Cuts/MultiCutBase.h" 0016 0017 namespace ThePEG { 0018 0019 /** 0020 * This class inherits from MultiCutBase and describes cuts on the 0021 * invariant mass of two final state leptons corresponding to the 0022 * decay of a vector boson. It can be used when generating matrix 0023 * elements to avoid the long tails of the resonance. 0024 * 0025 * @see \ref V2LeptonsCutInterfaces "The interfaces" 0026 * defined for V2LeptonsCut. 0027 */ 0028 class V2LeptonsCut: public MultiCutBase { 0029 0030 /** 0031 * Enumeration of the different families. 0032 */ 0033 enum Family { 0034 electron = 1, /**< Lepton Family. */ 0035 muon = 2, /**< Muon Family. */ 0036 tau = 4 /**< Tau Family. */ 0037 }; 0038 0039 /** 0040 * Enumeration of charge combinations. 0041 */ 0042 enum CComb { 0043 posneg = 1, /**< charged lepton anti-lepton pair. */ 0044 negneu = 2, /**< negative lepton anti-neutrino pair. */ 0045 posneu = 4, /**< positive lepton anti-neutrino pair. */ 0046 neuneu = 8 /**< neutrino anti-neutrino pair. */ 0047 }; 0048 0049 public: 0050 0051 /** 0052 * The default constructor. 0053 */ 0054 V2LeptonsCut() : theMinM(70.0*GeV), theMaxM(90.0*GeV), theFamilies(electron|muon), 0055 theCComb(negneu|posneu) {} 0056 0057 public: 0058 0059 /** @name Overridden virtual functions defined in the base class. */ 0060 //@{ 0061 /** 0062 * Return the minimum allowed value of the squared invariant mass of 0063 * a set of outgoing partons of the given types. Typically used to 0064 * cut off the tails of the mass of a resonance for efficiency. 0065 */ 0066 virtual Energy2 minS(const tcPDVector & pv) const; 0067 0068 /** 0069 * Return the maximum allowed value of the squared invariant mass of 0070 * a set of outgoing partons of the given types. Typically used to 0071 * cut off the tails of the mass of a resonance for efficiency. 0072 */ 0073 virtual Energy2 maxS(const tcPDVector & pv) const; 0074 0075 /** 0076 * Return true if a set of outgoing particles with typea \a ptype 0077 * and corresponding momenta \a p passes the cuts. 0078 */ 0079 virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype, 0080 const vector<LorentzMomentum> & p) const; 0081 //@} 0082 0083 /** 0084 * Describe the currently active cuts in the log file. 0085 */ 0086 virtual void describe() const; 0087 0088 protected: 0089 0090 /** 0091 * Check if the PDG id numbers matches this cut. 0092 */ 0093 bool checkTypes(long id1, long id2) const; 0094 0095 /** 0096 * Check the family of the given PDG id number. 0097 */ 0098 int family(long id) const; 0099 0100 public: 0101 0102 /** @name Functions used by the persistent I/O system. */ 0103 //@{ 0104 /** 0105 * Function used to write out object persistently. 0106 * @param os the persistent output stream written to. 0107 */ 0108 void persistentOutput(PersistentOStream & os) const; 0109 0110 /** 0111 * Function used to read in object persistently. 0112 * @param is the persistent input stream read from. 0113 * @param version the version number of the object when written. 0114 */ 0115 void persistentInput(PersistentIStream & is, int version); 0116 //@} 0117 0118 /** 0119 * The standard Init function used to initialize the interfaces. 0120 * Called exactly once for each class by the class description system 0121 * before the main function starts or 0122 * when this class is dynamically loaded. 0123 */ 0124 static void Init(); 0125 0126 protected: 0127 0128 /** @name Clone Methods. */ 0129 //@{ 0130 /** 0131 * Make a simple clone of this object. 0132 * @return a pointer to the new object. 0133 */ 0134 virtual IBPtr clone() const; 0135 0136 /** Make a clone of this object, possibly modifying the cloned object 0137 * to make it sane. 0138 * @return a pointer to the new object. 0139 */ 0140 virtual IBPtr fullclone() const; 0141 //@} 0142 0143 private: 0144 0145 /** 0146 * Helper function used by the interface. 0147 */ 0148 Energy maxMinM() const; 0149 0150 /** 0151 * Helper function used by the interface. 0152 */ 0153 Energy minMaxM() const; 0154 0155 private: 0156 0157 /** 0158 * The minimum invariant mass. 0159 */ 0160 Energy theMinM; 0161 0162 /** 0163 * The maximum invariant mass. 0164 */ 0165 Energy theMaxM; 0166 0167 /** 0168 * Integer corresponding to the lepton families to match. 0169 */ 0170 int theFamilies; 0171 0172 /** 0173 * Integer corresponding to the charge combination to match. 0174 */ 0175 int theCComb; 0176 0177 private: 0178 0179 /** 0180 * The static object used to initialize the description of this class. 0181 * Indicates that this is a concrete class with persistent data. 0182 */ 0183 static ClassDescription<V2LeptonsCut> initV2LeptonsCut; 0184 0185 /** 0186 * The assignment operator is private and must never be called. 0187 * In fact, it should not even be implemented. 0188 */ 0189 V2LeptonsCut & operator=(const V2LeptonsCut &) = delete; 0190 0191 }; 0192 0193 } 0194 0195 #include "ThePEG/Utilities/ClassTraits.h" 0196 0197 namespace ThePEG { 0198 0199 /** @cond TRAITSPECIALIZATIONS */ 0200 0201 /** This template specialization informs ThePEG about the 0202 * base classes of V2LeptonsCut. */ 0203 template <> 0204 struct BaseClassTrait<V2LeptonsCut,1> { 0205 /** Typedef of the first base class of V2LeptonsCut. */ 0206 typedef MultiCutBase NthBase; 0207 }; 0208 0209 /** This template specialization informs ThePEG about the name of 0210 * the V2LeptonsCut class and the shared object where it is defined. */ 0211 template <> 0212 struct ClassTraits<V2LeptonsCut> 0213 : public ClassTraitsBase<V2LeptonsCut> { 0214 /** Return a platform-independent class name */ 0215 static string className() { return "ThePEG::V2LeptonsCut"; } 0216 /** Return the name of the shared library be loaded to get 0217 * access to the V2LeptonsCut class and every other class it uses 0218 * (except the base class). */ 0219 static string library() { return "V2LeptonsCut.so"; } 0220 }; 0221 0222 /** @endcond */ 0223 0224 } 0225 0226 #endif /* THEPEG_V2LeptonsCut_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|