![]() |
|
|||
File indexing completed on 2025-04-19 09:09:45
0001 #ifndef MODEL_Interaction_Models_Lorentz_Function_H 0002 #define MODEL_Interaction_Models_Lorentz_Function_H 0003 0004 #include "ATOOLS/Org/MyStrStream.H" 0005 #include "ATOOLS/Org/Getter_Function.H" 0006 #include "ATOOLS/Org/STL_Tools.H" 0007 #include <vector> 0008 0009 namespace MODEL { 0010 0011 struct LF_Key {}; 0012 0013 class Lorentz_Function { 0014 private: 0015 0016 Lorentz_Function(const Lorentz_Function &l): p_next(NULL) { *this=l; } 0017 0018 protected: 0019 0020 std::string m_type; 0021 0022 int m_partarg[4], m_permcount; 0023 0024 std::vector<int*> m_permlist; 0025 std::vector<int> m_signlist; 0026 Lorentz_Function* p_next; 0027 0028 std::string Str(int a) const; 0029 0030 Lorentz_Function(const std::string &type); 0031 0032 virtual ~Lorentz_Function(); 0033 0034 public: 0035 0036 virtual void Delete() = 0; 0037 0038 virtual int NofIndex() const = 0; 0039 0040 virtual std::string String(int shortversion=0) const = 0; 0041 0042 virtual void InitPermutation(); 0043 0044 virtual bool CutVectors(); 0045 0046 virtual Lorentz_Function *GetCopy() const = 0; 0047 0048 void SetParticleArg(int a=-1,int b=-1,int c=-1,int d=-1); 0049 void AddPermutation(int sign,int a,int b=-1,int c=-1,int d=-1); 0050 0051 int GetSign(); 0052 int ResetPermutation(); 0053 int NextPermutation(); 0054 0055 Lorentz_Function &operator=(const Lorentz_Function &l); 0056 0057 bool operator==(const Lorentz_Function &l) const; 0058 0059 inline int ParticleArg(int i) const { return m_partarg[i]; } 0060 inline const int* ParticleArg() const { return m_partarg; } 0061 0062 inline std::string Type() const { return m_type; } 0063 0064 };// end of class Lorentz_Function 0065 0066 typedef ATOOLS::Getter_Function<Lorentz_Function,LF_Key> LF_Getter; 0067 0068 std::ostream &operator<<(std::ostream &str,const Lorentz_Function &lf); 0069 class LF_Pol: public Lorentz_Function { 0070 public: 0071 LF_Pol(); 0072 int NofIndex() const; 0073 std::string String(int shortversion) const; 0074 Lorentz_Function *GetCopy() const; 0075 static ATOOLS::AutoDelete_Vector<LF_Pol> s_objects; 0076 static Lorentz_Function *New(); 0077 void Delete(); 0078 }; 0079 0080 0081 /*! 0082 \file 0083 \brief this file contains the classes MODEL::Lorentz_Function 0084 and MODEL::lf 0085 */ 0086 0087 /*! 0088 \class lf 0089 \brief Helper class to collect the existing types of possible Lorentz_Functions 0090 0091 0092 */ 0093 0094 /*! 0095 \class Lorentz_Function 0096 \brief In this class basic Lorentz structures as present in the SM, MSSM and LED 0097 are defined. According to these Lorentz structures generated amplitudes can 0098 uniquely be translated into helicity amplitudes. 0099 0100 In order to attach the Lorentz structure to a Single_Vertex object 0101 Lorentz_Function objects are defined. A Lorentz_Function possesses a type, 0102 defined in the class MODEL::lf, and a number of arguments. These arguments called 0103 partarg are of the integer type. Per default they are set to '-1'. Attached to a 0104 Lorentz_Function is a string expression that contains the information of the 0105 Lorentz_Function type and its arguments, see Tab. ?? for a complete list of 0106 Lorentz_Function types defined in MODEL++, there associated number of arguments 0107 and the corresponding string expression. 0108 0109 <table width=450 align=center> 0110 <tr> 0111 <td>Lorentz_Function</td> 0112 <td>args</td> 0113 <td>Lorentz structure </td> 0114 <td>string</td> 0115 </tr> 0116 <tr> 0117 <td>Pol</td> 0118 <td>1</td> 0119 <td>\f$ \epsilon^{\mu} \f$</td> 0120 <td>EPS[0]</td> 0121 </tr> 0122 <tr> 0123 <td>SSS</td> 0124 <td>0</td> 0125 <td>\f$ 1 \f$</td> 0126 <td>1</td> 0127 </tr> 0128 <tr> 0129 <td>FFS</td> 0130 <td>0</td> 0131 <td>\f$ 1 \f$</td> 0132 <td>1</td> 0133 </tr> 0134 <tr> 0135 <td>SSV</td> 0136 <td>3</td> 0137 <td>\f$ (p_0-p_1)^{\mu} \f$</td> 0138 <td>P[0,2]-P[1,2]</td> 0139 </tr> 0140 <tr> 0141 <td>Gamma</td> 0142 <td>1</td> 0143 <td>\f$ \gamma^{\mu} \f$</td> 0144 <td>Gam[0]</td> 0145 </tr> 0146 <tr> 0147 <td>Gab</td> 0148 <td>2</td> 0149 <td>\f$ g^{\mu\nu} \f$</td> 0150 <td>G[0,1]</td> 0151 </tr> 0152 <tr> 0153 <td>Gauge3</td> 0154 <td>3</td> 0155 <td>\f$ (p_0-p_1)^{\mu}g^{\nu\lambda} + (p_1-p_2)^{\nu} g^{\lambda\mu}+ (p_2-p_0)^{\lambda}g^{\mu\nu} \f$</td> 0156 <td>(P[0,2]-P[1,2])*G[0,1]+(P[1,0]-P[2,0])*G[1,2]+(P[2,1]-P[0,1])*G[2,0]</td> 0157 </tr> 0158 <tr> 0159 <td>Gauge4</td> 0160 <td>4</td> 0161 <td>\f$ 2g^{\alpha\beta}g^{\mu\nu} - g^{\alpha\mu}g^{\beta\nu} - g^{\alpha\nu}g^{\beta\mu}\f$</td> 0162 <td>2*G(0,1)*G(2,3) - G(0,2)*G(1,3) - G(0,3)*G(1,2)</td> 0163 </tr> 0164 <tr> 0165 <td>Gluon4</td> 0166 <td>4</td> 0167 <td>\f$ g^{\alpha\beta}g^{\mu\nu} - g^{\alpha\nu}g^{\beta\mu}\f$</td> 0168 <td>G(0,1)*G(2,3) - G(0,3)*G(1,2)</td> 0169 </tr> 0170 <tr> 0171 <td>VVSS</td> 0172 <td>2</td> 0173 <td>\f$ g^{\mu\nu}\f$</td> 0174 <td>G(2V2S)[0,1]</td> 0175 </tr> 0176 <tr> 0177 <td>SSSS</td> 0178 <td>0</td> 0179 <td>\f$ 1\f$</td> 0180 <td>1</td> 0181 </tr> 0182 <tr> 0183 <td>FFT</td> 0184 <td>1</td> 0185 <td>\f$ ??\f$</td> 0186 <td>??</td> 0187 </tr> 0188 <tr> 0189 <td>VVT</td> 0190 <td>3</td> 0191 <td>\f$ ??\f$</td> 0192 <td>??</td> 0193 </tr> 0194 <tr> 0195 <td>SST</td> 0196 <td>3</td> 0197 <td>\f$ ??\f$</td> 0198 <td>??</td> 0199 </tr> 0200 <tr> 0201 <td>FFVT</td> 0202 <td>2</td> 0203 <td>\f$ ??\f$</td> 0204 <td>??</td> 0205 </tr> 0206 <tr> 0207 <td>VVVT</td> 0208 <td>4</td> 0209 <td>\f$ ??\f$</td> 0210 <td>??</td> 0211 </tr> 0212 <tr> 0213 <td>SSST</td> 0214 <td>1</td> 0215 <td>\f$ ??\f$</td> 0216 <td>??</td> 0217 </tr> 0218 <tr> 0219 <td>FFGS</td> 0220 <td>0</td> 0221 <td>\f$ ??\f$</td> 0222 <td>??</td> 0223 </tr> 0224 <tr> 0225 <td>VVGS</td> 0226 <td>3</td> 0227 <td>\f$ ??\f$</td> 0228 <td>??</td> 0229 </tr> 0230 <tr> 0231 <td>SSGS</td> 0232 <td>2</td> 0233 <td>\f$ ??\f$</td> 0234 <td>??</td> 0235 </tr> 0236 <tr> 0237 <td>FFVGS</td> 0238 <td>1</td> 0239 <td>\f$ ??\f$</td> 0240 <td>??</td> 0241 </tr> 0242 </table> 0243 0244 In addition to its type and arguments a Lorentz_Function owns a pointer to a further 0245 Lorentz_Function called Next, a priori this pointer is initialized as nil. 0246 */ 0247 0248 /*! 0249 \fn std::string Lorentz_Function::String(int shortversion=0) 0250 \brief Returns the string expression of the associated Lorentz_Function in terms 0251 of the underlying Lorentz structure or a shorthand notation. 0252 */ 0253 0254 /*! 0255 \fn int Lorentz_Function::NofIndex() 0256 \brief Returns the number of arguments the Lorentz_Function owns. 0257 */ 0258 0259 /*! 0260 \fn void Lorentz_Function::SetParticleArg(int a=-1, int b=-1,int c=-1,int d=-1) 0261 \brief The setting of the integer arguments of a Lorentz_Function object is 0262 performed. Since all arguments are per default set to '-1' it is sufficient to 0263 specify only the number of physical meaningful arguments even this number is smaller 0264 than four. 0265 */ 0266 0267 /*! 0268 \fn int Lorentz_Function::GetSign() 0269 \brief Returns the sign according to a specific permutation of the arguments of 0270 a Lorentz_Function. 0271 */ 0272 0273 /*! 0274 \fn void Lorentz_Function::AddPermutation(int,int,int,int,int); 0275 \brief A new permution can be added to the list of permutations associated 0276 to a Lorentz_Function. 0277 0278 The first argument determines the sign of the permutation and therefore 0279 can have the two values '\f$\pm 1\f$'. The remaining arguments determine the 0280 exchange of the original order of arguments of the Lorentz_Function under consideration. 0281 Taking a Lorentz_Function with four arguments (0,1,2,3) the call AddPermutation(-1,2,1,0,3) 0282 would result in the argument tuple (2,1,0,3) and the sign '-1' is added to the m_signlist. 0283 0284 */ 0285 0286 /*! 0287 \fn void Lorentz_Function::InitPermutation(); 0288 \brief The predefined permutations of all Lorentz_Function objets are initialized. 0289 0290 After clearing the lists m_permlist and m_signlist of the Lorentz_Function the existing argument 0291 permutations are added to m_permlist and the corresponding signs to m_signlist. The counter 0292 m_percount is initialized as zero. 0293 */ 0294 /*! 0295 \fn int Lorentz_Function::ResetPermutation(); 0296 \brief Resets the arguments of a Lorentz_Function to the original order, resp. (0,1,2,3). 0297 The counter m_percount is set to zero. 0298 */ 0299 /*! 0300 \fn int Lorentz_Function::NextPermutation(); 0301 \brief This method trys to set up a new permutation of the arguments be going through 0302 the m_permlist of the object where the current position is determined by the value of 0303 m_permcount. 0304 0305 For Lorentz_Functions possessing less than two arguments clearly there exists no nontrivial 0306 permutation and therefore the method returns a zero. For all other cases the method rearanges 0307 the arguments of the Lorentz_Function according to a permutation out list of m_permlist and 0308 increases the value of m_permcount by one. For each call of the method one new permutation is 0309 set up and in case the end of list is reached a zero is returned. 0310 */ 0311 0312 /*! 0313 \var int Lorentz_Function::m_permcount; 0314 \brief Variable that stores the current position in the list of permutations m_permlist. 0315 */ 0316 0317 /*! 0318 \var std::vector<int*> Lorentz_Function::m_permlist; 0319 \brief List of allowed argument permutations belonging to a Lorentz_Function. 0320 */ 0321 /*! 0322 \var std::vector<int> Lorentz_Function::m_signlist; 0323 \brief Associated list of signs corresponding to the permutations in m_permlist. 0324 */ 0325 } 0326 0327 #define DEFINE_LF_GETTER(CLASS,TAG,INFO) \ 0328 DECLARE_GETTER(CLASS,TAG,Lorentz_Function,LF_Key); \ 0329 Lorentz_Function *ATOOLS::Getter<Lorentz_Function,LF_Key,CLASS>:: \ 0330 operator()(const LF_Key &key) const { return CLASS::New(); } \ 0331 void ATOOLS::Getter<Lorentz_Function,LF_Key,CLASS>:: \ 0332 PrintInfo(std::ostream &str,const size_t width) const { str<<INFO; } 0333 0334 #endif 0335
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |