|
|
|||
File indexing completed on 2026-08-06 09:24:25
0001 // -*- C++ -*- 0002 // 0003 // DipoleShowerVertex.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 2 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef HERWIG_DipoleShowerVertex_H 0010 #define HERWIG_DipoleShowerVertex_H 0011 // 0012 // This is the declaration of the DipoleShowerVertex class. 0013 // 0014 0015 0016 #include "ThePEG/EventRecord/HelicityVertex.h" 0017 #include "Herwig/Decay/DecayMatrixElement.h" 0018 0019 #include "DipoleShowerVertex.fh" 0020 0021 namespace Herwig { 0022 0023 using namespace ThePEG; 0024 0025 /** \ingroup DipoleShower 0026 * 0027 * This class represents the vertex for a given splitting 0028 * in the dipole shower. 0029 * 0030 * \author Stephen Webster 0031 * 0032 */ 0033 class DipoleShowerVertex: public HelicityVertex { 0034 0035 public: 0036 0037 /** 0038 * Default constructor 0039 */ 0040 DipoleShowerVertex(); 0041 0042 /** 0043 * Default destructor 0044 **/ 0045 ~DipoleShowerVertex() {} 0046 0047 public: 0048 0049 /** 0050 * Return the matrix element for this vertex. 0051 */ 0052 inline const DecayMEPtr ME() const { 0053 return theMatrixElement; 0054 } 0055 0056 /** 0057 * Set the matrix element 0058 */ 0059 inline void ME(DecayMEPtr in) { 0060 theMatrixElement = in; 0061 } 0062 0063 0064 public: 0065 0066 /** 0067 * Method to calculate the \f$\rho\f$ matrix for one of the decay products 0068 * in the frame of this splitting vertex. 0069 * 0070 * @param iprod The splitting product to compute the \f$\rho\f$ matrix for. 0071 */ 0072 RhoDMatrix getRhoMatrix(int iprod, bool ) const; 0073 0074 /** 0075 * Method to calculate the \f$D\f$ matrix for the decaying 0076 * particle / the incoming to the vertex, in the frame of 0077 * the vertex. The argument is a dummy argument. 0078 */ 0079 RhoDMatrix getDMatrix(int) const; 0080 0081 /** 0082 * Get the lorentz rotation from the working frame 0083 * to the frame of the splitting. 0084 */ 0085 LorentzRotation boostToSplitting(); 0086 0087 /** 0088 * Set the p vector for this splitting 0089 */ 0090 void pVector( const Lorentz5Momentum& emitterMom ) { thePVector = emitterMom; } 0091 0092 /** 0093 * Set the n vector for this splitting 0094 */ 0095 void nVector( const Lorentz5Momentum& nMom ) { theNVector = nMom; } 0096 0097 /** 0098 * Set the emitter,Spectator Config (II,IF,FF,FI - F=true, I=false) 0099 */ 0100 void dipoleConfig(const pair<bool,bool>& newConfig) { theDipoleConfig = newConfig; } 0101 0102 /** 0103 * Return the p vector for this splitting 0104 */ 0105 Lorentz5Momentum pVector() const { return thePVector; } 0106 0107 /** 0108 * Return the n/spectator vector for this splitting 0109 */ 0110 Lorentz5Momentum nVector() const { return theNVector; } 0111 0112 /** 0113 * Return the emitter,Spectator Config (II,IF,FF,FI - F=true, I=false) 0114 */ 0115 const pair<bool,bool>& dipoleConfig() const { return theDipoleConfig; } 0116 0117 0118 /** 0119 * Set the decay state to production state 0120 * mapping for this vertex. 0121 */ 0122 void mappingD2P( RhoDMatrix& mapping ) { theMappingDecay2Prod = mapping; } 0123 0124 /** 0125 * Return the mapping from the decay 0126 * states to the production states. 0127 */ 0128 RhoDMatrix mappingD2P() { return theMappingDecay2Prod; } 0129 0130 /** 0131 * Set the production state to decay state 0132 * mapping for this vertex. 0133 */ 0134 void mappingP2D( RhoDMatrix& mapping ) { theMappingProd2Decay = mapping; } 0135 0136 /** 0137 * Return the mapping from the production 0138 * states to the decay states. 0139 */ 0140 RhoDMatrix mappingP2D() { return theMappingProd2Decay; } 0141 0142 0143 /** 0144 * Set the new to old spectator mapping 0145 * for this vertex. 0146 */ 0147 void mappingSpecNewToOld( RhoDMatrix& mapping ) { theMappingSpectatorNewToOld = mapping; } 0148 0149 /** 0150 * Return the new to old spectator mapping 0151 * for this vertex. 0152 */ 0153 RhoDMatrix mappingSpecNewToOld() { return theMappingSpectatorNewToOld; } 0154 0155 /** 0156 * Set the new to old spectator mapping 0157 * for this vertex. 0158 */ 0159 void mappingSpecOldToNew( RhoDMatrix& mapping ) { theMappingSpectatorOldToNew = mapping; } 0160 0161 /** 0162 * Return the new to old spectator mapping 0163 * for this vertex. 0164 */ 0165 RhoDMatrix mappingSpecOldToNew() { return theMappingSpectatorOldToNew; } 0166 0167 0168 0169 public: 0170 0171 /** 0172 * The standard Init function used to initialize the interfaces. 0173 * Called exactly once for each class by the class description system 0174 * before the main function starts or 0175 * when this class is dynamically loaded. 0176 */ 0177 static void Init(); 0178 0179 private: 0180 0181 /** 0182 * Storage of the decay matrix element. 0183 */ 0184 DecayMEPtr theMatrixElement; 0185 0186 /** 0187 * The p vector of the 'splitting basis' 0188 * associated with this vertex. 0189 **/ 0190 Lorentz5Momentum thePVector; 0191 0192 /** 0193 * The n vector of the 'splitting basis' 0194 * associated with this vertex. 0195 **/ 0196 Lorentz5Momentum theNVector; 0197 0198 /** 0199 * Initial/final config {emitter, spectator} 0200 */ 0201 pair<bool,bool> theDipoleConfig; 0202 0203 /** 0204 * An indicator flag to record if the 0205 * boost to shower for this vertex has been done 0206 */ 0207 bool theBoostCalculated; 0208 0209 /** 0210 * The lorentz transformation from the 0211 * working frame to this splitting. 0212 */ 0213 LorentzRotation theBoostToSplitting; 0214 0215 /** 0216 * The mapping from the decay basis states 0217 * to the production basis states. 0218 */ 0219 RhoDMatrix theMappingDecay2Prod; 0220 0221 /** 0222 * The mapping from the production basis states 0223 * to the decay basis states. 0224 */ 0225 RhoDMatrix theMappingProd2Decay; 0226 0227 0228 /** 0229 * The mapping from the new spectator basis 0230 * states to the old spectator basis states. 0231 */ 0232 RhoDMatrix theMappingSpectatorNewToOld; 0233 0234 /** 0235 * The mapping from the old spectator basis 0236 * states to the new spectator basis states. 0237 */ 0238 RhoDMatrix theMappingSpectatorOldToNew; 0239 0240 private: 0241 0242 /** 0243 * The assignment operator is private and must never be called. 0244 * In fact, it should not even be implemented. 0245 */ 0246 DipoleShowerVertex & operator=(const DipoleShowerVertex &) = delete; 0247 0248 }; 0249 } 0250 0251 #include "ThePEG/Utilities/ClassTraits.h" 0252 0253 namespace ThePEG { 0254 0255 /** @cond TRAITSPECIALIZATIONS */ 0256 0257 /** This template specialization informs ThePEG about the 0258 * base classes of DipoleShowerVertex. */ 0259 template <> 0260 struct BaseClassTrait<Herwig::DipoleShowerVertex,1> { 0261 /** Typedef of the first base class of DipoleShowerVertex. */ 0262 typedef HelicityVertex NthBase; 0263 }; 0264 0265 /** This template specialization informs ThePEG about the name of 0266 * the DipoleShowerVertex class and the shared object where it is defined. */ 0267 template <> 0268 struct ClassTraits<Herwig::DipoleShowerVertex> 0269 : public ClassTraitsBase<Herwig::DipoleShowerVertex> { 0270 /** Return a platform-independent class name */ 0271 static string className() { return "Herwig::DipoleShowerVertex"; } 0272 /** 0273 * The name of a file containing the dynamic library where the class 0274 * DipoleShowerVertex is implemented. It may also include several, space-separated, 0275 * libraries if the class DipoleShowerVertex depends on other classes (base classes 0276 * excepted). In this case the listed libraries will be dynamically 0277 * linked in the order they are specified. 0278 */ 0279 static string library() { return "HwDipoleShower.so"; } 0280 }; 0281 0282 /** @endcond */ 0283 0284 } 0285 #endif /* HERWIG_DipoleShowerVertex_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|