|
|
|||
File indexing completed on 2026-08-06 09:24:13
0001 // -*- C++ -*- 0002 // 0003 // FlatInvertiblePhasespaceLabFrame.h is a part of Herwig - A multi-purpose Monte Carlo event generator 0004 // Copyright (C) 2002-2019 The Herwig Collaboration 0005 // 0006 // Herwig 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 Herwig_FlatInvertibleLabframePhasespace_H 0010 #define Herwig_FlatInvertibleLabframePhasespace_H 0011 // 0012 // This is the declaration of the FlatInvertibleLabframePhasespace class. 0013 // 0014 0015 #include "Herwig/MatrixElement/Matchbox/Phasespace/FlatInvertiblePhasespace.h" 0016 0017 namespace Herwig { 0018 0019 using namespace ThePEG; 0020 0021 /** 0022 * \ingroup Matchbox 0023 * \author Michael Rauch 0024 * 0025 * \brief FlatInvertibleLabframePhasespace implements flat, invertible phase space generation in the lab frame 0026 * 0027 */ 0028 class FlatInvertibleLabframePhasespace: public FlatInvertiblePhasespace { 0029 0030 public: 0031 0032 /** 0033 * The default constructor. 0034 */ 0035 FlatInvertibleLabframePhasespace(); 0036 0037 public: 0038 0039 /** 0040 * Generate a phase space point and return its weight. 0041 */ 0042 virtual double generateTwoToNKinematics(const double*, 0043 vector<Lorentz5Momentum>& momenta); 0044 0045 /** 0046 * Return the number of random numbers required to produce a given 0047 * multiplicity final state. 0048 */ 0049 virtual int nDimPhasespace(int nFinal) const { 0050 if ( nFinal == 1 ) 0051 return 3; 0052 return 3*nFinal - 2; 0053 } 0054 0055 public: 0056 0057 /** 0058 * Return true, if this phasespace generator will generate incoming 0059 * partons itself. 0060 */ 0061 virtual bool haveX1X2() const { return true; } 0062 0063 /** 0064 * Return true, if this phase space generator expects 0065 * the incoming partons in their center-of-mass system 0066 */ 0067 virtual bool wantCMS() const { return false; } 0068 0069 /** 0070 * Invert the given phase space point to the random numbers which 0071 * would have generated it. 0072 */ 0073 virtual double invertTwoToNKinematics(const vector<Lorentz5Momentum>& momenta, 0074 double* r) const; 0075 0076 private: 0077 0078 /** 0079 * True if SHat should be generated flat in log(SHat/S), 0080 * false if SHat should be generated flat in SHat. 0081 */ 0082 bool theLogSHat; 0083 0084 public: 0085 0086 /** @name Functions used by the persistent I/O system. */ 0087 //@{ 0088 /** 0089 * Function used to write out object persistently. 0090 * @param os the persistent output stream written to. 0091 */ 0092 void persistentOutput(PersistentOStream & os) const; 0093 0094 /** 0095 * Function used to read in object persistently. 0096 * @param is the persistent input stream read from. 0097 * @param version the version number of the object when written. 0098 */ 0099 void persistentInput(PersistentIStream & is, int version); 0100 //@} 0101 0102 /** 0103 * The standard Init function used to initialize the interfaces. 0104 * Called exactly once for each class by the class description system 0105 * before the main function starts or 0106 * when this class is dynamically loaded. 0107 */ 0108 static void Init(); 0109 0110 protected: 0111 0112 /** @name Clone Methods. */ 0113 //@{ 0114 /** 0115 * Make a simple clone of this object. 0116 * @return a pointer to the new object. 0117 */ 0118 virtual IBPtr clone() const; 0119 0120 /** Make a clone of this object, possibly modifying the cloned object 0121 * to make it sane. 0122 * @return a pointer to the new object. 0123 */ 0124 virtual IBPtr fullclone() const; 0125 //@} 0126 0127 0128 // If needed, insert declarations of virtual function defined in the 0129 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). 0130 0131 0132 private: 0133 0134 /** 0135 * The assignment operator is private and must never be called. 0136 * In fact, it should not even be implemented. 0137 */ 0138 FlatInvertibleLabframePhasespace & operator=(const FlatInvertibleLabframePhasespace &) = delete; 0139 0140 }; 0141 0142 } 0143 0144 #endif /* Herwig_FlatInvertiblePhasespace_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|