Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:25:32

0001 // -*- C++ -*- header file which declares the interface between Ninja
0002 // and the OneLoop integral library.  A cache of computed integrals is
0003 // added on top of the OneLoop library, in order to speed up multiple
0004 // evaluations of the same functions.
0005 
0006 
0007 #ifndef NINJA_AVHOLO_INTERFACE_HH
0008 #define NINJA_AVHOLO_INTERFACE_HH
0009 
0010 #include <ninja/integral_library.hh>
0011 
0012 #if !defined(NINJA_USE_ONELOOP) && !defined(NINJA_CONFIG_H_INTERNAL)
0013 # error "Ninja was not configured with OneLoop"
0014 #endif
0015 
0016 namespace ninja {
0017 
0018   struct IntegralCache;
0019 
0020   class AvHOneLoop : public IntegralLibrary {
0021   public:
0022     AvHOneLoop(): cache_(0), mur_(0), mur2_(0) {}
0023 
0024     // This method sets the numerical infrared threshold (default =
0025     // 1.0e-10)
0026     static void setInfraredThreshold(Real threshold);
0027 
0028     // This method clears the computed MIs but keeps the allocated
0029     // buckets in memory.  This avoids rehashing in future calls of
0030     // MIs.  It is suggested to be called after every phase-space
0031     // point, especially for amplitudes with many external legs.
0032     void clearIntegralCache();
0033 
0034     // This method completely frees the memory allocated by the cache
0035     // of MIs.  There is no obvious case when this should be called.
0036     // The method clearIntegralCache() should in general be preferred.
0037     void freeIntegralCache();
0038 
0039     virtual void init(Real muRsq);
0040 
0041     // 4-point MIs
0042     // - real masses
0043     virtual void getBoxIntegralRM(Complex rslt[3],
0044                                   Real s21, Real s32, Real s43,
0045                                   Real s14, Real s31, Real s42,
0046                                   Real m1, Real m2, Real m3, Real m4);
0047     // - complex masses
0048     virtual void getBoxIntegralCM(Complex rslt[3],
0049                                   Real s21, Real s32, Real s43,
0050                                   Real s14, Real s31, Real s42,
0051                                   const Complex & m1, const Complex & m2,
0052                                   const Complex & m3, const Complex & m4);
0053     // - massless
0054     virtual void getBoxIntegralNM(Complex rslt[3],
0055                                   Real s21, Real s32, Real s43,
0056                                   Real s14, Real s31, Real s42);
0057   
0058     // 3-point MIs
0059     // - real massses
0060     virtual void getTriangleIntegralRM(Complex rslt[3],
0061                                        Real s21, Real s32, Real s13,
0062                                        Real m1, Real m2, Real m3);
0063     // - complex massses
0064     virtual void getTriangleIntegralCM(Complex rslt[3],
0065                                        Real s21, Real s32, Real s13,
0066                                        const Complex & m1, const Complex & m2,
0067                                        const Complex & m3);
0068     // - massless
0069     virtual void getTriangleIntegralNM(Complex rslt[3],
0070                                        Real s21, Real s32, Real s13);
0071   
0072     // scalar 2-point MIs.  Not cached
0073     // - real masses
0074     virtual void getBubbleIntegralRM(Complex rslt[3],
0075                                      Real s21, Real m1, Real m2);
0076     // - complex massses
0077     virtual void getBubbleIntegralCM(Complex rslt[3],
0078                                      Real s21,
0079                                      const Complex & m1, const Complex & m2);
0080 
0081     // rank-2 2-point MIs
0082     // - real masses
0083     virtual void getRank2BubbleIntegralRM(Complex b11[3],
0084                                           Complex b1[3], Complex b0[3],
0085                                           Real s21, Real m1, Real m2);
0086     // - complex massses
0087     virtual void getRank2BubbleIntegralCM(Complex b11[3],
0088                                           Complex b1[3], Complex b0[3],
0089                                           Real s21,
0090                                           const Complex & m1,
0091                                           const Complex & m2);
0092     // - massless
0093     virtual void getRank2BubbleIntegralNM(Complex b11[3],
0094                                           Complex b1[3], Complex b0[3],
0095                                           Real s21);
0096 
0097 
0098     // 1-point MIs
0099     virtual void getTadpoleIntegralRM(Complex rslt[3], Real m0);
0100     virtual void getTadpoleIntegralCM(Complex rslt[3], const Complex & m0);
0101 
0102 
0103     // destructor
0104     virtual ~AvHOneLoop();
0105 
0106   private:
0107     IntegralCache * cache_;
0108     Real mur_, mur2_;
0109     static Real ir_threshold_;
0110     static bool initialized_;
0111 
0112   }; // class AvHOneLoop
0113 
0114   extern AvHOneLoop avh_olo;
0115 
0116 } // namespace ninja
0117 
0118 #endif // NINJA_AVHOLO_INTERFACE_HH