Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef THEPEG_MixedParticleData_H
0003 #define THEPEG_MixedParticleData_H
0004 //
0005 // This is the declaration of the MixedParticleData class.
0006 //
0007 
0008 #include "ParticleData.h"
0009 #include "MixedParticleData.fh"
0010 
0011 namespace ThePEG {
0012 
0013 /**
0014  * The MixedParticleData class is designed to store the 
0015  * particle data for particles which undergo mixing with their
0016  * anti-particle, e.g. \f$B^0-\bar{B}^0\f$, \f$B_s^0-\bar{B}_s^0\f$, 
0017  * \f$D^0-\bar{D}^0\f$.
0018  *
0019  *  The key parameters are the mass difference between the heavier 
0020  *  and lighter states, \f$\Delta m = m_H-m_L\f$, the width difference
0021  *  \f$\Delta\Gamma = \Gamma_H-\Gamma_L\f$. While the mass difference
0022  *  is positive by definition the sign of the width difference must be
0023  *  determined experimentally. It should be noted that because the width
0024  *  difference is expected to be negative in the Standard Model many
0025  *  experiment results use the convention 
0026  *  \f$\Delta\Gamma = \Gamma_L - \Gamma_H\f$ so care should be taken.
0027  *
0028  *  In order to be as general as possible we have included the option
0029  *  of CPT violation, in addition to the violation of CP, in the mixing
0030  *  in this case the light and heavy eigenstates are given by
0031  * \f[|M_L\rangle \propto p \sqrt{1-z}|     M^0 \rangle 
0032  *                    + q \sqrt{1+z}|\bar{M}^0\rangle,\f]
0033  * \f[|M_H\rangle \propto p \sqrt{1+z}|     M^0 \rangle 
0034  *                    - q \sqrt{1-z}|\bar{M}^0\rangle,\f]
0035  *  where \f$p\f$, \f$q\f$ and \f$z\f$ are complex parameters with \f$z=0\f$ if CPT
0036  *  is conserved.
0037  *
0038  *  This gives the time evolution of the states
0039  * \f[|M^0_{\rm phys}(t)\rangle = (g_+(t)+zg_-(t))|M^0\rangle
0040  *                                -sqrt{1-z^2}\frac{q}{p}g_-(t)|\bar{M}^0\rangle,\f]
0041  * \f[\bar{M}^-_{\rm phys}\rangle = (g_+(t)+zg_-(t))|\bar{M}^0\rangle
0042  *                                -sqrt{1-z^2}\frac{p}{q}g_-(t)|M^0\rangle,\f]
0043  * for particles initially in a pure particle or antiparticle state
0044  * where
0045  * \f[g_\pm(t)=\frac12\left(e^{-im_Ht-\frac12\Gamma_Ht} \pm
0046  *                       e^{-im_Lt-\frac12\Gamma_Lt}\right).\f]
0047  * @see \ref MixedParticleDataInterfaces "The interfaces"
0048  * defined for MixedParticleData.
0049  */
0050 class MixedParticleData: public ParticleData {
0051 
0052 public:
0053 
0054   /**
0055    * The default constructor.
0056    */
0057   MixedParticleData() : ParticleData(), _deltam(0.*GeV), 
0058             _deltagamma(0.*GeV), _pqmag(1.), _pqphase(0.),
0059             _pq(1.,0.), _zmag(0.), _zphase(0.), _z(0.), _x(0.), _y(0.),
0060             _prob(make_pair(1.,0.))
0061   {}
0062 
0063   /** @name The Create methods are special interfaces for ParticleData
0064       classes. */
0065   //@{
0066   /**
0067    * Create a Particle which is its own anti-particle.
0068    */
0069   static PDPtr Create(long newId, string newPDGName);
0070 
0071   /**
0072    * Create a particle - anti particle pair.
0073    */
0074   static PDPair Create(long newId, string newPDGName, string newAntiPDGName);
0075   //@}
0076 
0077 public:
0078 
0079   /**
0080    *  Mixing parameters
0081    */
0082   //@{
0083   /**
0084    *  The mass difference
0085    */
0086   Energy deltaM() const {return _deltam;}
0087 
0088   /**
0089    *  The width difference
0090    */
0091   Energy deltaGamma() const {return _deltagamma;}
0092 
0093   /**
0094    *  \f$p/q\f$
0095    */
0096   Complex pq() const {return _pq;}
0097 
0098   /**
0099    *  \f$z\f$
0100    */
0101   Complex z() const {return _z;}
0102 
0103   /**
0104    *  The \f$x\f$ mixing variable
0105    */
0106   double x() const {return _x;}
0107 
0108   /**
0109    *  the \f$y\f$ mixing variable
0110    */
0111   double y() const {return _y;}
0112 
0113   /**
0114    *  The time-integrated mixing probabilities
0115    */
0116   pair<double,double> prob() const {return _prob;}
0117 
0118   /**
0119    *  For a given paricle decide is it undergoes mixing
0120    *  and generate the lifetime
0121    */
0122   pair<bool,Length> generateLifeTime() const;
0123 
0124   /**
0125    *  The amplitudes for the different states
0126    */
0127   pair<Complex,Complex> mixingAmplitudes(Length,bool) const;
0128 
0129 public:
0130 
0131   /** @name Functions used by the persistent I/O system. */
0132   //@{
0133   /**
0134    * Function used to write out object persistently.
0135    * @param os the persistent output stream written to.
0136    */
0137   void persistentOutput(PersistentOStream & os) const;
0138 
0139   /**
0140    * Function used to read in object persistently.
0141    * @param is the persistent input stream read from.
0142    * @param version the version number of the object when written.
0143    */
0144   void persistentInput(PersistentIStream & is, int version);
0145   //@}
0146 
0147   /**
0148    * The standard Init function used to initialize the interfaces.
0149    * Called exactly once for each class by the class description system
0150    * before the main function starts or
0151    * when this class is dynamically loaded.
0152    */
0153   static void Init();
0154 
0155 protected:
0156 
0157   /**
0158    * Protected constructor only to be used by subclasses or by the
0159    * Create method.
0160    */
0161   MixedParticleData(long newId, string newPDGName);
0162 
0163   /**
0164    * ParticleData clone method
0165    */
0166   virtual PDPtr pdclone() const;
0167 
0168 protected:
0169 
0170   /** @name Standard Interfaced functions. */
0171   //@{
0172   /**
0173    * Initialize this object after the setup phase before saving an
0174    * EventGenerator to disk.
0175    * @throws InitException if object could not be initialized properly.
0176    */
0177   virtual void doinit();
0178   //@}
0179 
0180 private:
0181 
0182   /**
0183    *  Function for the interface to set the mass difference
0184    */
0185   void setDeltaM(Energy);
0186 
0187   /**
0188    *  Function for the interface to set the width difference
0189    */
0190   void setDeltaGamma(Energy);
0191 
0192   /**
0193    *  Function for the interface to set the magnitude of p/q
0194    */
0195   void setPQMagnitude(double);
0196 
0197   /**
0198    *  Function for the interface to set the phase of p/q
0199    */
0200   void setPQPhase(double);
0201 
0202   /**
0203    *  Function for the interface to set the magnitude of z
0204    */
0205   void setZMagnitude(double);
0206 
0207   /**
0208    *  Function for the interface to set the phase of z
0209    */
0210   void setZPhase(double);
0211 
0212 private:
0213 
0214   /**
0215    * The static object used to initialize the description of this class.
0216    * Indicates that this is a concrete class with persistent data.
0217    */
0218   static ClassDescription<MixedParticleData> initMixedParticleData;
0219 
0220   /**
0221    * The assignment operator is private and must never be called.
0222    * In fact, it should not even be implemented.
0223    */
0224   MixedParticleData & operator=(const MixedParticleData &) = delete;
0225 
0226 private:
0227 
0228   /**
0229    *  Mixing parameters
0230    */
0231   //@{
0232   /**
0233    *  The mass difference
0234    */
0235   Energy _deltam;
0236 
0237   /**
0238    *  The width difference
0239    */
0240   Energy _deltagamma;
0241 
0242   /**
0243    *  The magnitude of \f$p/q\f$
0244    */
0245   double _pqmag;
0246 
0247   /**
0248    *  The phase of \f$p/q\f$
0249    */
0250   double _pqphase;
0251 
0252   /**
0253    *  \f$p/q\f$
0254    */
0255   Complex _pq;
0256 
0257   /**
0258    *  The magnitude of \f$z\f$
0259    */
0260   double _zmag;
0261 
0262   /**
0263    *  The phase of \f$z\f$
0264    */
0265   double _zphase;
0266 
0267   /**
0268    * The \f$z\f$ parameter
0269    */
0270   Complex _z;
0271 
0272   /**
0273    *  The \f$x\f$ mixing variable
0274    */
0275   double _x;
0276 
0277   /**
0278    *  the \f$y\f$ mixing variable
0279    */
0280   double _y;
0281 
0282   /**
0283    *  The time-integrated mixing probabilities
0284    */
0285   pair<double,double> _prob;
0286   //@}
0287 
0288 };
0289 
0290 }
0291 
0292 #include "ThePEG/Utilities/ClassTraits.h"
0293 
0294 namespace ThePEG {
0295 
0296 /** @cond TRAITSPECIALIZATIONS */
0297 
0298 /** This template specialization informs ThePEG about the
0299  *  base classes of MixedParticleData. */
0300 template <>
0301 struct BaseClassTrait<MixedParticleData,1> {
0302   /** Typedef of the first base class of MixedParticleData. */
0303   typedef ParticleData NthBase;
0304 };
0305 
0306 /** This template specialization informs ThePEG about the name of
0307  *  the MixedParticleData class and the shared object where it is defined. */
0308 template <>
0309 struct ClassTraits<MixedParticleData>
0310   : public ClassTraitsBase<MixedParticleData> {
0311   /** Return a platform-independent class name */
0312   static string className() { return "ThePEG::MixedParticleData"; }
0313 };
0314 
0315 /** @endcond */
0316 
0317 }
0318 
0319 #endif /* THEPEG_MixedParticleData_H */