Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:04

0001 #ifndef HADRONS_Main_Hadron_Decay_Channel_H
0002 #define HADRONS_Main_Hadron_Decay_Channel_H
0003 
0004 #include <string>
0005 #include <utility>
0006 #include "HADRONS++/Main/Tools.H"
0007 #include "PHASIC++/Decays/Decay_Channel.H"
0008 #include "ATOOLS/Math/Vector.H"
0009 #include "ATOOLS/Org/Scoped_Settings.H"
0010 
0011 namespace ATOOLS {
0012   class Blob;
0013 }
0014 
0015 namespace HADRONS {
0016   class Current_Base;
0017   class HD_ME_Base;
0018   class HD_PS_Base;
0019 
0020   /** 
0021    * Building on the general class Decay_Channel this class implements the
0022    * features specific for hadron decay channel, including extra properties
0023    * necessary for mixing phenomena and for reading information from decay
0024    * channel files.
0025    */
0026   class Hadron_Decay_Channel : public PHASIC::Decay_Channel {
0027     /// Origin of branching ratio/error
0028     std::string             m_origin;
0029     /// Whether to ignore stored integration results
0030     bool                    m_always_integrate;
0031     /// CP asymmetry coefficient C as used in PDG B0 listings, used to
0032     /// simulate CP rate asymmetries in this decay channel
0033     double                  m_cp_asymmetry_C;
0034     /// CP asymmetry coefficient S as used in PDG B0 listings, used to
0035     /// simulate CP rate asymmetries in this decay channel
0036     double                  m_cp_asymmetry_S;
0037     /// CP asymmetry coefficient lambda, used to
0038     /// simulate CP rate asymmetries in this decay channel
0039     Complex                 m_cp_asymmetry_lambda;
0040     /// global hadron decay parameters
0041     GeneralModel            m_startmd;
0042     /// mapping of alias flavours to physical flavours
0043     ATOOLS::Flavour_Vector  m_physicalflavours;
0044 
0045     
0046     /** 
0047      * Add (automatic) partonic channels settings
0048      * 
0049      * @param s the channel settings block from HADRON_DECAYS: { \<decayer\>: {channel: {...}}}
0050      */
0051     void   ProcessPartonic(ATOOLS::Scoped_Settings& s);
0052 
0053     /** 
0054      * Select a matrix element from a string like B_KStar_Semileptonic[0,1,2,3]
0055      * using the Getter_Function for HD_ME_Base.
0056      * 
0057      * @param me_string String containing the (getter-able) name of the matrix
0058      * element, and in square brackets the mapping of external particle
0059      * indices in the decay blob to internal indices in the matrix element.
0060      * @param s the ME settings block from HADRON_DECAYS: { \<decayer\>: {channel: { ME: {...}}}}
0061      * 
0062      * @return The matrix element it has created from the information. If
0063      * it can't find a valid matrix element, it will abort.
0064      */
0065     HD_ME_Base            * SelectME(std::string me_string, ATOOLS::Scoped_Settings s);
0066 
0067   public:
0068     /** 
0069      * Nothing initialised here, only created.
0070      * 
0071      * @param flin Incoming particle flavour
0072      * @param ms mass setter to be used for flavours in this channel
0073      */
0074     Hadron_Decay_Channel(ATOOLS::Flavour flin, const ATOOLS::Mass_Selector* ms);
0075     ~Hadron_Decay_Channel();
0076 
0077     /** 
0078      * Does the actual read-in of the decay channel file, and creates matrix
0079      * elements, phase space mappings etc. from that.
0080      * 
0081      * @param startmd Global hadron decay parameters.
0082      * @param s the channel settings block from HADRON_DECAYS: { \<decayer\>: {channel: {...}}}
0083      */
0084     void   Initialise(ATOOLS::Scoped_Settings s, GeneralModel startmd);
0085 
0086     /** 
0087      * Tries to set the color flow for the outparticles of the blob given.
0088      * This is needed for
0089      * partonic decay channels, after which the parton shower is started.
0090      * Either a general color flow assignment is used, or (if possible) the
0091      * matrix element can set it.
0092      * 
0093      * @param blob Blob to set color flow for
0094      * 
0095      * @return true if setting the color flow succeeded, false if not.
0096      */
0097     bool SetColorFlow(ATOOLS::Blob* blob);
0098 
0099     /** 
0100      * Outputs the Latex lines for one decay channel (to be embedded in a
0101      * decay table Latex output)
0102      * 
0103      * @param f Stream to write to.
0104      * @param totalwidth Total width of the decay table (such that branching
0105      * ratios can be printed).
0106      */
0107     void LatexOutput(std::ostream& f, double totalwidth);
0108 
0109     /** 
0110      * Takes a string e.g. of the form Channel_1_resonance_23 and finds the
0111      * appropriate phase space mapping for that. This PHASIC::Single_Channel is
0112      * then added to the decay channel's PHASIC::Multi_Channel.
0113      * 
0114      * @param name String describing the phase space channel
0115      * @param s the PS settings block from HADRON_DECAYS: { \<decayer\>: {channel: { PhaseSpace: {...}}}}
0116      * 
0117      * @return true if an appropriate channel was found, false if not.
0118      */
0119     bool AddPSChannel(std::string name, ATOOLS::Scoped_Settings s);
0120 
0121     //@{
0122     /** Getter/setter method. */
0123     inline const double& CPAsymmetryC() const { return m_cp_asymmetry_C; }
0124     inline const double& CPAsymmetryS() const { return m_cp_asymmetry_S; }
0125     inline const Complex&
0126     CPAsymmetryLambda() const { return m_cp_asymmetry_lambda; }
0127     inline const std::string& Origin() const { return m_origin; }
0128     inline void SetOrigin(const std::string& origin) { m_origin=origin; }    
0129     //@}
0130   };  
0131 }
0132 
0133 
0134 #endif