Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:10:23

0001 // @(#)root/minuit2:$Id$
0002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005
0003 
0004 /**********************************************************************
0005  *                                                                    *
0006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
0007  *                                                                    *
0008  **********************************************************************/
0009 
0010 #ifndef ROOT_Minuit2_LaProd
0011 #define ROOT_Minuit2_LaProd
0012 
0013 #include "Minuit2/ABProd.h"
0014 #include "Minuit2/LAVector.h"
0015 #include "Minuit2/LASymMatrix.h"
0016 
0017 namespace ROOT {
0018 
0019 namespace Minuit2 {
0020 
0021 /*
0022   LM" remove this for fixing alpha poblem
0023 #define OP_MULT1(MT1,MT2,MAT1,MAT2,T) \
0024 template<class B>                     \
0025 inline ABObj<AlgebraicProdType<MT1,MT2>::Type,ABProd<ABObj<MT1,MAT1,T>, ABObj<MT2,B,T> >,T>  operator*(const
0026 ABObj<MT1,MAT1,T>& a, const ABObj<MT2,B,T>& b) { return ABObj<AlgebraicProdType<MT1,MT2>::Type,ABProd<ABObj<MT1,MAT1,T>,
0027 ABObj<MT2,B,T> >,T>(ABProd<ABObj<MT1,MAT1,T>, ABObj<MT2,B,T> >(a, b)); }   \
0028 template<class A>             \
0029 inline ABObj<AlgebraicProdType<MT1,MT2>::Type,ABProd<ABObj<MT1,A,T>, ABObj<MT2,MAT2,T> >,T>  operator*(const
0030 ABObj<MT1,A,T>& a, const ABObj<MT2,MAT2,T>& b) { \
0031   return ABObj<AlgebraicProdType<MT1,MT2>::Type,ABProd<ABObj<MT1,A,T>, ABObj<MT2,MAT2,T> >,T>(ABProd<ABObj<MT1,A,T>,
0032 ABObj<MT2,MAT2,T> >(a, b));    \
0033 } \
0034   \
0035 */
0036 
0037 #define OP_MULT1(MT1, MT2, MAT1, MAT2, T)                                                                          \
0038    inline ABObj<AlgebraicProdType<MT1, MT2>::Type, ABProd<ABObj<MT1, MAT1, T>, ABObj<MT2, MAT2, T>>, T> operator*( \
0039       const ABObj<MT1, MAT1, T> &a, const ABObj<MT2, MAT2, T> &b)                                                  \
0040    {                                                                                                               \
0041       return ABObj<AlgebraicProdType<MT1, MT2>::Type, ABProd<ABObj<MT1, MAT1, T>, ABObj<MT2, MAT2, T>>, T>(        \
0042          ABProd<ABObj<MT1, MAT1, T>, ABObj<MT2, MAT2, T>>(a, b));                                                  \
0043    }
0044 
0045 OP_MULT1(sym, vec, LASymMatrix, LAVector, double)
0046 // OP_MULT1(sym,gen,LASymMatrix,LAGenMatrix,double)
0047 // OP_MULT1(sym,sym,LASymMatrix,LASymMatrix,double)
0048 // OP_MULT1(gen,vec,LAGenMatrix,LAVector,double)
0049 // OP_MULT1(gen,sym,LAGenMatrix,LASymMatrix,double)
0050 // OP_MULT1(gen,gen,LAGenMatrix,LAGenMatrix,double)
0051 
0052 } // namespace Minuit2
0053 
0054 } // namespace ROOT
0055 
0056 #endif // ROOT_Minuit2_LaProd