Logo ROOT   6.12/07
Reference Guide
ABSum.h
Go to the documentation of this file.
1 // @(#)root/minuit2:$Id$
2 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005
3 
4 /**********************************************************************
5  * *
6  * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT *
7  * *
8  **********************************************************************/
9 
10 #ifndef ROOT_Minuit2_ABSum
11 #define ROOT_Minuit2_ABSum
12 
13 #include "Minuit2/ABObj.h"
14 
15 namespace ROOT {
16 
17  namespace Minuit2 {
18 
19 
20 template<class M1, class M2>
21 class ABSum {
22 
23 private:
24 
25  ABSum() : fA(M1()), fB(M2()) {}
26 
27  ABSum& operator=(const ABSum&) {return *this;}
28 
29  template<class MI1, class MI2>
30  ABSum& operator=(const ABSum<MI1,MI2>&) {return *this;}
31 
32 public:
33 
34  ABSum(const M1& a, const M2& b): fA(a), fB(b) {}
35 
36  ~ABSum() {}
37 
38  ABSum(const ABSum& sum) : fA(sum.fA), fB(sum.fB) {}
39 
40  template<class MI1, class MI2>
41  ABSum(const ABSum<MI1,MI2>& sum) : fA(M1(sum.A() )), fB(M2(sum.B() )) {}
42 
43  const M1& A() const {return fA;}
44  const M2& B() const {return fB;}
45 
46 private:
47 
48  M1 fA;
49  M2 fB;
50 };
51 
52 // ABObj + ABObj
53 template<class atype, class A, class btype, class B, class T>
55 
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));
57 }
58 
59 // ABObj - ABObj
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) {
62 
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())));
64 }
65 
66  } // namespace Minuit2
67 
68 } // namespace ROOT
69 
70 #endif // ROOT_Minuit2_ABSum
static long int sum(long int i)
Definition: Factory.cxx:2173
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
T f() const
Definition: ABObj.h:56
double T(double x)
Definition: ChebyshevPol.h:34
ABSum & operator=(const ABSum< MI1, MI2 > &)
Definition: ABSum.h:30
ABObj< mt, M, T > operator-(const M &obj)
Definition: ABObj.h:152
ABSum(const ABSum< MI1, MI2 > &sum)
Definition: ABSum.h:41
ABSum(const ABSum &sum)
Definition: ABSum.h:38
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)
Definition: ABSum.h:54
auto * a
Definition: textangle.C:12
const M2 & B() const
Definition: ABSum.h:44
const M & Obj() const
Definition: ABObj.h:54
ABSum(const M1 &a, const M2 &b)
Definition: ABSum.h:34
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
ABSum & operator=(const ABSum &)
Definition: ABSum.h:27
const M1 & A() const
Definition: ABSum.h:43