![]() |
|
|||
File indexing completed on 2025-04-19 09:09:47
0001 #ifndef AMEGIC_Phasespace_Channel_Generator_NPV_H 0002 #define AMEGIC_Phasespace_Channel_Generator_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_Generator_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_Generator_NPV(int,int,Point *,int); 0054 ~Channel_Generator_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
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |