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