Back to home page

EIC code displayed by LXR

 
 

    


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 */