10 #ifndef ROOT_Minuit2_ABSum
11 #define ROOT_Minuit2_ABSum
20 template<
class M1,
class M2>
25 ABSum() : fA(M1()), fB(M2()) {}
27 ABSum& operator=(
const ABSum&) {
return *
this;}
29 template<
class MI1,
class MI2>
30 ABSum& operator=(
const ABSum<MI1,MI2>&) {
return *
this;}
34 ABSum(
const M1& a,
const M2& b): fA(a), fB(b) {}
38 ABSum(
const ABSum& sum) : fA(sum.fA), fB(sum.fB) {}
40 template<
class MI1,
class MI2>
41 ABSum(
const ABSum<MI1,MI2>& sum) : fA(M1(sum.A() )), fB(M2(sum.B() )) {}
43 const M1& A()
const {
return fA;}
44 const M2& B()
const {
return fB;}
53 template<
class atype,
class A,
class btype,
class B,
class T>
54 inline ABObj<typename AlgebraicSumType<atype, btype>::Type, ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >,T> operator+(
const ABObj<atype,A,T>& a,
const ABObj<btype,B,T>& b) {
56 return ABObj<typename AlgebraicSumType<atype,btype>::Type, ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >,T>(ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >(a, b));
60 template<
class atype,
class A,
class btype,
class B,
class T>
61 inline ABObj<typename AlgebraicSumType<atype, btype>::Type, ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >,T> operator-(
const ABObj<atype,A,T>& a,
const ABObj<btype,B,T>& b) {
63 return ABObj<typename AlgebraicSumType<atype,btype>::Type, ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >,T>(ABSum<ABObj<atype,A,T>, ABObj<btype,B,T> >(a, ABObj<btype,B,T>(b.Obj(), T(-1.)*b.f())));
70 #endif // ROOT_Minuit2_ABSum