CMS 3D CMS Logo

SimplifyRatio.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_Utilities_SimplifyRatio_h
2 #define PhysicsTools_Utilities_SimplifyRatio_h
3 
11 
13 
14 #include <boost/mpl/if.hpp>
15 #include <type_traits>
16 
17 namespace funct {
18 
19  // 0 / a = 0
20  RATIO_RULE(TYPT1, NUM(0), A, NUM(0), num<0>());
21 
22  // a / 1 = a
23  RATIO_RULE(TYPT1, A, NUM(1), A, _1);
24 
25  // ( a * b )/ 1 = a * b
26  RATIO_RULE(TYPT2, PROD_S(A, B), NUM(1), PROD(A, B), _1);
27 
28  // a / ( -n ) = - ( a / n )
29  template <int n, typename A, bool positive = (n >= 0)>
31  typedef RATIO_S(A, NUM(n)) type;
32  COMBINE(A, NUM(n), type(_1, _2));
33  };
34 
35  TEMPL(N1T1)
37  typedef MINUS(RATIO(A, NUM(-n))) type;
38  COMBINE(A, NUM(n), -(_1 / num<-n>()));
39  };
40 
41  TEMPL(N1T1) struct Ratio<A, NUM(n)> : public SimplifyNegativeRatio<n, A> {};
42 
43  // ( -a ) / b = - ( a / b )
44  RATIO_RULE(TYPT2, MINUS_S(A), B, MINUS(RATIO(A, B)), -(_1._ / _2));
45 
46  // ( -a ) / n = - ( a / n )
47  RATIO_RULE(TYPN1T1, MINUS_S(A), NUM(n), MINUS(RATIO(A, NUM(n))), -(_1._ / _2));
48 
49  //TEMPL( N1T2 struct Ratio<PROD_S( A, B ), NUM( n )> :
50  // public SimplifyNegativeRatio<n, PROD_S( A, B )> { };
51 
52  // n / ( m * a ) = (n/m) * a
53  /* WRONG!!
54  RATIO_RULE(TYPN2T1, NUM(n), PROD_S(NUM(m), A), \
55  PROD(FRACT(n, m), A), (fract<n, m>() * _2._2));
56  */
57  // ( a / b ) / c = a / ( b * c )
58  RATIO_RULE(TYPT3, RATIO_S(A, B), C, RATIO(A, PROD(B, C)), _1._1 / (_1._2 * _2));
59 
60  // ( a / b ) / n = a / ( n * b )
61  RATIO_RULE(TYPN1T2, RATIO_S(A, B), NUM(n), RATIO(A, PROD(NUM(n), B)), _1._1 / (_2 * _1._2));
62 
63  // ( a / b ) / ( c * d ) = a / ( b * c * d )
64  RATIO_RULE(TYPT4, RATIO_S(A, B), PROD_S(C, D), RATIO(A, PROD(PROD(B, C), D)), _1._1 / (_1._2 * _2));
65 
66  // ( a * b ) / ( c / d ) = ( a * b * d ) / c
67  RATIO_RULE(TYPT4, PROD_S(A, B), RATIO_S(C, D), RATIO(PROD(PROD(A, B), D), C), (_1 * _2._2) / _2._1);
68 
69  // ( n * a ) / ( m * b ) = ( n/m ) ( a / b )
71  PROD_S(NUM(n), A),
72  PROD_S(NUM(m), B),
73  PROD_S(FRACT(n, m), RATIO(A, B)),
74  (PROD_S(FRACT(n, m), RATIO(A, B))((fract<n, m>()), (_1._2 / _2._2))));
75 
76  // a / ( b / c ) = a * c / b
77  RATIO_RULE(TYPT3, A, RATIO_S(B, C), RATIO(PROD(A, C), B), (_1 * _2._2) / _2._1);
78 
79  // ( a + b ) / ( c / d ) = ( a + b ) * d / c
80  RATIO_RULE(TYPT4, SUM_S(A, B), RATIO_S(C, D), RATIO(PROD(SUM(A, B), D), C), (_1 * _2._2) / _2._1);
81 
82  // ( a / b ) / ( c / d )= a * d / ( b * c )
83  RATIO_RULE(TYPT4, RATIO_S(A, B), RATIO_S(C, D), RATIO(PROD(A, D), PROD(B, C)), (_1._1 * _2._2) / (_1._2 * _2._1));
84 
85  // ( a + b ) / ( b + a ) = 1
86  template <TYPT2, bool parametric = (Parametric<A>::value == 1) || (Parametric<B>::value == 1)>
88  typedef RATIO_S(SUM(A, B), SUM(B, A)) type;
89  COMBINE(SUM(A, B), SUM(B, A), type(_1, _2));
90  };
91 
92  TEMPL(T2) struct SimplifyRatioSum<A, B, false> {
93  typedef NUM(1) type;
94  COMBINE(SUM(A, B), SUM(B, A), num<1>());
95  };
96 
97  TEMPL(T2) struct Ratio<SUM_S(A, B), SUM_S(B, A)> : public SimplifyRatioSum<A, B> {};
98 
99  // a^b / a^c => a^( b - c)
100  template <TYPT3, bool parametric = (Parametric<A>::value == 1)>
102  typedef POWER(A, B) arg1;
103  typedef POWER(A, C) arg2;
104  typedef RATIO_S(arg1, arg2) type;
105  COMBINE(arg1, arg2, type(_1, _2));
106  };
107 
108  TEMPL(T3)
109  struct SimplifyPowerRatio<A, B, C, false> {
110  typedef POWER(A, B) arg1;
111  typedef POWER(A, C) arg2;
112  typedef POWER(A, DIFF(B, C)) type;
113  inline static type combine(const arg1& _1, const arg2& _2) {
116  }
117  };
118 
119  TEMPL(T3) struct Ratio<POWER_S(A, B), POWER_S(A, C)> : public SimplifyPowerRatio<A, B, C> {};
120 
121  TEMPL(T2) struct Ratio<POWER_S(A, B), POWER_S(A, B)> : public SimplifyPowerRatio<A, B, B> {};
122 
123  TEMPL(T2) struct Ratio<A, POWER_S(A, B)> : public SimplifyPowerRatio<A, NUM(1), B> {};
124 
125  TEMPL(N1T1) struct Ratio<A, POWER_S(A, NUM(n))> : public SimplifyPowerRatio<A, NUM(1), NUM(n)> {};
126 
127  TEMPL(T2) struct Ratio<POWER_S(A, B), A> : public SimplifyPowerRatio<A, B, NUM(1)> {};
128 
129  TEMPL(N1T1) struct Ratio<POWER_S(A, NUM(n)), A> : public SimplifyPowerRatio<A, NUM(n), NUM(1)> {};
130 
131  TEMPL(T1) struct Ratio<A, A> : public SimplifyPowerRatio<A, NUM(1), NUM(1)> {};
132 
133  TEMPL(T2) struct Ratio<PROD_S(A, B), PROD_S(A, B)> : public SimplifyPowerRatio<PROD_S(A, B), NUM(1), NUM(1)> {};
134 
135  TEMPL(N1T1)
136  struct Ratio<PROD_S(NUM(n), A), PROD_S(NUM(n), A)> : public SimplifyPowerRatio<PROD_S(NUM(n), A), NUM(1), NUM(1)> {};
137 
138  RATIO_RULE(TYPN1, NUM(n), NUM(n), NUM(1), num<1>());
139 
140  // simplify ( f * g ) / h
141  // try ( f / h ) * g and ( g / h ) * f, otherwise leave ( f * g ) / h
142 
143  template <typename Prod, bool simplify = Prod::value>
145  typedef PROD(typename Prod::AB, typename Prod::C) type;
146  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
147  return (a / b) * c;
148  }
149  };
150 
151  template <typename Prod>
152  struct AuxProductRatio<Prod, false> {
153  typedef RATIO_S(typename Prod::AB, typename Prod::C) type;
154  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
155  return type(a * b, c);
156  }
157  };
158 
159  template <typename F, typename G, typename H>
160  struct RatioP1 {
161  struct prod0 {
162  typedef F A;
163  typedef G B;
164  typedef H C;
165  typedef PROD_S(A, B) AB;
166  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
167  inline static const B& b(const F& f, const G& g, const H& h) { return g; }
168  inline static const C& c(const F& f, const G& g, const H& h) { return h; }
169  enum { value = false };
170  };
171  struct prod1 {
172  typedef F A;
173  typedef H B;
174  typedef G C;
175  typedef RATIO_S(A, B) base;
176  typedef RATIO(A, B) AB;
177  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
178  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
179  inline static const C& c(const F& f, const G& g, const H& h) { return g; }
181  };
182  struct prod2 {
183  typedef G A;
184  typedef H B;
185  typedef F C;
186  typedef RATIO_S(A, B) base;
187  typedef RATIO(A, B) AB;
188  inline static const A& a(const F& f, const G& g, const H& h) { return g; }
189  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
190  inline static const C& c(const F& f, const G& g, const H& h) { return f; }
192  };
193 
196  inline static type combine(const PROD_S(F, G) & fg, const H& h) {
197  const F& f = fg._1;
198  const G& g = fg._2;
199  const typename prod::A& a = prod::a(f, g, h);
200  const typename prod::B& b = prod::b(f, g, h);
201  const typename prod::C& c = prod::c(f, g, h);
203  }
204  };
205 
206  // simplify c / ( a * b )
207  // try ( c / a ) / b and ( c / b ) / a, otherwise leave c / ( a * b )
208 
209  template <typename Prod, bool simplify = Prod::value>
211  typedef RATIO(typename Prod::AB, typename Prod::C) type;
212  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
213  return (b / a) / c;
214  }
215  };
216 
217  template <typename Prod>
218  struct AuxProductRatio2<Prod, false> {
219  typedef RATIO_S(typename Prod::C, typename Prod::AB) type;
220  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
221  return type(c, a * b);
222  }
223  };
224 
225  template <typename F, typename G, typename H>
226  struct RatioP2 {
227  struct prod0 {
228  typedef F A;
229  typedef G B;
230  typedef H C;
231  typedef PROD_S(A, B) AB;
232  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
233  inline static const B& b(const F& f, const G& g, const H& h) { return g; }
234  inline static const C& c(const F& f, const G& g, const H& h) { return h; }
235  enum { value = false };
236  };
237  struct prod1 {
238  typedef F A;
239  typedef H B;
240  typedef G C;
241  typedef RATIO_S(B, A) base;
242  typedef RATIO(B, A) AB;
243  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
244  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
245  inline static const C& c(const F& f, const G& g, const H& h) { return g; }
247  };
248  struct prod2 {
249  typedef G A;
250  typedef H B;
251  typedef F C;
252  typedef RATIO_S(B, A) base;
253  typedef RATIO(B, A) AB;
254  inline static const A& a(const F& f, const G& g, const H& h) { return g; }
255  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
256  inline static const C& c(const F& f, const G& g, const H& h) { return f; }
258  };
259 
262  inline static type combine(const H& h, const PROD_S(F, G) & fg) {
263  const F& f = fg._1;
264  const G& g = fg._2;
265  const typename prod::A& a = prod::a(f, g, h);
266  const typename prod::B& b = prod::b(f, g, h);
267  const typename prod::C& c = prod::c(f, g, h);
269  }
270  };
271 
272  TEMPL(T3) struct Ratio<PROD_S(A, B), C> : public RatioP1<A, B, C> {};
273 
274  TEMPL(N1T2) struct Ratio<PROD_S(A, B), NUM(n)> : public RatioP1<A, B, NUM(n)> {};
275 
276  TEMPL(T3) struct Ratio<C, PROD_S(A, B)> : public RatioP2<A, B, C> {};
277 
278  TEMPL(T4) struct Ratio<PROD_S(C, D), PROD_S(A, B)> : public RatioP2<A, B, PROD_S(C, D)> {};
279 
280  // simplify ( a + b ) / c trying to simplify ( a / c ) and ( b / c )
281  template <TYPT3, bool simplify = false>
282  struct AuxSumRatio {
283  typedef RATIO_S(SUM_S(A, B), C) type;
284  COMBINE(SUM_S(A, B), C, type(_1, _2));
285  };
286 
287  TEMPL(T3) struct AuxSumRatio<A, B, C, true> {
288  typedef SUM(RATIO(A, C), RATIO(B, C)) type;
289  COMBINE(SUM_S(A, B), C, (_1._1 / _2) + (_1._2 / _2));
290  };
291 
292  TEMPL(T3) struct RatioSimpl {
293  struct ratio1 {
294  typedef RATIO_S(A, C) base;
295  typedef RATIO(A, C) type;
297  };
298  struct ratio2 {
299  typedef RATIO_S(B, C) base;
300  typedef RATIO(B, C) type;
302  };
304  typedef typename aux::type type;
305  COMBINE(SUM_S(A, B), C, aux::combine(_1, _2));
306  };
307 
308  TEMPL(T3) struct Ratio<SUM_S(A, B), C> : public RatioSimpl<A, B, C> {};
309 
310  TEMPL(T4) struct Ratio<SUM_S(A, B), PROD_S(C, D)> : public RatioSimpl<A, B, PROD_S(C, D)> {};
311 
312  TEMPL(N1T2) struct Ratio<SUM_S(A, B), NUM(n)> : public RatioSimpl<A, B, NUM(n)> {};
313 
314 } // namespace funct
315 
317 
318 #endif
funct::RatioP2::prod0::AB
ProductStruct< A, B > AB
Definition: SimplifyRatio.h:231
class-composition.H
H
Definition: class-composition.py:31
funct::DecomposeProduct
Definition: DecomposeProduct.h:8
SUM
#define SUM(A, B)
Definition: Simplify_begin.h:52
funct::RatioP2::prod1::A
F A
Definition: SimplifyRatio.h:238
TYPN2T2
#define TYPN2T2
Definition: Simplify_begin.h:19
Product.h
TYPN1T1
#define TYPN1T1
Definition: Simplify_begin.h:16
funct::AuxProductRatio2< Prod, false >::type
RatioStruct< typename Prod::C, typename Prod::AB > type
Definition: SimplifyRatio.h:219
POWER_S
#define POWER_S(A, B)
Definition: Simplify_begin.h:41
funct::RatioP1::prod2::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:188
funct::RatioSimpl::aux
AuxSumRatio< A, B, C, ratio1::value or ratio2::value > aux
Definition: SimplifyRatio.h:303
funct::RatioP2::prod2::base
RatioStruct< B, A > base
Definition: SimplifyRatio.h:252
funct::false
false
Definition: Factorize.h:34
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
funct::RatioP2::prod0::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:233
funct::RatioP2::prod2::C
F C
Definition: SimplifyRatio.h:251
funct::RatioP2::prod0::A
F A
Definition: SimplifyRatio.h:228
Ratio.h
Fraction.h
funct::RatioP1::prod1::C
G C
Definition: SimplifyRatio.h:174
funct::PROD_S
PROD_S(B, C)>
Definition: Factorize.h:114
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
funct::AuxProductRatio2< Prod, false >::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:220
funct::B
TEMPL(T2) struct Divides B
Definition: Factorize.h:29
RATIO_RULE
#define RATIO_RULE(TMPL, T1, T2, RES, COMB)
Definition: Simplify_begin.h:102
funct::RatioP1::prod1
Definition: SimplifyRatio.h:171
DecomposePower.h
funct::RatioP2::prod2::AB
Ratio< B, A >::type AB
Definition: SimplifyRatio.h:253
funct::RatioP1::prod1::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:179
h
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
Definition: L1TUtmAlgorithmRcd.h:4
funct::DIFF
typedef DIFF(PROD(A, B1), PRIMIT(X, PROD(A1, B1))) type
funct::RatioP1
Definition: SimplifyRatio.h:160
RATIO_S
#define RATIO_S(A, B)
Definition: Simplify_begin.h:40
TYPT4
#define TYPT4
Definition: Simplify_begin.h:9
funct::RatioP2::prod1::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:245
funct::RatioSimpl::ratio1::base
RatioStruct< A, C > base
Definition: SimplifyRatio.h:294
funct::SimplifyRatioSum
Definition: SimplifyRatio.h:87
funct::RatioP2::prod2::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:255
funct::AuxProductRatio< Prod, false >::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:154
funct::RatioSimpl::type
aux::type type
Definition: SimplifyRatio.h:304
funct::RatioP1::prod1::A
F A
Definition: SimplifyRatio.h:172
Power.h
callgraph.G
G
Definition: callgraph.py:13
funct::ProductStruct
Definition: Product.h:7
funct::C
C
Definition: Factorize.h:133
funct::RatioSimpl::ratio2
Definition: SimplifyRatio.h:298
funct::AuxProductRatio
Definition: SimplifyRatio.h:144
funct::Ratio
Definition: Ratio.h:18
funct::RatioP2::prod2::B
H B
Definition: SimplifyRatio.h:250
funct::RatioP1::prod0::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:167
funct::RatioP1::prod1::B
H B
Definition: SimplifyRatio.h:173
funct::RatioP1::prod0::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:168
TYPT1
#define TYPT1
Definition: Simplify_begin.h:6
funct::RatioP2::prod1::AB
Ratio< B, A >::type AB
Definition: SimplifyRatio.h:242
funct::RatioP1::prod0::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:166
funct::RatioP2::prod2::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:254
funct::POWER
typedef POWER(A, NUM(n)) arg
MINUS
#define MINUS(A)
Definition: Simplify_begin.h:54
funct::RatioP2::prod0::C
H C
Definition: SimplifyRatio.h:230
F
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
TYPT2
#define TYPT2
Definition: Simplify_begin.h:7
funct::RatioP1::prod0
Definition: SimplifyRatio.h:161
RATIO
#define RATIO(A, B)
Definition: Simplify_begin.h:56
funct::RatioP2
Definition: SimplifyRatio.h:226
funct::num
const Numerical< n > & num()
Definition: Numerical.h:18
funct::AuxProductRatio< Prod, false >::type
RatioStruct< typename Prod::AB, typename Prod::C > type
Definition: SimplifyRatio.h:153
funct::AuxProductRatio::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:146
funct::PowerStruct
Definition: Power.h:8
funct::RatioP1::prod0::AB
ProductStruct< A, B > AB
Definition: SimplifyRatio.h:165
funct::RatioP1::type
AuxProductRatio< prod >::type type
Definition: SimplifyRatio.h:195
TYPN1
#define TYPN1
Definition: Simplify_begin.h:11
funct::RatioP2::prod0::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:234
funct::RatioP1::prod0::A
F A
Definition: SimplifyRatio.h:162
funct::SimplifyPowerRatio< A, B, C, false >::type
Power< A, typename Difference< B, C >::type >::type type
Definition: SimplifyRatio.h:112
funct::RatioP1::prod1::base
RatioStruct< A, B > base
Definition: SimplifyRatio.h:175
funct::RatioSimpl::ratio1
Definition: SimplifyRatio.h:293
funct::m
m
Definition: Factorize.h:50
SUM_S
#define SUM_S(A, B)
Definition: Simplify_begin.h:37
h
funct::RatioSimpl
Definition: SimplifyRatio.h:292
funct::RatioP1::prod
::boost::mpl::if_< prod1, prod1, typename ::boost::mpl::if_< prod2, prod2, prod0 >::type >::type prod
Definition: SimplifyRatio.h:194
b
double b
Definition: hdecay.h:118
funct::RatioP2::prod2
Definition: SimplifyRatio.h:248
funct::RatioSimpl::ratio2::base
RatioStruct< B, C > base
Definition: SimplifyRatio.h:299
funct::RatioSimpl::ratio1::type
Ratio< A, C >::type type
Definition: SimplifyRatio.h:295
funct::true
true
Definition: Factorize.h:173
funct::SimplifyPowerRatio
Definition: SimplifyRatio.h:101
ParametricTrait.h
funct::combine
static type combine(const A &_1, const B &_2)
Definition: Factorize.h:176
a
double a
Definition: hdecay.h:119
funct::AuxProductRatio::type
Product< typename Prod::AB, typename Prod::C >::type type
Definition: SimplifyRatio.h:145
funct::AuxProductRatio2::type
Ratio< typename Prod::AB, typename Prod::C >::type type
Definition: SimplifyRatio.h:211
funct::AuxSumRatio
Definition: SimplifyRatio.h:282
funct::SimplifyNegativeRatio< n, A, false >::type
Minus< typename Ratio< A, Numerical< -n > >::type >::type type
Definition: SimplifyRatio.h:37
funct::RatioP2::prod1::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:244
funct::SimplifyPowerRatio< A, B, C, false >::combine
static type combine(const arg1 &_1, const arg2 &_2)
Definition: SimplifyRatio.h:113
funct::RatioP1::prod2::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:189
funct::MINUS_S
typedef MINUS_S(A) arg
A
funct::RatioP2::prod1::B
H B
Definition: SimplifyRatio.h:239
funct::SimplifyPowerRatio::type
RatioStruct< arg1, arg2 > type
Definition: SimplifyRatio.h:104
funct::SimplifyRatioSum::type
RatioStruct< typename Sum< A, B >::type, typename Sum< B, A >::type > type
Definition: SimplifyRatio.h:88
funct::RatioP2::prod1::C
G C
Definition: SimplifyRatio.h:240
funct::type
arg type
Definition: Factorize.h:37
value
Definition: value.py:1
funct::SimplifyPowerRatio::arg1
Power< A, B >::type arg1
Definition: SimplifyRatio.h:102
funct::TEMPL
TEMPL(T1) struct Divides0
Definition: Factorize.h:20
funct::RatioP2::prod2::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:256
funct::RatioP2::prod0::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:232
funct::SimplifyPowerRatio< A, B, C, false >::arg2
Power< A, C >::type arg2
Definition: SimplifyRatio.h:111
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
funct::RatioP2::prod2::A
G A
Definition: SimplifyRatio.h:249
funct::RatioP2::combine
static type combine(const H &h, const ProductStruct< F, G > &fg)
Definition: SimplifyRatio.h:262
funct::RatioP2::type
AuxProductRatio2< prod >::type type
Definition: SimplifyRatio.h:261
funct::RatioP2::prod1
Definition: SimplifyRatio.h:237
TYPN1T2
#define TYPN1T2
Definition: Simplify_begin.h:17
funct::RatioP2::prod1::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:243
Simplify_end.h
funct::RatioP1::prod2::A
G A
Definition: SimplifyRatio.h:183
TtFullHadDaughter::B
static const std::string B
Definition: TtFullHadronicEvent.h:9
funct::DecomposePower
Definition: DecomposePower.h:8
MaterialEffects_cfi.A
A
Definition: MaterialEffects_cfi.py:11
type
type
Definition: HCALResponse.h:21
funct::RatioSimpl::ratio2::type
Ratio< B, C >::type type
Definition: SimplifyRatio.h:300
funct::RatioP1::prod2::C
F C
Definition: SimplifyRatio.h:185
funct::RatioP1::prod1::AB
Ratio< A, B >::type AB
Definition: SimplifyRatio.h:176
funct::RatioP1::prod2::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:190
funct::RatioP1::prod2::AB
Ratio< A, B >::type AB
Definition: SimplifyRatio.h:187
gen::C
C
Definition: PomwigHadronizer.cc:76
funct::RatioP1::prod2::B
H B
Definition: SimplifyRatio.h:184
relativeConstraints.value
value
Definition: relativeConstraints.py:53
funct::NUM
PROD_S(A, B)> NUM(n))
Definition: Factorize.h:87
COMBINE
#define COMBINE(A, B, RES)
Definition: Simplify_begin.h:70
funct::RatioP2::prod
::boost::mpl::if_< prod1, prod1, typename ::boost::mpl::if_< prod2, prod2, prod0 >::type >::type prod
Definition: SimplifyRatio.h:260
TYPT3
#define TYPT3
Definition: Simplify_begin.h:8
funct::RatioP1::prod1::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:178
funct::RatioP1::combine
static type combine(const ProductStruct< F, G > &fg, const H &h)
Definition: SimplifyRatio.h:196
funct::RatioStruct
Definition: Ratio.h:7
funct::AuxSumRatio::type
RatioStruct< SumStruct< A, B >, C > type
Definition: SimplifyRatio.h:283
funct::SimplifyPowerRatio< A, B, C, false >::arg1
Power< A, B >::type arg1
Definition: SimplifyRatio.h:110
funct::SimplifyPowerRatio::arg2
Power< A, C >::type arg2
Definition: SimplifyRatio.h:103
Minus.h
funct::Numerical
Definition: Numerical.h:7
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
Simplify_begin.h
funct::SimplifyNegativeRatio::type
RatioStruct< A, Numerical< n > > type
Definition: SimplifyRatio.h:31
funct::AuxProductRatio2
Definition: SimplifyRatio.h:210
funct::RatioP1::prod1::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:177
funct::RatioP2::prod0
Definition: SimplifyRatio.h:227
funct::RatioP1::prod2
Definition: SimplifyRatio.h:182
funct::AuxProductRatio2::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:212
funct::RatioP2::prod0::B
G B
Definition: SimplifyRatio.h:229
funct::SimplifyNegativeRatio
Definition: SimplifyRatio.h:30
funct::AuxSumRatio< A, B, C, true >::type
Sum< typename Ratio< A, C >::type, typename Ratio< B, C >::type >::type type
Definition: SimplifyRatio.h:288
funct::PROD
typedef PROD(F, SUM(RATIO(A, F), RATIO(B, F))) type
funct::RatioP1::prod2::base
RatioStruct< A, B > base
Definition: SimplifyRatio.h:186
funct::RatioP1::prod0::C
H C
Definition: SimplifyRatio.h:164
funct
Definition: Abs.h:5
FRACT
#define FRACT(N, M)
Definition: Simplify_begin.h:36
g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
funct::RatioP2::prod1::base
RatioStruct< B, A > base
Definition: SimplifyRatio.h:241
funct::RatioP1::prod0::B
G B
Definition: SimplifyRatio.h:163