20 template<
typename Type,
typename BuiltIn>
27 operator BuiltIn()
const
47 template<
typename Type,
typename Class>
64 #define DeclareNewNumericType(_type,_var) \
65 class _type : public ArgType<_type,_var>\
68 _type() : ArgType<_type,_var>() {}\
69 _type(const _var& v) : ArgType<_type,_var>(v) {}\
70 _type& operator+=(const _var& v)\
75 _type& operator-=(const _var& v)\
80 _type& operator*=(const _var& v)\
85 _type& operator/=(const _var& v)\
95 static const char* get_encapsulated_typename() { return #_var ; }\
96 static const char* get_typename() { return #_type ; }\
100 #define DeclareNewClassType(_type,_var) \
101 class _type : public ArgTypeClass<_type,_var>\
104 _type() : ArgTypeClass<_type,_var>() {}\
105 _type(const _var& v) : ArgTypeClass<_type,_var>(v) {}\
106 static const char* get_encapsulated_typename() { return #_var ; }\
107 static const char* get_typename() { return #_type ; }\
111 #define DeclareNewVectorType(_type) \
112 class _type : public ArgTypeClass<_type,TVector3>\
116 _type() : ArgTypeClass<_type,TVector3>() {}\
117 _type(const TVector3& v) : ArgTypeClass<_type,TVector3>(v) {}\
118 _type(Double_t x,Double_t y,Double_t z) : ArgTypeClass<_type,TVector3>(TVector3(x,y,z)) {}\
119 _type& operator+=(const TVector3& v)\
124 _type& operator-=(const TVector3& v)\
129 static const char* get_encapsulated_typename() { return "TVector3" ; }\
130 static const char* get_typename() { return #_type ; }\
131 DeclareNewNumericType(XComponent,Double_t);\
132 DeclareNewNumericType(YComponent,Double_t);\
133 DeclareNewNumericType(ZComponent,Double_t);\
134 DeclareNewNumericType(TransverseComponent,Double_t);\
135 DeclareNewNumericType(Magnitude,Double_t);\
136 XComponent X() const { return _val.X(); }\
137 YComponent Y() const { return _val.Y(); }\
138 ZComponent Z() const { return _val.Z(); }\
139 TransverseComponent Perp() const { return _val.Perp(); }\
140 Magnitude Mag() const { return _val.Mag(); }\
143 #define DeclareNewStringType(_type) \
144 class _type : public ArgTypeClass<_type,TString>\
147 _type() : ArgTypeClass<_type,TString>() {}\
148 _type(const TString& v) : ArgTypeClass<_type,TString>(v) {}\
149 _type(const char* v) : ArgTypeClass<_type,TString>(v) {}\
150 operator const char* () const { return _val.Data(); }\
151 friend std::ostream& operator<<(std::ostream& os, const _type& obj)\
153 os << obj._val.Data();\
156 Bool_t operator==(const TString& v) const { return _val==v; }\
157 Bool_t operator!=(const TString& v) const { return _val!=v; }\
158 Bool_t operator==(const char* v) const { return _val==v; }\
159 Bool_t operator!=(const char* v) const { return _val!=v; }\
160 static const char* get_encapsulated_typename() { return "TString" ; }\
161 static const char* get_typename() { return #_type ; }\
166 #define DeclareNumericTypeOperator(_op,_ret,_t1,_t2) _ret operator _op (const _t1 & A, const _t2 & B)
167 #define DeclareNumericTypeOperatorCommutative(_op,_ret,_t1,_t2)\
168 DeclareNumericTypeOperator(_op,_ret,_t1,_t2);\
169 DeclareNumericTypeOperator(_op,_ret,_t2,_t1)
170 #define DeclareNumericTypeSubtraction(_ret,_t1,_t2)\
171 DeclareNumericTypeOperatorCommutative(-,_ret,_t1,_t2);\
172 DeclareNumericTypeOperatorCommutative(+,_t1,_ret,_t2);\
173 DeclareNumericTypeOperatorCommutative(-,_t2,_t1,_ret)
174 #define DeclareNumericTypeAddition(_ret,_t1,_t2)\
175 DeclareNumericTypeOperatorCommutative(+,_ret,_t1,_t2);\
176 DeclareNumericTypeOperatorCommutative(-,_t1,_ret,_t2);\
177 DeclareNumericTypeOperatorCommutative(-,_t2,_t1,_ret)
178 #define DeclareNumericTypeDivision(_ret,_t1,_t2)\
179 DeclareNumericTypeOperator(/,_ret,_t1,_t2);\
180 DeclareNumericTypeOperator(/,_t2,_t1,_ret);\
181 DeclareNumericTypeOperatorCommutative(*,_t1,_t2,_ret)
182 #define DeclareNumericTypeMultiplication(_ret,_t1,_t2)\
183 DeclareNumericTypeOperator(/,_t1,_ret,_t2);\
184 DeclareNumericTypeOperator(/,_t2,_ret,_t1);\
185 DeclareNumericTypeOperatorCommutative(*,_ret,_t1,_t2)
186 #define ImplementNumericTypeOperator(_op,_ret,_t1,_t2)\
187 _ret operator _op (const _t1 & A, const _t2 & B)\
189 return _ret(A() _op B());\
191 #define ImplementNumericTypeOperatorCommutative(_op,_ret,_t1,_t2)\
192 ImplementNumericTypeOperator(_op,_ret,_t1,_t2)\
193 ImplementNumericTypeOperator(_op,_ret,_t2,_t1)
194 #define ImplementNumericTypeSubtraction(_ret,_t1,_t2)\
195 ImplementNumericTypeOperatorCommutative(-,_ret,_t1,_t2)\
196 ImplementNumericTypeOperatorCommutative(+,_t1,_ret,_t2)\
197 ImplementNumericTypeOperatorCommutative(-,_t2,_t1,_ret)
198 #define ImplementNumericTypeAddition(_ret,_t1,_t2)\
199 ImplementNumericTypeOperatorCommutative(+,_ret,_t1,_t2)\
200 ImplementNumericTypeOperatorCommutative(-,_t1,_ret,_t2)\
201 ImplementNumericTypeOperatorCommutative(-,_t2,_t1,_ret)
202 #define ImplementNumericTypeDivision(_ret,_t1,_t2)\
203 ImplementNumericTypeOperator(/,_ret,_t1,_t2)\
204 ImplementNumericTypeOperator(/,_t2,_t1,_ret)\
205 ImplementNumericTypeOperatorCommutative(*,_t1,_t2,_ret)
206 #define ImplementNumericTypeMultiplication(_ret,_t1,_t2)\
207 ImplementNumericTypeOperator(/,_t1,_ret,_t2)\
208 ImplementNumericTypeOperator(/,_t2,_ret,_t1)\
209 ImplementNumericTypeOperatorCommutative(*,_ret,_t1,_t2)
Base class for explicit argument types (class types)
ArgTypeClass(const Class &v)
Base class for explicit argument types.
BuiltIn operator()() const
ArgType(const BuiltIn &v)
RooCmdArg Name(const char *name)
AtomicNumber AtomicNumber BindingEnergy
DeclareNumericTypeSubtraction(NeutronExcess, NeutronNumber, AtomicNumber)
DeclareNumericTypeAddition(MassNumber, NeutronNumber, AtomicNumber)
Special operations.
DeclareNewStringType(Name)
DeclareNewNumericType(Number, Int_t)
basic properties
DeclareNewClassType(FourMomentum, TLorentzVector)
DeclareNumericTypeDivision(ChargeAsymmetry, NeutronExcess, MassNumber)
RelativeVelocity operator-(Velocity, Velocity)
DeclareNewVectorType(Direction)