Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:23:58

0001 // -*- C++ -*-
0002 #ifndef HERWIG_RadiativeDoublyHeavyBaryonDecayer_H
0003 #define HERWIG_RadiativeDoublyHeavyBaryonDecayer_H
0004 //
0005 // This is the declaration of the RadiativeDoublyHeavyBaryonDecayer class.
0006 //
0007 
0008 #include "Baryon1MesonDecayerBase.h"
0009 
0010 namespace Herwig {
0011 using namespace Herwig;
0012 
0013 /** \ingroup Decay
0014  *
0015  * The RadiativeDoublyHeavyBaryonDecayer class is designed for the radiative decay
0016  * of a baryon containing a heavy quark to another baryon containing a heavy quark.
0017  * There are four types of transition supported
0018  *
0019  * - \f$\frac12^+\to\frac12^+\f$ \f$M1\f$ transition
0020  * \f[\mathcal{M} = i f \epsilon^{\epsilon^*_2\delta p_0p_1} \bar{B} \gamma_5.B^*_\delta\bar{\gamma }^{\delta}\f]
0021  *
0022  * - \f$\frac32^+\to\frac12^+\f$ \f$M1\f$ transition
0023  * \f[\mathcal{M} = i f \epsilon^{\epsilon^*_2\delta p_0p_1} \bar{B} \gamma_5 \gamma_^\delta B^*\f]
0024  *
0025  * where \f$p_0\f$ is the momentum of the decaying baryon \f$B^*\f$ is the field for
0026  * the decaying baryon, \f$B\f$ is the field for the baryon produced in the decay and $\epsilon_2$ is the polarization vector
0027  * for the outgoing photon.
0028  *
0029  */
0030 class RadiativeDoublyHeavyBaryonDecayer: public Baryon1MesonDecayerBase {
0031 
0032 public:
0033 
0034   /**
0035    * Which of the possible decays is required
0036    * @param cc Is this mode the charge conjugate
0037    * @param parent The decaying particle
0038    * @param children The decay products
0039    */
0040   virtual int modeNumber(bool & cc, tcPDPtr parent, 
0041              const tPDVector & children) const;
0042 
0043   /**
0044    * Output the setup information for the particle database
0045    * @param os The stream to output the information to
0046    * @param header Whether or not to output the information for MySQL
0047    */
0048   virtual void dataBaseOutput(ofstream & os,bool header) const;
0049 
0050 public:
0051 
0052   /** @name Functions used by the persistent I/O system. */
0053   //@{
0054   /**
0055    * Function used to write out object persistently.
0056    * @param os the persistent output stream written to.
0057    */
0058   void persistentOutput(PersistentOStream & os) const;
0059 
0060   /**
0061    * Function used to read in object persistently.
0062    * @param is the persistent input stream read from.
0063    * @param version the version number of the object when written.
0064    */
0065   void persistentInput(PersistentIStream & is, int version);
0066   //@}
0067 
0068   /**
0069    * The standard Init function used to initialize the interfaces.
0070    * Called exactly once for each class by the class description system
0071    * before the main function starts or
0072    * when this class is dynamically loaded.
0073    */
0074   static void Init();
0075 
0076 protected:
0077 
0078   /**
0079    *  Coupling Members.
0080    */
0081   //@{
0082   /**
0083    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac12\f$ and a vector.
0084    * @param imode The mode
0085    * @param m0 The mass of the decaying particle.
0086    * @param m1 The mass of the outgoing baryon.
0087    * @param m2 The mass of the outgoing meson.
0088    * @param A1 The coupling \f$A_1\f$ described above.
0089    * @param A2 The coupling \f$A_2\f$ described above.
0090    * @param B1 The coupling \f$B_1\f$ described above.
0091    * @param B2 The coupling \f$B_2\f$ described above.
0092    */
0093   virtual void halfHalfVectorCoupling(int imode,Energy m0,Energy m1,Energy m2,
0094                       Complex& A1,Complex& A2,
0095                       Complex& B1,Complex& B2) const;
0096 
0097   /**
0098    * Couplings for spin-\f$\frac12\f$ to spin-\f$\frac32\f$ and a vector.
0099    * @param imode The mode
0100    * @param m0 The mass of the decaying particle.
0101    * @param m1 The mass of the outgoing baryon.
0102    * @param m2 The mass of the outgoing meson.
0103    * @param A1 The coupling \f$A_1\f$ described above.
0104    * @param A2 The coupling \f$A_2\f$ described above.
0105    * @param A3 The coupling \f$A_3\f$ described above.
0106    * @param B1 The coupling \f$B_1\f$ described above.
0107    * @param B2 The coupling \f$B_2\f$ described above.
0108    * @param B3 The coupling \f$B_3\f$ described above.
0109    */
0110   virtual void threeHalfHalfVectorCoupling(int imode,Energy m0,Energy m1,Energy m2,
0111                        Complex& A1,Complex& A2,Complex& A3,
0112                        Complex& B1,Complex& B2,Complex& B3) const;
0113   //@}
0114 
0115 protected:
0116 
0117   /** @name Clone Methods. */
0118   //@{
0119   /**
0120    * Make a simple clone of this object.
0121    * @return a pointer to the new object.
0122    */
0123   virtual IBPtr clone() const {return new_ptr(*this);}
0124 
0125   /** Make a clone of this object, possibly modifying the cloned object
0126    * to make it sane.
0127    * @return a pointer to the new object.
0128    */
0129   virtual IBPtr fullclone() const {return new_ptr(*this);}
0130   //@}
0131 
0132 protected:
0133 
0134   /** @name Standard Interfaced functions. */
0135   //@{
0136   /**
0137    * Initialize this object after the setup phase before saving and
0138    * EventGenerator to disk.
0139    * @throws InitException if object could not be initialized properly.
0140    */
0141   virtual void doinit();
0142 
0143   /**
0144    * Initialize this object. Called in the run phase just before
0145    * a run begins.
0146    */
0147   virtual void doinitrun();
0148   //@}
0149 
0150 private:
0151 
0152   /**
0153    * The assignment operator is private and must never be called.
0154    * In fact, it should not even be implemented.
0155    */
0156   RadiativeDoublyHeavyBaryonDecayer & operator=(const RadiativeDoublyHeavyBaryonDecayer &) = delete;
0157 
0158 public:
0159 
0160   /**
0161    *   Set the parameters for a decay mode
0162    */
0163   string setUpDecayMode(string arg);
0164 
0165 private:
0166 
0167   /**
0168    *  The coupling
0169    */
0170   vector<InvEnergy2> coupling_;
0171 
0172   /**
0173    * PDG code for the incoming baryons
0174    */
0175   vector<int> incoming_;
0176 
0177   /**
0178    * PDG code for the outgoing baryons
0179    */
0180   vector<int> outgoing_;
0181 
0182   /**
0183    * max weight
0184    */
0185   vector<double> maxWeight_;
0186 };
0187 
0188 }
0189 
0190 #endif /* HERWIG_RadiativeDoublyHeavyBaryonDecayer_H */