Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef AMEGIC_Amplitude_Amplitude_Manipulator_H
0002 #define AMEGIC_Amplitude_Amplitude_Manipulator_H
0003 
0004 #include "ATOOLS/Phys/Flavour.H"
0005 #include "AMEGIC++/Main/Topology.H"
0006 #include "AMEGIC++/Amplitude/Single_Amplitude.H"
0007 
0008 namespace AMEGIC {
0009 
0010   class Amplitude_Manipulator {
0011     int N;
0012     ATOOLS::Flavour* fl;
0013     int* b;
0014     int dec;
0015 
0016     void   SetPrev(Point*);
0017     int    Permutation(int*,int);
0018     void   GetPerm(int*,Single_Amplitude*,int&);
0019     Point* FindNext(Point*);
0020     void   GetFermionLine(Point*,Point*&,Point*&);
0021     Point* ForwardLine(Point*);
0022     Point* BackwardLine(Point*);
0023     
0024     int  SetPropOrientation(Point*,Point*);
0025     void ForwardLineOrientation(Point*,int&);
0026     void BackwardLineOrientation(Point*,int&);
0027     
0028     int  SetFermionNumberFlow(Point*,Point*);
0029     void SetForwardFNFlow(Point*,int,int&);
0030     void SetBackwardFNFlow(Point*,int,int&);
0031     
0032     void SetMajoFlowForward(Point*,int);
0033     void SetMajoFlowBackward(Point*,int);
0034     
0035   public:
0036     Amplitude_Manipulator(int _no,ATOOLS::Flavour* _fl,int* _b,int d=0): 
0037       N(_no), fl(_fl), b(_b), dec(d){}
0038     void   FixSign(Single_Amplitude*);  
0039   };
0040 
0041  /*! 
0042     \file
0043     \brief this file contains the class AMEGIC::Amplitude_Manipulator
0044   
0045   */
0046 
0047   /*! \class Amplitude_Manipulator
0048       \brief is capable for fixing the relative sign of interferring Feynman graphs 
0049       
0050       A basic feature of many extensions of the SM, {\e e.g.} the MSSM, is the 
0051       occurrence of Majorana fermion fields. Due to their self--conjugated nature 
0052       diagrams with ``clashing arrows'' enter and a proper determination of the 
0053       Relative Sign of Interfering Feynman graphs (RSIF) is far from being trivial.
0054       An approach easily applicable for an automated generation of Feynman graphs has 
0055       been provided in \cite Denner1992vza. The Feynman rules defined there are close 
0056       to the rules for Dirac fermions. Since for Majorana fermions the fermion number 
0057       flow is violated the authors define a new kind of fermion chain orientation, called 
0058       fermion flow. This continuous orientation forces the introduction of two analytic 
0059       expressions for each vertex, one for fermion flow parallel and one for fermion 
0060       flow anti--parallel to the conventional fermion number flow. However, the derived 
0061       Feynman rules ask only for a minimal number of vertices and avoid the explicit 
0062       occurrence of charge conjugation matrices in the vertices and propagators. In this
0063       framework the RSIF is determined from the permutation of the external
0064       fermions in the usual way. The precise determination of the RSIF according to the
0065       algorithm defined in \cite Denner1992vza  is provided by the class
0066       {@link AMEGIC::Amplitude_Manipulator}
0067   */
0068   
0069   /*!
0070     \fn void Amplitude_Manipulator::SetPrev(Point*);
0071     \brief Describe SetPrev(Point*) ...;
0072     
0073   */
0074   /*!  
0075     \fn int Amplitude_Manipulator::Permutation(int*,int);
0076      \brief Describe Permutation(int*,int);
0077     */
0078   /*!
0079    \fn void Amplitude_Manipulator::GetPerm(int*,Single_Amplitude*,int&);
0080      \brief Describe GetPerm(int*,Single_Amplitude*,int&);
0081     */
0082   /*!
0083     \fn Point* Amplitude_Manipulator::FindNext(Point*);
0084      \brief Describe FindNext(Point*);
0085     */    
0086   /*! 
0087     \fn void Amplitude_Manipulator::GetFermionLine(Point*,Point*&,Point*&);
0088        \brief Describe GetFermionLine(Point*,Point*&,Point*&);
0089       */
0090   /*! 
0091    \fn Point* Amplitude_Manipulator::ForwardLine(Point*);
0092        \brief Describe ForwardLine(Point*);
0093       */
0094   /*! 
0095       \fn Point* Amplitude_Manipulator::BackwardLine(Point*);
0096        \brief Describe BackwardLine(Point*);
0097       */    
0098   /*! 
0099       \fn int  Amplitude_Manipulator::SetPropOrientation(Point*,Point*);
0100       \brief Describe SetPropOrientation(Point*,Point*);
0101   */ 
0102   /*! 
0103     \fn void Amplitude_Manipulator::ForwardLineOrientation(Point*,int&);
0104      \brief Describe ForwardLineOrientation(Point*,int&);
0105     */
0106   /*! 
0107     \fn void Amplitude_Manipulator::BackwardLineOrientation(Point*,int&);
0108      \brief Describe BackwardLineOrientation(Point*,int&);
0109     */
0110   /*! 
0111     \fn void Amplitude_Manipulator::SetFermionNumberFlow(Point*,Point*);
0112    \brief Describe SetFermionNumberFlow(Point*,Point*);
0113   */
0114   /*! 
0115     \fn void Amplitude_Manipulator::SetForwardFNFlow(Point*,int);
0116     \brief Describe SetForwardFNFlow(Point*,int);
0117   */
0118   /*! 
0119     \fn void Amplitude_Manipulator::SetBackwardFNFlow(Point*,int);
0120    \brief Describe SetBackwardFNFlow(Point*,int);
0121   */
0122 }
0123 #endif