Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:16

0001 // -*- C++ -*-
0002 #ifndef THEPEG_FourBodyDecayConstructor_H
0003 #define THEPEG_FourBodyDecayConstructor_H
0004 //
0005 // This is the declaration of the FourBodyDecayConstructor class.
0006 //
0007 
0008 #include "NBodyDecayConstructorBase.h"
0009 #include "ThePEG/Helicity/Vertex/VertexBase.h"
0010 #include "Herwig/Decay/General/GeneralFourBodyDecayer.fh"
0011 #include "PrototypeVertex.h"
0012 
0013 namespace Herwig {
0014 
0015 using namespace ThePEG;
0016 using Helicity::VertexBasePtr;
0017 
0018 /**
0019  * Here is the documentation of the FourBodyDecayConstructor class.
0020  *
0021  * @see \ref FourBodyDecayConstructorInterfaces "The interfaces"
0022  * defined for FourBodyDecayConstructor.
0023  */
0024 class FourBodyDecayConstructor: public NBodyDecayConstructorBase {
0025 
0026 public:
0027 
0028   /**
0029    * The default constructor.
0030    */
0031   FourBodyDecayConstructor() :
0032     interOpt_(0), widthOpt_(1), particleType_(false) {}
0033 
0034   /**
0035    * Function used to determine allowed decaymodes, to be implemented
0036    * in derived class.
0037    * @param particles vector of ParticleData pointers containing 
0038    * particles in model
0039    */
0040   virtual void DecayList(const set<PDPtr,MassOrdering> & particles);
0041 
0042   /**
0043    * Number of outgoing lines. Required for correct ordering.
0044    */
0045   virtual unsigned int numBodies() const {return 4;}
0046 
0047   /**
0048    *  Create a decay mode
0049    */
0050   void createDecayMode(vector<NBDiagram> &,bool,double);
0051 
0052   /**
0053    * Create the decayer
0054    * @param diagrams The diagrams for the decay
0055    * @param inter Option for intermediates
0056    */
0057   GeneralFourBodyDecayerPtr createDecayer(vector<NBDiagram> & diagrams,
0058                       bool inter, double symfac) const;
0059 
0060   /**
0061    * Contruct the classname and object name for the Decayer
0062    * @param incoming The incoming particle
0063    * @param outgoing The decay products
0064    * @param objname a string containing the default path of the Decayer object
0065    */  
0066   string DecayerClassName(tcPDPtr incoming, const OrderedParticles & outgoing, 
0067               string & objname) const;
0068 
0069 public:
0070 
0071   /** @name Functions used by the persistent I/O system. */
0072   //@{
0073   /**
0074    * Function used to write out object persistently.
0075    * @param os the persistent output stream written to.
0076    */
0077   void persistentOutput(PersistentOStream & os) const;
0078 
0079   /**
0080    * Function used to read in object persistently.
0081    * @param is the persistent input stream read from.
0082    * @param version the version number of the object when written.
0083    */
0084   void persistentInput(PersistentIStream & is, int version);
0085   //@}
0086 
0087   /**
0088    * The standard Init function used to initialize the interfaces.
0089    * Called exactly once for each class by the class description system
0090    * before the main function starts or
0091    * when this class is dynamically loaded.
0092    */
0093   static void Init();
0094 
0095 protected:
0096 
0097   /** @name Clone Methods. */
0098   //@{
0099   /**
0100    * Make a simple clone of this object.
0101    * @return a pointer to the new object.
0102    */
0103   virtual IBPtr clone() const;
0104 
0105   /** Make a clone of this object, possibly modifying the cloned object
0106    * to make it sane.
0107    * @return a pointer to the new object.
0108    */
0109   virtual IBPtr fullclone() const;
0110   //@}
0111 
0112 private:
0113 
0114   /**
0115    * The assignment operator is private and must never be called.
0116    * In fact, it should not even be implemented.
0117    */
0118   FourBodyDecayConstructor & operator=(const FourBodyDecayConstructor &) = delete;
0119 
0120 private:
0121 
0122   /**
0123    *  Option for the inclusion of intermediates
0124    */
0125   unsigned int interOpt_;
0126 
0127   /**
0128    *  How to treat the widths of the intermediate particles
0129    */
0130   unsigned int widthOpt_;
0131 
0132   /**
0133    *  Particles to override the default list
0134    */
0135   vector<PDPtr> particles_;
0136 
0137   /**
0138    *  Types of particles
0139    */
0140   bool particleType_;
0141 };
0142 
0143 }
0144 
0145 #endif /* THEPEG_FourBodyDecayConstructor_H */