Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:28

0001 // -*- C++ -*-
0002 //
0003 // PolarizedBeamParticleData.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_PolarizedPolarizedBeamParticleData_H
0010 #define ThePEG_PolarizedPolarizedBeamParticleData_H
0011 // This is the declaration of the PolarizedBeamParticleData class.
0012 
0013 #include "BeamParticleData.h"
0014 #include "ThePEG/EventRecord/RhoDMatrix.h"
0015 #include "PolarizedBeamParticleData.fh"
0016 
0017 namespace ThePEG {
0018 
0019 /**
0020  * PolarizedBeamParticleData inherits from the BeamParticleData class and is used
0021  * for polarized beam particles 
0022  *
0023  * @see \ref PolarizedBeamParticleDataInterfaces "The interfaces"
0024  * defined for PolarizedBeamParticleData.
0025  * @see BeamParticleData
0026  * @see PDFBase
0027  */
0028 class PolarizedBeamParticleData: public virtual BeamParticleData {
0029 
0030 public:
0031 
0032   /** @name Standard constructors and destructors. */
0033   //@{
0034   /**
0035    * Default constructor.
0036    */
0037   PolarizedBeamParticleData() : theLongPolarization(0.0) {}
0038   //@}
0039 
0040   /** @name The Create methods are special interfaces for ParticleData
0041       classes. */
0042   //@{
0043   /**
0044    * Create a Particle which is its own anti-particle.
0045    */
0046   static PDPtr Create(long newId, string newPDGName);
0047 
0048   /**
0049    * Create a particle - anti particle pair. Note that setting the
0050    * parton density object on this particle does not change the parton
0051    * density of the anti particle iven if synchronized() is true.
0052    */
0053   static PDPair Create(long newId, string newPDGName, string newAntiPDGName);
0054   //@}
0055 
0056   /**
0057    *  Set-up the spin density matrix
0058    */
0059   RhoDMatrix rhoMatrix() const;
0060 
0061   /**
0062    *  The longitudinal polarization
0063    */
0064   double longitudinalPolarization() const {return theLongPolarization;}
0065 
0066 public:
0067 
0068   /** @name Functions used by the persistent I/O system. */
0069   //@{
0070   /**
0071    * Function used to write out object persistently.
0072    * @param os the persistent output stream written to.
0073    */
0074   void persistentOutput(PersistentOStream & os) const;
0075 
0076   /**
0077    * Function used to read in object persistently.
0078    * @param is the persistent input stream read from.
0079    * @param version the version number of the object when written.
0080    */
0081   void persistentInput(PersistentIStream & is, int version);
0082   //@}
0083 
0084   /**
0085    * Standard Init function used to initialize the interface.
0086    */
0087   static void Init();
0088 
0089 protected:
0090 
0091   /**
0092    * Protected constructor only to be used by subclasses or by the
0093    * Create method.
0094    */
0095   PolarizedBeamParticleData(long newId, string newPDGName);
0096 
0097   /**
0098    * ParticleData clone method
0099    */
0100   virtual PDPtr pdclone() const;
0101 
0102 private:
0103 
0104   /**
0105    *  The longitudinal polarization
0106    */
0107   double theLongPolarization;
0108 
0109 private:
0110 
0111   /**
0112    * Describe a concrete class with persistent data.
0113    */
0114   static ClassDescription<PolarizedBeamParticleData> initPolarizedBeamParticleData;
0115 
0116   /**
0117    *  Private and non-existent assignment operator.
0118    */
0119   PolarizedBeamParticleData & operator=(const PolarizedBeamParticleData &) = delete;
0120 
0121 };
0122 
0123 /** @cond TRAITSPECIALIZATIONS */
0124 
0125 /** This template specialization informs ThePEG about the
0126  *  base classes of PolarizedBeamParticleData. */
0127 template <>
0128 struct BaseClassTrait<PolarizedBeamParticleData,1>: public ClassTraitsType {
0129   /** Typedef of the first base class of PolarizedBeamParticleData. */
0130   typedef BeamParticleData NthBase;
0131 };
0132 
0133 /** This template specialization informs ThePEG about the name of the
0134  *  PolarizedBeamParticleData class. */
0135 template <>
0136 struct ClassTraits<PolarizedBeamParticleData>:
0137     public ClassTraitsBase<PolarizedBeamParticleData> {
0138   /** Return a platform-independent class name */
0139   static string className() { return "ThePEG::PolarizedBeamParticleData"; }
0140 };
0141 
0142 /** @endcond */
0143 
0144 }
0145 
0146 #endif /* ThePEG_PolarizedBeamParticleData_H */