10 #ifndef ROOT_Minuit2_ABObj
11 #define ROOT_Minuit2_ABObj
20 template<
class mtype,
class M,
class T>
29 ABObj() : fObject(M()), fFactor(T(0.)) {}
31 ABObj& operator=(
const ABObj&) {
return *
this;}
33 template<
class a,
class b,
class c>
34 ABObj(
const ABObj<a,b,c>&) : fObject(M()), fFactor(T(0.)) {}
36 template<
class a,
class b,
class c>
37 ABObj& operator=(
const ABObj<a,b,c>&) {
return *
this;}
41 ABObj(
const M& obj) : fObject(obj), fFactor(T(1.)) {}
43 ABObj(
const M& obj, T factor) : fObject(obj), fFactor(factor) {}
47 ABObj(
const ABObj& obj) :
48 fObject(obj.fObject), fFactor(obj.fFactor) {}
50 template<
class b,
class c>
51 ABObj(
const ABObj<mtype,b,c>& obj) :
52 fObject(M(obj.Obj() )), fFactor(T(obj.f() )) {}
54 const M& Obj()
const {
return fObject;}
56 T f()
const {
return fFactor;}
65 template <>
class ABObj<vec, LAVector, double> {
73 ABObj& operator=(
const ABObj&) =
delete;
77 ABObj(
const LAVector& obj) : fObject(obj), fFactor(double(1.)) {}
79 ABObj(
const LAVector& obj,
double factor) : fObject(obj), fFactor(factor) {}
89 ABObj(
const ABObj<vec,LAVector,c>& obj) :
90 fObject(obj.fObject), fFactor(double(obj.fFactor)) {}
92 const LAVector& Obj()
const {
return fObject;}
94 double f()
const {
return fFactor;}
98 const LAVector& fObject;
103 template <>
class ABObj<sym, LASymMatrix, double> {
111 ABObj& operator=(
const ABObj&) {
return *
this;}
115 ABObj(
const LASymMatrix& obj) : fObject(obj), fFactor(double(1.)) {}
117 ABObj(
const LASymMatrix& obj,
double factor) : fObject(obj), fFactor(factor) {}
121 ABObj(
const ABObj& obj) :
122 fObject(obj.fObject), fFactor(obj.fFactor) {}
125 ABObj(
const ABObj<vec,LASymMatrix,c>& obj) :
126 fObject(obj.fObject), fFactor(double(obj.fFactor)) {}
128 const LASymMatrix& Obj()
const {
return fObject;}
130 double f()
const {
return fFactor;}
134 const LASymMatrix& fObject;
139 template<
class mt,
class M,
class T>
140 inline ABObj<mt, M, T> operator*(T f,
const M& obj) {
141 return ABObj<mt, M, T>(obj, f);
145 template<
class mt,
class M,
class T>
146 inline ABObj<mt, M, T> operator/(
const M& obj, T f) {
147 return ABObj<mt, M, T>(obj, T(1.)/f);
151 template<
class mt,
class M,
class T>
152 inline ABObj<mt,M,T> operator-(
const M& obj) {
153 return ABObj<mt,M,T>(obj, T(-1.));
176 #endif // ROOT_Minuit2_ABObj