|
|
|||
File indexing completed on 2026-08-06 09:24:07
0001 // -*- C++ -*- 0002 #ifndef HERWIG_MENeutralCurrentDIS_H 0003 #define HERWIG_MENeutralCurrentDIS_H 0004 // 0005 // This is the declaration of the MENeutralCurrentDIS class. 0006 // 0007 0008 #include "DISBase.h" 0009 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" 0010 #include "Herwig/MatrixElement/ProductionMatrixElement.h" 0011 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" 0012 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" 0013 0014 namespace Herwig { 0015 0016 using namespace ThePEG; 0017 0018 /** 0019 * The MENeutralCurrentDIS class provides the matrix elements for 0020 * neutral current DIS. 0021 * 0022 * For consistency both the incoming and outgoing quarks are assumed to be massless. 0023 * 0024 * @see \ref MENeutralCurrentDISInterfaces "The interfaces" 0025 * defined for MENeutralCurrentDIS. 0026 */ 0027 class MENeutralCurrentDIS: public DISBase { 0028 0029 public: 0030 0031 /** 0032 * The default constructor. 0033 */ 0034 MENeutralCurrentDIS(); 0035 0036 /** @name Virtual functions required by the MEBase class. */ 0037 //@{ 0038 /** 0039 * Return the order in \f$\alpha_S\f$ in which this matrix 0040 * element is given. 0041 */ 0042 virtual unsigned int orderInAlphaS() const; 0043 0044 /** 0045 * Return the order in \f$\alpha_{EW}\f$ in which this matrix 0046 * element is given. 0047 */ 0048 virtual unsigned int orderInAlphaEW() const; 0049 0050 /** 0051 * The matrix element for the kinematical configuration 0052 * previously provided by the last call to setKinematics(), suitably 0053 * scaled by sHat() to give a dimension-less number. 0054 * @return the matrix element scaled with sHat() to give a 0055 * dimensionless number. 0056 */ 0057 virtual double me2() const; 0058 0059 /** 0060 * Add all possible diagrams with the add() function. 0061 */ 0062 virtual void getDiagrams() const; 0063 0064 /** 0065 * Get diagram selector. With the information previously supplied with the 0066 * setKinematics method, a derived class may optionally 0067 * override this method to weight the given diagrams with their 0068 * (although certainly not physical) relative probabilities. 0069 * @param dv the diagrams to be weighted. 0070 * @return a Selector relating the given diagrams to their weights. 0071 */ 0072 virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const; 0073 0074 /** 0075 * Return a Selector with possible colour geometries for the selected 0076 * diagram weighted by their relative probabilities. 0077 * @param diag the diagram chosen. 0078 * @return the possible colour geometries weighted by their 0079 * relative probabilities. 0080 */ 0081 virtual Selector<const ColourLines *> 0082 colourGeometries(tcDiagPtr diag) const; 0083 0084 /** 0085 * Construct the vertex of spin correlations. 0086 */ 0087 virtual void constructVertex(tSubProPtr); 0088 //@} 0089 0090 public: 0091 0092 /** @name Functions used by the persistent I/O system. */ 0093 //@{ 0094 /** 0095 * Function used to write out object persistently. 0096 * @param os the persistent output stream written to. 0097 */ 0098 void persistentOutput(PersistentOStream & os) const; 0099 0100 /** 0101 * Function used to read in object persistently. 0102 * @param is the persistent input stream read from. 0103 * @param version the version number of the object when written. 0104 */ 0105 void persistentInput(PersistentIStream & is, int version); 0106 //@} 0107 0108 /** 0109 * The standard Init function used to initialize the interfaces. 0110 * Called exactly once for each class by the class description system 0111 * before the main function starts or 0112 * when this class is dynamically loaded. 0113 */ 0114 static void Init(); 0115 0116 protected: 0117 0118 /** 0119 * Matrix element for \f$\ell q\to \gamma/Z \to \ell q\f$. 0120 * @param f1 Fermion on lepton line 0121 * @param a1 Anti-fermion on lepton line 0122 * @param f2 Fermion on quark line 0123 * @param a2 Anti-fermion on quark line 0124 * @param lorder The order of particles on the lepton line 0125 * @param qorder The order of particles on the quark line 0126 * @param me Whether or not to calculate the matrix element for spin correlations 0127 */ 0128 double helicityME(vector<SpinorWaveFunction> & f1 , 0129 vector<SpinorWaveFunction> & f2, 0130 vector<SpinorBarWaveFunction> & a1 , 0131 vector<SpinorBarWaveFunction> & a2, 0132 bool lorder, bool qorder, 0133 bool me) const; 0134 0135 0136 /** 0137 * Option for treatment of \f$\gamma/Z\f$ terms 0138 */ 0139 inline unsigned int gammaZOption() const {return _gammaZ;} 0140 0141 /** 0142 * Calculate the coefficient A for the correlations in the hard 0143 * radiation 0144 */ 0145 virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout, 0146 Energy2 scale) const; 0147 0148 protected: 0149 0150 /** @name Standard Interfaced functions. */ 0151 //@{ 0152 /** 0153 * Initialize this object after the setup phase before saving an 0154 * EventGenerator to disk. 0155 * @throws InitException if object could not be initialized properly. 0156 */ 0157 virtual void doinit(); 0158 //@} 0159 0160 protected: 0161 0162 /** @name Clone Methods. */ 0163 //@{ 0164 /** 0165 * Make a simple clone of this object. 0166 * @return a pointer to the new object. 0167 */ 0168 virtual IBPtr clone() const {return new_ptr(*this);} 0169 0170 /** Make a clone of this object, possibly modifying the cloned object 0171 * to make it sane. 0172 * @return a pointer to the new object. 0173 */ 0174 virtual IBPtr fullclone() const {return new_ptr(*this);} 0175 //@} 0176 0177 private: 0178 0179 /** 0180 * The assignment operator is private and must never be called. 0181 * In fact, it should not even be implemented. 0182 */ 0183 MENeutralCurrentDIS & operator=(const MENeutralCurrentDIS &) = delete; 0184 0185 private: 0186 0187 /** 0188 * Pointer to the vertices for the helicity calculations 0189 */ 0190 //@{ 0191 /** 0192 * Pointer to the Z vertex 0193 */ 0194 AbstractFFVVertexPtr _theFFZVertex; 0195 0196 /** 0197 * Pointer to the photon vertex 0198 */ 0199 AbstractFFVVertexPtr _theFFPVertex; 0200 //@} 0201 0202 /** 0203 * Pointers to the intermediate resonances 0204 */ 0205 //@{ 0206 /** 0207 * Pointer to the Z ParticleData object 0208 */ 0209 tcPDPtr _z0; 0210 0211 /** 0212 * Pointer to the photon ParticleData object 0213 */ 0214 tcPDPtr _gamma; 0215 //@} 0216 0217 /** 0218 * Switches to control the particles in the hard process 0219 */ 0220 //@{ 0221 /** 0222 * Minimumflavour of the incoming quarks 0223 */ 0224 int _minflavour; 0225 0226 /** 0227 * Maximum flavour of the incoming quarks 0228 */ 0229 int _maxflavour; 0230 0231 /** 0232 * Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one 0233 */ 0234 unsigned int _gammaZ; 0235 //@} 0236 0237 /** 0238 * Matrix element for spin correlations 0239 */ 0240 ProductionMatrixElement _me; 0241 0242 /** 0243 * Electroweak parameters 0244 */ 0245 //@{ 0246 /** 0247 * \f$\sin\theta_W\f$ 0248 */ 0249 double _sinW; 0250 0251 /** 0252 * \f$\cos\theta_W\f$ 0253 */ 0254 double _cosW; 0255 0256 /** 0257 * The square of the Z mass 0258 */ 0259 Energy2 _mz2; 0260 //@} 0261 0262 }; 0263 0264 } 0265 0266 #endif /* HERWIG_MENeutralCurrentDIS_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|