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 <type_traits>
15 
16 namespace funct {
17 
18  // 0 / a = 0
19  RATIO_RULE(TYPT1, NUM(0), A, NUM(0), num<0>());
20 
21  // a / 1 = a
22  RATIO_RULE(TYPT1, A, NUM(1), A, _1);
23 
24  // ( a * b )/ 1 = a * b
25  RATIO_RULE(TYPT2, PROD_S(A, B), NUM(1), PROD(A, B), _1);
26 
27  // a / ( -n ) = - ( a / n )
28  template <int n, typename A, bool positive = (n >= 0)>
30  typedef RATIO_S(A, NUM(n)) type;
31  COMBINE(A, NUM(n), type(_1, _2));
32  };
33 
34  TEMPL(N1T1)
36  typedef MINUS(RATIO(A, NUM(-n))) type;
37  COMBINE(A, NUM(n), -(_1 / num<-n>()));
38  };
39 
40  TEMPL(N1T1) struct Ratio<A, NUM(n)> : public SimplifyNegativeRatio<n, A> {};
41 
42  // ( -a ) / b = - ( a / b )
43  RATIO_RULE(TYPT2, MINUS_S(A), B, MINUS(RATIO(A, B)), -(_1._ / _2));
44 
45  // ( -a ) / n = - ( a / n )
46  RATIO_RULE(TYPN1T1, MINUS_S(A), NUM(n), MINUS(RATIO(A, NUM(n))), -(_1._ / _2));
47 
48  //TEMPL( N1T2 struct Ratio<PROD_S( A, B ), NUM( n )> :
49  // public SimplifyNegativeRatio<n, PROD_S( A, B )> { };
50 
51  // n / ( m * a ) = (n/m) * a
52  /* WRONG!!
53  RATIO_RULE(TYPN2T1, NUM(n), PROD_S(NUM(m), A), \
54  PROD(FRACT(n, m), A), (fract<n, m>() * _2._2));
55  */
56  // ( a / b ) / c = a / ( b * c )
57  RATIO_RULE(TYPT3, RATIO_S(A, B), C, RATIO(A, PROD(B, C)), _1._1 / (_1._2 * _2));
58 
59  // ( a / b ) / n = a / ( n * b )
60  RATIO_RULE(TYPN1T2, RATIO_S(A, B), NUM(n), RATIO(A, PROD(NUM(n), B)), _1._1 / (_2 * _1._2));
61 
62  // ( a / b ) / ( c * d ) = a / ( b * c * d )
63  RATIO_RULE(TYPT4, RATIO_S(A, B), PROD_S(C, D), RATIO(A, PROD(PROD(B, C), D)), _1._1 / (_1._2 * _2));
64 
65  // ( a * b ) / ( c / d ) = ( a * b * d ) / c
66  RATIO_RULE(TYPT4, PROD_S(A, B), RATIO_S(C, D), RATIO(PROD(PROD(A, B), D), C), (_1 * _2._2) / _2._1);
67 
68  // ( n * a ) / ( m * b ) = ( n/m ) ( a / b )
70  PROD_S(NUM(n), A),
71  PROD_S(NUM(m), B),
72  PROD_S(FRACT(n, m), RATIO(A, B)),
73  (PROD_S(FRACT(n, m), RATIO(A, B))((fract<n, m>()), (_1._2 / _2._2))));
74 
75  // a / ( b / c ) = a * c / b
76  RATIO_RULE(TYPT3, A, RATIO_S(B, C), RATIO(PROD(A, C), B), (_1 * _2._2) / _2._1);
77 
78  // ( a + b ) / ( c / d ) = ( a + b ) * d / c
79  RATIO_RULE(TYPT4, SUM_S(A, B), RATIO_S(C, D), RATIO(PROD(SUM(A, B), D), C), (_1 * _2._2) / _2._1);
80 
81  // ( a / b ) / ( c / d )= a * d / ( b * c )
82  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));
83 
84  // ( a + b ) / ( b + a ) = 1
85  template <TYPT2, bool parametric = (Parametric<A>::value == 1) || (Parametric<B>::value == 1)>
87  typedef RATIO_S(SUM(A, B), SUM(B, A)) type;
88  COMBINE(SUM(A, B), SUM(B, A), type(_1, _2));
89  };
90 
91  TEMPL(T2) struct SimplifyRatioSum<A, B, false> {
92  typedef NUM(1) type;
93  COMBINE(SUM(A, B), SUM(B, A), num<1>());
94  };
95 
96  TEMPL(T2) struct Ratio<SUM_S(A, B), SUM_S(B, A)> : public SimplifyRatioSum<A, B> {};
97 
98  // a^b / a^c => a^( b - c)
99  template <TYPT3, bool parametric = (Parametric<A>::value == 1)>
101  typedef POWER(A, B) arg1;
102  typedef POWER(A, C) arg2;
103  typedef RATIO_S(arg1, arg2) type;
104  COMBINE(arg1, arg2, type(_1, _2));
105  };
106 
107  TEMPL(T3)
108  struct SimplifyPowerRatio<A, B, C, false> {
109  typedef POWER(A, B) arg1;
110  typedef POWER(A, C) arg2;
111  typedef POWER(A, DIFF(B, C)) type;
112  inline static type combine(const arg1& _1, const arg2& _2) {
115  }
116  };
117 
118  TEMPL(T3) struct Ratio<POWER_S(A, B), POWER_S(A, C)> : public SimplifyPowerRatio<A, B, C> {};
119 
120  TEMPL(T2) struct Ratio<POWER_S(A, B), POWER_S(A, B)> : public SimplifyPowerRatio<A, B, B> {};
121 
122  TEMPL(T2) struct Ratio<A, POWER_S(A, B)> : public SimplifyPowerRatio<A, NUM(1), B> {};
123 
124  TEMPL(N1T1) struct Ratio<A, POWER_S(A, NUM(n))> : public SimplifyPowerRatio<A, NUM(1), NUM(n)> {};
125 
126  TEMPL(T2) struct Ratio<POWER_S(A, B), A> : public SimplifyPowerRatio<A, B, NUM(1)> {};
127 
128  TEMPL(N1T1) struct Ratio<POWER_S(A, NUM(n)), A> : public SimplifyPowerRatio<A, NUM(n), NUM(1)> {};
129 
130  TEMPL(T1) struct Ratio<A, A> : public SimplifyPowerRatio<A, NUM(1), NUM(1)> {};
131 
132  TEMPL(T2) struct Ratio<PROD_S(A, B), PROD_S(A, B)> : public SimplifyPowerRatio<PROD_S(A, B), NUM(1), NUM(1)> {};
133 
134  TEMPL(N1T1)
135  struct Ratio<PROD_S(NUM(n), A), PROD_S(NUM(n), A)> : public SimplifyPowerRatio<PROD_S(NUM(n), A), NUM(1), NUM(1)> {};
136 
137  RATIO_RULE(TYPN1, NUM(n), NUM(n), NUM(1), num<1>());
138 
139  // simplify ( f * g ) / h
140  // try ( f / h ) * g and ( g / h ) * f, otherwise leave ( f * g ) / h
141 
142  template <typename Prod, bool simplify = Prod::value>
144  typedef PROD(typename Prod::AB, typename Prod::C) type;
145  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
146  return (a / b) * c;
147  }
148  };
149 
150  template <typename Prod>
151  struct AuxProductRatio<Prod, false> {
152  typedef RATIO_S(typename Prod::AB, typename Prod::C) type;
153  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
154  return type(a * b, c);
155  }
156  };
157 
158  template <typename F, typename G, typename H>
159  struct RatioP1 {
160  struct prod0 {
161  typedef F A;
162  typedef G B;
163  typedef H C;
164  typedef PROD_S(A, B) AB;
165  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
166  inline static const B& b(const F& f, const G& g, const H& h) { return g; }
167  inline static const C& c(const F& f, const G& g, const H& h) { return h; }
168  enum { value = false };
169  };
170  struct prod1 {
171  typedef F A;
172  typedef H B;
173  typedef G C;
174  typedef RATIO_S(A, B) base;
175  typedef RATIO(A, B) AB;
176  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
177  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
178  inline static const C& c(const F& f, const G& g, const H& h) { return g; }
180  };
181  struct prod2 {
182  typedef G A;
183  typedef H B;
184  typedef F C;
185  typedef RATIO_S(A, B) base;
186  typedef RATIO(A, B) AB;
187  inline static const A& a(const F& f, const G& g, const H& h) { return g; }
188  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
189  inline static const C& c(const F& f, const G& g, const H& h) { return f; }
191  };
192 
193  typedef
197  inline static type combine(const PROD_S(F, G) & fg, const H& h) {
198  const F& f = fg._1;
199  const G& g = fg._2;
200  const typename prod::A& a = prod::a(f, g, h);
201  const typename prod::B& b = prod::b(f, g, h);
202  const typename prod::C& c = prod::c(f, g, h);
204  }
205  };
206 
207  // simplify c / ( a * b )
208  // try ( c / a ) / b and ( c / b ) / a, otherwise leave c / ( a * b )
209 
210  template <typename Prod, bool simplify = Prod::value>
212  typedef RATIO(typename Prod::AB, typename Prod::C) type;
213  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
214  return (b / a) / c;
215  }
216  };
217 
218  template <typename Prod>
219  struct AuxProductRatio2<Prod, false> {
220  typedef RATIO_S(typename Prod::C, typename Prod::AB) type;
221  inline static type combine(const typename Prod::A& a, const typename Prod::B& b, const typename Prod::C& c) {
222  return type(c, a * b);
223  }
224  };
225 
226  template <typename F, typename G, typename H>
227  struct RatioP2 {
228  struct prod0 {
229  typedef F A;
230  typedef G B;
231  typedef H C;
232  typedef PROD_S(A, B) AB;
233  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
234  inline static const B& b(const F& f, const G& g, const H& h) { return g; }
235  inline static const C& c(const F& f, const G& g, const H& h) { return h; }
236  enum { value = false };
237  };
238  struct prod1 {
239  typedef F A;
240  typedef H B;
241  typedef G C;
242  typedef RATIO_S(B, A) base;
243  typedef RATIO(B, A) AB;
244  inline static const A& a(const F& f, const G& g, const H& h) { return f; }
245  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
246  inline static const C& c(const F& f, const G& g, const H& h) { return g; }
248  };
249  struct prod2 {
250  typedef G A;
251  typedef H B;
252  typedef F C;
253  typedef RATIO_S(B, A) base;
254  typedef RATIO(B, A) AB;
255  inline static const A& a(const F& f, const G& g, const H& h) { return g; }
256  inline static const B& b(const F& f, const G& g, const H& h) { return h; }
257  inline static const C& c(const F& f, const G& g, const H& h) { return f; }
259  };
260 
261  typedef
265  inline static type combine(const H& h, const PROD_S(F, G) & fg) {
266  const F& f = fg._1;
267  const G& g = fg._2;
268  const typename prod::A& a = prod::a(f, g, h);
269  const typename prod::B& b = prod::b(f, g, h);
270  const typename prod::C& c = prod::c(f, g, h);
272  }
273  };
274 
275  TEMPL(T3) struct Ratio<PROD_S(A, B), C> : public RatioP1<A, B, C> {};
276 
277  TEMPL(N1T2) struct Ratio<PROD_S(A, B), NUM(n)> : public RatioP1<A, B, NUM(n)> {};
278 
279  TEMPL(T3) struct Ratio<C, PROD_S(A, B)> : public RatioP2<A, B, C> {};
280 
281  TEMPL(T4) struct Ratio<PROD_S(C, D), PROD_S(A, B)> : public RatioP2<A, B, PROD_S(C, D)> {};
282 
283  // simplify ( a + b ) / c trying to simplify ( a / c ) and ( b / c )
284  template <TYPT3, bool simplify = false>
285  struct AuxSumRatio {
286  typedef RATIO_S(SUM_S(A, B), C) type;
287  COMBINE(SUM_S(A, B), C, type(_1, _2));
288  };
289 
290  TEMPL(T3) struct AuxSumRatio<A, B, C, true> {
291  typedef SUM(RATIO(A, C), RATIO(B, C)) type;
292  COMBINE(SUM_S(A, B), C, (_1._1 / _2) + (_1._2 / _2));
293  };
294 
295  TEMPL(T3) struct RatioSimpl {
296  struct ratio1 {
297  typedef RATIO_S(A, C) base;
298  typedef RATIO(A, C) type;
300  };
301  struct ratio2 {
302  typedef RATIO_S(B, C) base;
303  typedef RATIO(B, C) type;
305  };
307  typedef typename aux::type type;
308  COMBINE(SUM_S(A, B), C, aux::combine(_1, _2));
309  };
310 
311  TEMPL(T3) struct Ratio<SUM_S(A, B), C> : public RatioSimpl<A, B, C> {};
312 
313  TEMPL(T4) struct Ratio<SUM_S(A, B), PROD_S(C, D)> : public RatioSimpl<A, B, PROD_S(C, D)> {};
314 
315  TEMPL(N1T2) struct Ratio<SUM_S(A, B), NUM(n)> : public RatioSimpl<A, B, NUM(n)> {};
316 
317 } // namespace funct
318 
320 
321 #endif
funct::RatioP2::prod0::AB
ProductStruct< A, B > AB
Definition: SimplifyRatio.h:232
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:239
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:220
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:187
funct::RatioSimpl::aux
AuxSumRatio< A, B, C, ratio1::value or ratio2::value > aux
Definition: SimplifyRatio.h:306
funct::RatioP2::prod2::base
RatioStruct< B, A > base
Definition: SimplifyRatio.h:253
funct::false
false
Definition: Factorize.h:29
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:234
funct::RatioP2::prod2::C
F C
Definition: SimplifyRatio.h:252
funct::RatioP2::prod0::A
F A
Definition: SimplifyRatio.h:229
Ratio.h
Fraction.h
funct::RatioP1::prod1::C
G C
Definition: SimplifyRatio.h:173
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:221
funct::B
TEMPL(T2) struct Divides B
Definition: Factorize.h:24
RATIO_RULE
#define RATIO_RULE(TMPL, T1, T2, RES, COMB)
Definition: Simplify_begin.h:102
funct::RatioP1::prod1
Definition: SimplifyRatio.h:170
DecomposePower.h
funct::RatioP2::prod2::AB
Ratio< B, A >::type AB
Definition: SimplifyRatio.h:254
funct::RatioP1::prod1::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:178
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:159
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:246
funct::RatioSimpl::ratio1::base
RatioStruct< A, C > base
Definition: SimplifyRatio.h:297
funct::SimplifyRatioSum
Definition: SimplifyRatio.h:86
funct::RatioP2::prod2::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:256
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:153
funct::RatioSimpl::type
aux::type type
Definition: SimplifyRatio.h:307
funct::RatioP1::prod1::A
F A
Definition: SimplifyRatio.h:171
Power.h
callgraph.G
G
Definition: callgraph.py:17
funct::ProductStruct
Definition: Product.h:6
funct::C
C
Definition: Factorize.h:133
funct::RatioSimpl::ratio2
Definition: SimplifyRatio.h:301
funct::AuxProductRatio
Definition: SimplifyRatio.h:143
funct::Ratio
Definition: Ratio.h:17
funct::RatioP2::prod2::B
H B
Definition: SimplifyRatio.h:251
funct::RatioP1::prod0::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:166
funct::RatioP1::prod1::B
H B
Definition: SimplifyRatio.h:172
funct::RatioP1::prod0::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:167
TYPT1
#define TYPT1
Definition: Simplify_begin.h:6
funct::RatioP2::prod1::AB
Ratio< B, A >::type AB
Definition: SimplifyRatio.h:243
funct::RatioP1::prod0::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:165
funct::RatioP2::prod2::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:255
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:231
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:160
RATIO
#define RATIO(A, B)
Definition: Simplify_begin.h:56
funct::RatioP2
Definition: SimplifyRatio.h:227
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:152
funct::AuxProductRatio::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:145
funct::PowerStruct
Definition: Power.h:7
funct::RatioP1::prod0::AB
ProductStruct< A, B > AB
Definition: SimplifyRatio.h:164
funct::RatioP1::type
AuxProductRatio< prod >::type type
Definition: SimplifyRatio.h:196
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:235
funct::RatioP1::prod0::A
F A
Definition: SimplifyRatio.h:161
funct::SimplifyPowerRatio< A, B, C, false >::type
Power< A, typename Difference< B, C >::type >::type type
Definition: SimplifyRatio.h:111
funct::RatioP1::prod1::base
RatioStruct< A, B > base
Definition: SimplifyRatio.h:174
funct::RatioSimpl::ratio1
Definition: SimplifyRatio.h:296
funct::m
m
Definition: Factorize.h:45
SUM_S
#define SUM_S(A, B)
Definition: Simplify_begin.h:37
h
funct::RatioSimpl
Definition: SimplifyRatio.h:295
b
double b
Definition: hdecay.h:118
funct::RatioP2::prod2
Definition: SimplifyRatio.h:249
funct::RatioSimpl::ratio2::base
RatioStruct< B, C > base
Definition: SimplifyRatio.h:302
funct::RatioSimpl::ratio1::type
Ratio< A, C >::type type
Definition: SimplifyRatio.h:298
funct::true
true
Definition: Factorize.h:173
funct::SimplifyPowerRatio
Definition: SimplifyRatio.h:100
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:144
funct::RatioP1::prod
std::conditional< prod1::value, prod1, typename std::conditional< prod2::value, prod2, prod0 >::type >::type prod
Definition: SimplifyRatio.h:195
funct::AuxProductRatio2::type
Ratio< typename Prod::AB, typename Prod::C >::type type
Definition: SimplifyRatio.h:212
funct::AuxSumRatio
Definition: SimplifyRatio.h:285
funct::SimplifyNegativeRatio< n, A, false >::type
Minus< typename Ratio< A, Numerical< -n > >::type >::type type
Definition: SimplifyRatio.h:36
funct::RatioP2::prod1::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:245
funct::RatioP2::prod
std::conditional< prod1::value, prod1, typename std::conditional< prod2::value, prod2, prod0 >::type >::type prod
Definition: SimplifyRatio.h:263
funct::SimplifyPowerRatio< A, B, C, false >::combine
static type combine(const arg1 &_1, const arg2 &_2)
Definition: SimplifyRatio.h:112
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
funct::RatioP1::prod2::b
static const B & b(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:188
funct::MINUS_S
typedef MINUS_S(A) arg
A
funct::RatioP2::prod1::B
H B
Definition: SimplifyRatio.h:240
funct::SimplifyPowerRatio::type
RatioStruct< arg1, arg2 > type
Definition: SimplifyRatio.h:103
funct::SimplifyRatioSum::type
RatioStruct< typename Sum< A, B >::type, typename Sum< B, A >::type > type
Definition: SimplifyRatio.h:87
funct::RatioP2::prod1::C
G C
Definition: SimplifyRatio.h:241
funct::type
arg type
Definition: Factorize.h:32
value
Definition: value.py:1
funct::SimplifyPowerRatio::arg1
Power< A, B >::type arg1
Definition: SimplifyRatio.h:101
funct::TEMPL
TEMPL(T1) struct Divides0
Definition: Factorize.h:15
funct::RatioP2::prod2::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:257
funct::RatioP2::prod0::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:233
funct::SimplifyPowerRatio< A, B, C, false >::arg2
Power< A, C >::type arg2
Definition: SimplifyRatio.h:110
funct::RatioP2::prod2::A
G A
Definition: SimplifyRatio.h:250
funct::RatioP2::combine
static type combine(const H &h, const ProductStruct< F, G > &fg)
Definition: SimplifyRatio.h:265
funct::RatioP2::type
AuxProductRatio2< prod >::type type
Definition: SimplifyRatio.h:264
funct::RatioP2::prod1
Definition: SimplifyRatio.h:238
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:244
Simplify_end.h
funct::RatioP1::prod2::A
G A
Definition: SimplifyRatio.h:182
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
funct::RatioSimpl::ratio2::type
Ratio< B, C >::type type
Definition: SimplifyRatio.h:303
funct::RatioP1::prod2::C
F C
Definition: SimplifyRatio.h:184
funct::RatioP1::prod1::AB
Ratio< A, B >::type AB
Definition: SimplifyRatio.h:175
funct::RatioP1::prod2::c
static const C & c(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:189
funct::RatioP1::prod2::AB
Ratio< A, B >::type AB
Definition: SimplifyRatio.h:186
gen::C
C
Definition: PomwigHadronizer.cc:78
funct::RatioP1::prod2::B
H B
Definition: SimplifyRatio.h:183
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
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:177
funct::RatioP1::combine
static type combine(const ProductStruct< F, G > &fg, const H &h)
Definition: SimplifyRatio.h:197
funct::RatioStruct
Definition: Ratio.h:6
funct::AuxSumRatio::type
RatioStruct< SumStruct< A, B >, C > type
Definition: SimplifyRatio.h:286
funct::SimplifyPowerRatio< A, B, C, false >::arg1
Power< A, B >::type arg1
Definition: SimplifyRatio.h:109
funct::SimplifyPowerRatio::arg2
Power< A, C >::type arg2
Definition: SimplifyRatio.h:102
Minus.h
funct::Numerical
Definition: Numerical.h:7
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
Simplify_begin.h
funct::SimplifyNegativeRatio::type
RatioStruct< A, Numerical< n > > type
Definition: SimplifyRatio.h:30
funct::AuxProductRatio2
Definition: SimplifyRatio.h:211
funct::RatioP1::prod1::a
static const A & a(const F &f, const G &g, const H &h)
Definition: SimplifyRatio.h:176
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:46
funct::RatioP2::prod0
Definition: SimplifyRatio.h:228
funct::RatioP1::prod2
Definition: SimplifyRatio.h:181
funct::AuxProductRatio2::combine
static type combine(const typename Prod::A &a, const typename Prod::B &b, const typename Prod::C &c)
Definition: SimplifyRatio.h:213
funct::RatioP2::prod0::B
G B
Definition: SimplifyRatio.h:230
funct::SimplifyNegativeRatio
Definition: SimplifyRatio.h:29
funct::AuxSumRatio< A, B, C, true >::type
Sum< typename Ratio< A, C >::type, typename Ratio< B, C >::type >::type type
Definition: SimplifyRatio.h:291
funct::PROD
typedef PROD(F, SUM(RATIO(A, F), RATIO(B, F))) type
funct::RatioP1::prod2::base
RatioStruct< A, B > base
Definition: SimplifyRatio.h:185
funct::RatioP1::prod0::C
H C
Definition: SimplifyRatio.h:163
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:242
funct::RatioP1::prod0::B
G B
Definition: SimplifyRatio.h:162