Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_Phasespace_Channel_Generator3_NPV_H
0002 #define AMEGIC_Phasespace_Channel_Generator3_NPV_H
0003 
0004 #include "AMEGIC++/Phasespace/Channel_Generator_Base.H"
0005 
0006 
0007 namespace AMEGIC {
0008 
0009 typedef std::map<std::string,std::string> Decls;
0010   
0011   typedef std::vector<std::string> String_List;
0012 
0013   
0014 
0015   class Channel_Generator3_NPV : public Channel_Generator_Base {
0016     Decls declarations;
0017     
0018     int         extrachannelflag,newchannel;
0019     int         tcount,acount,m_aid;
0020     String_List m_idc;
0021     std::string m_idstr,m_mapstr;
0022     std::vector<Point *> m_topos,m_pclist;
0023     void        Step0(int,Point *,int&,std::ofstream&);
0024     bool        QCDAntenna(int,Point*,int&,std::ofstream&,int);
0025 
0026     void        GenerateMassChain(int,Point *,Point *,int&,std::ofstream&);
0027     void        GenerateMassFwd(int,Point*,int&,std::ofstream&);
0028     void        GenerateDecayChain(int flag,Point* p,int& rannum,std::ofstream& sf,
0029                    std::vector<std::string>, std::vector<std::string>);
0030     std::string LinkedMasses(Point *);
0031     void        SetProps(Point *,Point **,Point **,int&);
0032     void        CalcSmin(int,const char*,std::string,std::ofstream&,Point*);
0033     void        CalcTSmin(int,String_List&,std::ofstream&);
0034     void        IdentifyProps(Point *);
0035     void        BackLinks(Point *,Point * &);
0036     void        InitT(Point *);
0037     bool        Massive(ATOOLS::Flavour fl) { return (fl.Mass()!=0.) ? 1:0; }
0038     int         AntennaS(Point* p);
0039     void        GenerateTopos(Point*);
0040     Point*      CopyPoints(Point*);
0041     Point*      TransformTS(Point*);
0042     Point*      GetMirrorTopo(Point*);
0043     int         MarkNP(Point*);
0044     void        MRPScan();
0045     std::string Order(std::string);
0046     std::string IString(int);
0047     void        AddToVariables(int,const std::string&,const std::string&,const int&,std::ofstream&); 
0048     bool        CheckVariables(int flag,const std::string& lhs,const int& type);
0049     void        ClearDeclarations() { declarations.clear(); } 
0050     double      PMassSum(Point*,std::vector<int>*);
0051     std::string GetFlMass(Point* p);
0052   public:
0053     Channel_Generator3_NPV(int,int,Point *,int);
0054     ~Channel_Generator3_NPV();
0055     int         MakeChannel(int&,int,std::string&,std::string&);
0056     Point     * GetPointlist()             { return plist; }
0057     //void        SetName(std::string _name) { name = _name; }
0058     std::string CreateChannelID(int);
0059     int         NumberOfChannels() { return m_topos.size(); }
0060   };
0061       //! The usual identifiers, number of incoming and outgoing legs.
0062     /*!
0063       This is a point list, i.e. a copy of the point list of the amplitude for
0064       which this channel is constructed. The copy is done with help of the class
0065       topology.
0066     */
0067     /*!
0068       The number of t-channel propagators helps in selecting the correct "principal"
0069       topology. This number is deterimined via the method IdentifyProps.
0070       Actually this might help also for efficient ISR channels in non-s channel
0071       cases later on.
0072     */
0073     /*!
0074       Step0 basically plays the role of distributing the different basic topologies for the final 
0075       state integral. Depending on tcount, the number of t-channel propagators in the amplitude,
0076       StepS (0 t's) or StepNT is called, for both the "Momenta"- and the "Weight"-mode. For StepS 
0077       some initialization work is done in Step0, mainly bacause StepS is called by the other 
0078       channels as well and because the invariant mass of the propagator in the s-channel has to 
0079       be known then.
0080     */
0081 
0082     /*!
0083       StepS initializes - if need be - the two invariant masses of the decay products by suitable 
0084       propagator terms via GenerateMasses. Then it decides on the decay type, either
0085       anisotropic or isotropic, depending on the flavour constellation.
0086       Finally it calls StepS for its decay products.
0087     */
0088     /*!
0089       StepNT is the start of a recursive method to fill multiple T-channels. Assume you have a 
0090       _ _ _    "comb-like structure", StepNT treats it by deciding which point is which type, 
0091       | | | |  s- or t-channel via SetProps. Via GenerateMasses the s-channel props receive 
0092       | | | |  their masses. However, StepNT then defines four vectors of legs, two incoming 
0093                and two outgoing each. Starting from the edges of the comb, either the left- 
0094       or the right-most s-channel prop and all the other s-channel props are treated as two 
0095       outgoing partner for a single t-channel. The single s-channel will be treated as belonging 
0096       to an incoming leg to continue to distribute the bulk of all the other s-channel 
0097       props in the next recursion step.
0098       This recursion, shuffling one s-channel leg into one incoming leg per step, is doen by 
0099       SingleTStep.
0100     */
0101     /*!
0102       SingleTStep initializes phase space boundaries and calls then a propagator structure 
0103       peaking at smin for the bulk of s-channel particles. Having two outgoing masses, the 
0104       TChannel method - Momenta or Weight - is called. Then a new s-channel prop to be singled
0105       out is selected.
0106     */
0107     /*!
0108       For a number of points, GenerateMasses defines the minimal invariant masses. It then works 
0109       consecutively and tries to find a sequence of propagators to be set such that the more 
0110       resonating a propagator is the earlier its mass will be selected to maximise the chance
0111       of it contributing significantly.
0112     */
0113     /*!
0114       Linked masses proceeds iterativley from a given point and creates a string that consists of 
0115       all numbers of outgoing particles that are off-springs of this point.
0116     */
0117     /*!
0118       SetProps selects t- and s-channel propagators in comb-like structures.
0119     */
0120     /*!
0121       CalcSmin determines the minimal invariant mass for a single propagator, defined by the sum 
0122       of the minimal invariant masses of all pairs of offsprings.
0123     */
0124     /*!
0125       CalcTSmin calculates the minimal invariant mass for a bulk of propagators 
0126       that has been already equipped with invariant masses.
0127     */
0128     /*!
0129       IdentifyProps checks for t-channel propagators.
0130       Starting by setting all t-flags in the points to zero via InitT, it first initializes the 
0131       previous-links in the points via BackLinks until it finds the second incoming endpoint 
0132       (with b=-1). Starting from there it walks over the previos links setting all
0133       t-flags on the way and incrementing the t-channel prop-counter step by step.
0134     */
0135     /*!
0136       A simple check whether a specific flavour is massive or not.
0137     */
0138 
0139     /*
0140       void    SetDouble(std::string,double);
0141       double  GetDouble(std::string);
0142       void    SetVector(std::string,Vec4D);
0143       Vec4D   GetVector(std::string);
0144       void    Clean();
0145       void    PrintSettings();
0146       ostream Translate(ATOOLS::Flavour);
0147     */
0148     /*!
0149       Copies the pointlist to make sure that we can work on it, identifies the types of 
0150       intermediate lines - whether they are s- or t-channel.
0151     */
0152     /*!
0153       This is the method seen from outside to initalize the channel in the library. It basically 
0154       produces the C-file of the channel and the methods of the file are initialized. MakeChannel 
0155       is called with a counters for the amplitude. 
0156       The individual methods, basically Weight and Momenta are filled by calling the method Step0 
0157       with different flags to switch in their respective "Momenta"- or "Weight"-mode. A counter 
0158       max_numb is passed through all these methods to count and collect the resonant propagators and 
0159       their flavours. Havong done that, with flag = 2, Step0 is passed again to fill in the
0160       ISRtype method. There, if tcount = 0, the isrtype will be set to 1, a Breit-Wigner pole
0161       with corresponding mass and width (that may be zero, such cases will be filtered in
0162       the MakeISRChannels). For t-channel type structures I'd like to have a similar structure,
0163       this is to be done. Finally MakeChannel returns the number of random numbers needed.
0164     */
0165 }  
0166 #endif
0167