LaSum.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: LaSum.h 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #ifndef ROOT_Minuit2_LaSum
00011 #define ROOT_Minuit2_LaSum
00012 
00013 #include "Minuit2/ABSum.h"
00014 #include "Minuit2/LAVector.h"
00015 #include "Minuit2/LASymMatrix.h"
00016 
00017 namespace ROOT {
00018 
00019    namespace Minuit2 {
00020 
00021 
00022 #define OP_ADD1(MT,MAT1,T) \
00023 inline ABObj<MT,MAT1,T>  operator-(const ABObj<MT,MAT1,T>& m) {\
00024   return ABObj<MT,MAT1,T> (m.Obj(), T(-1.)*m.f());\
00025 }\
00026                           \
00027 inline ABObj<MT,ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >,T>  operator+(const ABObj<MT,MAT1,T>& a, const ABObj<MT,MAT1,T>& b) {          \
00028   return ABObj<MT,ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >,T>(ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >(a, b));                        \
00029 }                                                                                                              \
00030 inline ABObj<MT,ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >,T>  operator-(const ABObj<MT,MAT1,T>& a, const ABObj<MT,MAT1,T>& b) {               \
00031   return ABObj<MT,ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >,T>(ABSum<ABObj<MT,MAT1,T>, ABObj<MT,MAT1,T> >(a,ABObj<MT,MAT1,T> (b.Obj(),T(-1.)*b.f())));        \
00032 }
00033 
00034 OP_ADD1(vec,LAVector,double)
00035 OP_ADD1(sym,LASymMatrix,double)
00036 
00037 #define OP_SCALE(MT,MAT1,T) \
00038 inline ABObj<MT,MAT1,T> operator*(T f, const MAT1& obj) { \
00039   return ABObj<MT,MAT1,T>(obj, f); \
00040 }
00041 
00042 OP_SCALE(sym,LASymMatrix,double)
00043 OP_SCALE(vec,LAVector,double)
00044 
00045 #define OP_SCALE1(MT,MAT1,T) \
00046 inline ABObj<MT,MAT1,T> operator/(const MAT1& obj, T f) { \
00047   return ABObj<MT,MAT1,T>(obj, 1./f); \
00048 }
00049 
00050 OP_SCALE1(sym,LASymMatrix,double)
00051 OP_SCALE1(vec,LAVector,double)
00052 
00053 #define OP_MIN(MT,MAT1,T) \
00054 inline ABObj<MT,MAT1,T> operator-(const MAT1& obj) { \
00055   return ABObj<MT,MAT1,T>(obj, T(-1.)); \
00056 }
00057 
00058 OP_MIN(sym,LASymMatrix,double)
00059 OP_MIN(vec,LAVector,double)
00060 
00061   }  // namespace Minuit2
00062 
00063 }  // namespace ROOT
00064 
00065 #endif  // ROOT_Minuit2_LaSum

Generated on Tue Jul 5 14:25:42 2011 for ROOT_528-00b_version by  doxygen 1.5.1