ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/FGolf/Tools/ScaleFactors.cc
Revision: 1.3
Committed: Tue May 29 01:53:25 2012 UTC (12 years, 11 months ago) by fgolf
Content type: text/plain
Branch: MAIN
Changes since 1.2: +37 -7 lines
Log Message:
add trigger efficiency model

File Contents

# Content
1 #include "ScaleFactors.h"
2 #include "CORE/CMS2.h"
3 #include "DileptonHypType.h"
4
5 float dileptonTagAndProbeScaleFactor(int hyp_idx)
6 {
7 float sf1 = tagAndProbeScaleFactor(cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx).pt(), cms2.hyp_lt_p4().at(hyp_idx).eta());
8 float sf2 = tagAndProbeScaleFactor(cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx).pt(), cms2.hyp_ll_p4().at(hyp_idx).eta());
9
10 return (sf1 * sf2);
11 }
12
13 float tagAndProbeScaleFactor(int id, float pt, float eta)
14 {
15 unsigned int aid = abs(id);
16 float feta = fabs(eta);
17
18 if (aid == 11) {
19 if (feta < .1479) {
20 if (pt < 40. && pt > 20.)
21 return 0.9989;
22 else if (pt > 40.)
23 return 0.9997;
24 else
25 return 0.;
26 }
27 else if (feta < 2.4) {
28 if (pt < 40. && pt > 20.)
29 return 1.0335;
30 else if (pt > 40.)
31 return 1.0114;
32 else
33 return 0.;
34 }
35 else return 0.;
36 }
37 else if (aid == 13) {
38 if (feta < .1479) {
39 if (pt < 40. && pt > 20.)
40 return 1.0116;
41 else if (pt > 40.)
42 return 1.0163;
43 else
44 return 0.;
45 }
46 else if (feta < 2.4) {
47 if (pt < 40. && pt > 20.)
48 return 0.9965;
49 else if (pt > 40.)
50 return 1.0114;
51 else
52 return 0.;
53 }
54 else return 0.;
55 }
56
57 return 0.;
58 }
59
60 float dilepTriggerScaleFactor(int hyp_idx)
61 {
62 double eff_1l = 0.;
63 double eff_1t = 0.;
64 double eff_2l = 0.;
65 double eff_2t = 0.;
66 double eff_z = 0.;
67
68 DileptonHypType hyp_type = hyp_typeToHypType(cms2.hyp_type().at(hyp_idx));
69
70 if (hyp_type == DILEPTON_EE || hyp_type == DILEPTON_MUMU) {
71 eff_1l = triggerScaleFactor(LeadDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
72 eff_1t = triggerScaleFactor(TrailDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
73 eff_2l = triggerScaleFactor(LeadDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
74 eff_2t = triggerScaleFactor(TrailDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
75 if (cms2.hyp_lt_p4().at(hyp_idx).pt() > cms2.hyp_ll_p4().at(hyp_idx).pt())
76 eff_z = triggerScaleFactor(DzDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
77 else
78 eff_z = triggerScaleFactor(DzDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
79
80 return (eff_1l * eff_2t + eff_1t * eff_2l - eff_1l * eff_2l) * eff_z;
81 }
82 else if (hyp_type == DILEPTON_EMU) {
83 eff_1l = triggerScaleFactor(LeadDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
84 eff_1t = triggerScaleFactor(TrailDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
85 eff_2l = triggerScaleFactor(LeadDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
86 eff_2t = triggerScaleFactor(TrailDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
87 if (abs(cms2.hyp_ll_id().at(hyp_idx)) == 13)
88 eff_z = triggerScaleFactor(DzDbl, cms2.hyp_ll_id().at(hyp_idx), cms2.hyp_ll_p4().at(hyp_idx));
89 else
90 eff_z = triggerScaleFactor(DzDbl, cms2.hyp_lt_id().at(hyp_idx), cms2.hyp_lt_p4().at(hyp_idx));
91
92 return (eff_1l * eff_2t + eff_1t * eff_2l - eff_1l * eff_2l) * sqrt(eff_z);
93 }
94 }
95
96 float triggerScaleFactor(enum TrigEffType trig_eff_type, int id, LorentzVector &p4)
97 {
98 unsigned int aid = abs(id);
99 float eta = fabs(p4.eta());
100 float pt = p4.pt();
101
102 if (aid == 11)
103 {
104 switch (trig_eff_type)
105 {
106 case DzDbl:
107 if (fabs(eta) < 0.000) return 0.;
108 if (fabs(eta) > 2.500) return 0.;
109
110 if (pt < 20.000) return 0.;
111 if (pt > 7000.000) return 0.;
112
113 if (fabs(eta) < 0.800000) {
114 if (pt < 22.500000) return 1.000;
115 else if (pt < 25.000000) return 1.000;
116 else if (pt < 27.500000) return 0.999;
117 else if (pt < 30.000000) return 1.000;
118 else if (pt < 35.000000) return 1.000;
119 else if (pt < 40.000000) return 1.000;
120 else if (pt < 50.000000) return 1.000;
121 else if (pt < 7000.000000) return 1.000;
122 }
123 else if (fabs(eta) < 1.479000) {
124 if (pt < 22.500000) return 1.000;
125 else if (pt < 25.000000) return 1.000;
126 else if (pt < 27.500000) return 0.996;
127 else if (pt < 30.000000) return 1.000;
128 else if (pt < 35.000000) return 1.000;
129 else if (pt < 40.000000) return 1.000;
130 else if (pt < 50.000000) return 0.999;
131 else if (pt < 7000.000000) return 1.000;
132 }
133 else if (fabs(eta) < 2.000000) {
134 if (pt < 22.500000) return 1.000;
135 else if (pt < 25.000000) return 1.000;
136 else if (pt < 27.500000) return 1.000;
137 else if (pt < 30.000000) return 0.997;
138 else if (pt < 35.000000) return 0.999;
139 else if (pt < 40.000000) return 0.999;
140 else if (pt < 50.000000) return 0.998;
141 else if (pt < 7000.000000) return 0.997;
142 }
143 else if (fabs(eta) < 2.500000) {
144 if (pt < 22.500000) return 0.974;
145 else if (pt < 25.000000) return 0.990;
146 else if (pt < 27.500000) return 0.994;
147 else if (pt < 30.000000) return 1.000;
148 else if (pt < 35.000000) return 0.993;
149 else if (pt < 40.000000) return 0.987;
150 else if (pt < 50.000000) return 0.989;
151 else if (pt < 7000.000000) return 0.988;
152 }
153 break;
154 case LeadDbl:
155 if (fabs(eta) < 0.000) return 0.;
156 if (fabs(eta) > 2.500) return 0.;
157
158 if (pt < 20.000) return 0.;
159 if (pt > 7000.000) return 0.;
160
161 if (fabs(eta) < 0.800000) {
162 if (pt < 22.500000) return 0.943;
163 else if (pt < 25.000000) return 0.936;
164 else if (pt < 27.500000) return 0.960;
165 else if (pt < 30.000000) return 0.967;
166 else if (pt < 35.000000) return 0.974;
167 else if (pt < 40.000000) return 0.977;
168 else if (pt < 50.000000) return 0.977;
169 else if (pt < 7000.000000) return 0.971;
170 }
171 else if (fabs(eta) < 1.479000) {
172 if (pt < 22.500000) return 0.957;
173 else if (pt < 25.000000) return 0.969;
174 else if (pt < 27.500000) return 0.987;
175 else if (pt < 30.000000) return 0.987;
176 else if (pt < 35.000000) return 0.991;
177 else if (pt < 40.000000) return 0.993;
178 else if (pt < 50.000000) return 0.995;
179 else if (pt < 7000.000000) return 0.993;
180 }
181 else if (fabs(eta) < 2.000000) {
182 if (pt < 22.500000) return 0.982;
183 else if (pt < 25.000000) return 0.986;
184 else if (pt < 27.500000) return 0.984;
185 else if (pt < 30.000000) return 0.991;
186 else if (pt < 35.000000) return 0.994;
187 else if (pt < 40.000000) return 0.994;
188 else if (pt < 50.000000) return 0.996;
189 else if (pt < 7000.000000) return 0.995;
190 }
191 else if (fabs(eta) < 2.500000) {
192 if (pt < 22.500000) return 0.835;
193 else if (pt < 25.000000) return 0.981;
194 else if (pt < 27.500000) return 1.000;
195 else if (pt < 30.000000) return 0.987;
196 else if (pt < 35.000000) return 0.990;
197 else if (pt < 40.000000) return 0.986;
198 else if (pt < 50.000000) return 0.989;
199 else if (pt < 7000.000000) return 0.994;
200 }
201 break;
202 case Sgl:
203 if (fabs(eta) < 0.000) return 0.;
204 if (fabs(eta) > 2.500) return 0.;
205
206 if (pt < 20.000) return 0.;
207 if (pt > 7000.000) return 0.;
208
209 if (fabs(eta) < 0.800000) {
210 if (pt < 22.500000) return 0.000;
211 else if (pt < 25.000000) return 0.000;
212 else if (pt < 27.500000) return 0.059;
213 else if (pt < 30.000000) return 0.740;
214 else if (pt < 35.000000) return 0.904;
215 else if (pt < 40.000000) return 0.927;
216 else if (pt < 50.000000) return 0.945;
217 else if (pt < 7000.000000) return 0.950;
218 }
219 else if (fabs(eta) < 1.479000) {
220 if (pt < 22.500000) return 0.000;
221 else if (pt < 25.000000) return 0.035;
222 else if (pt < 27.500000) return 0.112;
223 else if (pt < 30.000000) return 0.647;
224 else if (pt < 35.000000) return 0.915;
225 else if (pt < 40.000000) return 0.939;
226 else if (pt < 50.000000) return 0.956;
227 else if (pt < 7000.000000) return 0.968;
228 }
229 else if (fabs(eta) < 2.000000) {
230 if (pt < 22.500000) return 0.000;
231 else if (pt < 25.000000) return 0.006;
232 else if (pt < 27.500000) return 0.108;
233 else if (pt < 30.000000) return 0.448;
234 else if (pt < 35.000000) return 0.687;
235 else if (pt < 40.000000) return 0.735;
236 else if (pt < 50.000000) return 0.767;
237 else if (pt < 7000.000000) return 0.766;
238 }
239 else if (fabs(eta) < 2.500000) {
240 if (pt < 22.500000) return 0.000;
241 else if (pt < 25.000000) return 0.009;
242 else if (pt < 27.500000) return 0.095;
243 else if (pt < 30.000000) return 0.305;
244 else if (pt < 35.000000) return 0.532;
245 else if (pt < 40.000000) return 0.640;
246 else if (pt < 50.000000) return 0.695;
247 else if (pt < 7000.000000) return 0.687;
248 }
249 break;
250 case TrailDbl:
251 if (fabs(eta) < 0.000) return 0.;
252 if (fabs(eta) > 2.500) return 0.;
253
254 if (pt < 20.000) return 0.;
255 if (pt > 7000.000) return 0.;
256
257 if (fabs(eta) < 0.800000) {
258 if (pt < 22.500000) return 0.943;
259 else if (pt < 25.000000) return 0.951;
260 else if (pt < 27.500000) return 0.963;
261 else if (pt < 30.000000) return 0.962;
262 else if (pt < 35.000000) return 0.970;
263 else if (pt < 40.000000) return 0.974;
264 else if (pt < 50.000000) return 0.974;
265 else if (pt < 7000.000000) return 0.970;
266 }
267 else if (fabs(eta) < 1.479000) {
268 if (pt < 22.500000) return 0.970;
269 else if (pt < 25.000000) return 0.974;
270 else if (pt < 27.500000) return 0.977;
271 else if (pt < 30.000000) return 0.984;
272 else if (pt < 35.000000) return 0.987;
273 else if (pt < 40.000000) return 0.987;
274 else if (pt < 50.000000) return 0.990;
275 else if (pt < 7000.000000) return 0.987;
276 }
277 else if (fabs(eta) < 2.000000) {
278 if (pt < 22.500000) return 0.982;
279 else if (pt < 25.000000) return 0.993;
280 else if (pt < 27.500000) return 0.979;
281 else if (pt < 30.000000) return 0.991;
282 else if (pt < 35.000000) return 0.988;
283 else if (pt < 40.000000) return 0.989;
284 else if (pt < 50.000000) return 0.993;
285 else if (pt < 7000.000000) return 0.992;
286 }
287 else if (fabs(eta) < 2.500000) {
288 if (pt < 22.500000) return 0.962;
289 else if (pt < 25.000000) return 0.981;
290 else if (pt < 27.500000) return 1.000;
291 else if (pt < 30.000000) return 0.987;
292 else if (pt < 35.000000) return 0.989;
293 else if (pt < 40.000000) return 0.985;
294 else if (pt < 50.000000) return 0.987;
295 else if (pt < 7000.000000) return 0.992;
296 }
297 break;
298 };
299 }
300 else if (aid == 13)
301 {
302 switch (trig_eff_type)
303 {
304 case DzDbl:
305 if (fabs(eta) < 0.000) return 0.;
306 if (fabs(eta) > 2.400) return 0.;
307
308 if (pt < 20.000) return 0.;
309 if (pt > 7000.000) return 0.;
310
311 if (fabs(eta) < 0.800000) {
312 if (pt < 22.500000) return 0.901;
313 else if (pt < 25.000000) return 0.883;
314 else if (pt < 27.500000) return 0.912;
315 else if (pt < 30.000000) return 0.905;
316 else if (pt < 35.000000) return 0.906;
317 else if (pt < 40.000000) return 0.909;
318 else if (pt < 50.000000) return 0.923;
319 else if (pt < 7000.000000) return 0.927;
320 }
321 else if (fabs(eta) < 1.200000) {
322 if (pt < 22.500000) return 0.904;
323 else if (pt < 25.000000) return 0.897;
324 else if (pt < 27.500000) return 0.926;
325 else if (pt < 30.000000) return 0.921;
326 else if (pt < 35.000000) return 0.903;
327 else if (pt < 40.000000) return 0.896;
328 else if (pt < 50.000000) return 0.890;
329 else if (pt < 7000.000000) return 0.876;
330 }
331 else if (fabs(eta) < 2.400000) {
332 if (pt < 22.500000) return 0.864;
333 else if (pt < 25.000000) return 0.847;
334 else if (pt < 27.500000) return 0.864;
335 else if (pt < 30.000000) return 0.862;
336 else if (pt < 35.000000) return 0.858;
337 else if (pt < 40.000000) return 0.840;
338 else if (pt < 50.000000) return 0.824;
339 else if (pt < 7000.000000) return 0.810;
340 }
341 break;
342 case LeadDbl:
343 if (fabs(eta) < 0.000) return 0.;
344 if (fabs(eta) > 2.400) return 0.;
345
346 if (pt < 20.000) return 0.;
347 if (pt > 7000.000) return 0.;
348
349 if (fabs(eta) < 0.800000) {
350 if (pt < 22.500000) return 0.983;
351 else if (pt < 25.000000) return 0.976;
352 else if (pt < 27.500000) return 0.982;
353 else if (pt < 30.000000) return 0.977;
354 else if (pt < 35.000000) return 0.976;
355 else if (pt < 40.000000) return 0.977;
356 else if (pt < 50.000000) return 0.976;
357 else if (pt < 7000.000000) return 0.977;
358 }
359 else if (fabs(eta) < 1.200000) {
360 if (pt < 22.500000) return 0.911;
361 else if (pt < 25.000000) return 0.935;
362 else if (pt < 27.500000) return 0.927;
363 else if (pt < 30.000000) return 0.925;
364 else if (pt < 35.000000) return 0.938;
365 else if (pt < 40.000000) return 0.939;
366 else if (pt < 50.000000) return 0.939;
367 else if (pt < 7000.000000) return 0.934;
368 }
369 else if (fabs(eta) < 2.400000) {
370 if (pt < 22.500000) return 0.900;
371 else if (pt < 25.000000) return 0.915;
372 else if (pt < 27.500000) return 0.903;
373 else if (pt < 30.000000) return 0.908;
374 else if (pt < 35.000000) return 0.917;
375 else if (pt < 40.000000) return 0.917;
376 else if (pt < 50.000000) return 0.921;
377 else if (pt < 7000.000000) return 0.916;
378 }
379 break;
380 case Sgl:
381 if (fabs(eta) < 0.000) return 0.;
382 if (fabs(eta) > 2.400) return 0.;
383
384 if (pt < 20.000) return 0.;
385 if (pt > 7000.000) return 0.;
386
387 if (fabs(eta) < 0.800000) {
388 if (pt < 22.500000) return 0.001;
389 else if (pt < 25.000000) return 0.390;
390 else if (pt < 27.500000) return 0.870;
391 else if (pt < 30.000000) return 0.883;
392 else if (pt < 35.000000) return 0.905;
393 else if (pt < 40.000000) return 0.916;
394 else if (pt < 50.000000) return 0.931;
395 else if (pt < 7000.000000) return 0.944;
396 }
397 else if (fabs(eta) < 1.200000) {
398 if (pt < 22.500000) return 0.005;
399 else if (pt < 25.000000) return 0.361;
400 else if (pt < 27.500000) return 0.803;
401 else if (pt < 30.000000) return 0.805;
402 else if (pt < 35.000000) return 0.829;
403 else if (pt < 40.000000) return 0.847;
404 else if (pt < 50.000000) return 0.856;
405 else if (pt < 7000.000000) return 0.850;
406 }
407 else if (fabs(eta) < 2.400000) {
408 if (pt < 22.500000) return 0.004;
409 else if (pt < 25.000000) return 0.312;
410 else if (pt < 27.500000) return 0.590;
411 else if (pt < 30.000000) return 0.608;
412 else if (pt < 35.000000) return 0.620;
413 else if (pt < 40.000000) return 0.653;
414 else if (pt < 50.000000) return 0.699;
415 else if (pt < 7000.000000) return 0.710;
416 }
417 break;
418 case TrailDbl:
419 if (fabs(eta) < 0.000) return 0.;
420 if (fabs(eta) > 2.400) return 0.;
421
422 if (pt < 20.000) return 0.;
423 if (pt > 7000.000) return 0.;
424
425 if (fabs(eta) < 0.800000) {
426 if (pt < 22.500000) return 0.985;
427 else if (pt < 25.000000) return 0.977;
428 else if (pt < 27.500000) return 0.984;
429 else if (pt < 30.000000) return 0.978;
430 else if (pt < 35.000000) return 0.977;
431 else if (pt < 40.000000) return 0.978;
432 else if (pt < 50.000000) return 0.978;
433 else if (pt < 7000.000000) return 0.978;
434 }
435 else if (fabs(eta) < 1.200000) {
436 if (pt < 22.500000) return 0.934;
437 else if (pt < 25.000000) return 0.946;
438 else if (pt < 27.500000) return 0.945;
439 else if (pt < 30.000000) return 0.934;
440 else if (pt < 35.000000) return 0.949;
441 else if (pt < 40.000000) return 0.948;
442 else if (pt < 50.000000) return 0.947;
443 else if (pt < 7000.000000) return 0.943;
444 }
445 else if (fabs(eta) < 2.400000) {
446 if (pt < 22.500000) return 0.933;
447 else if (pt < 25.000000) return 0.948;
448 else if (pt < 27.500000) return 0.934;
449 else if (pt < 30.000000) return 0.936;
450 else if (pt < 35.000000) return 0.940;
451 else if (pt < 40.000000) return 0.935;
452 else if (pt < 50.000000) return 0.936;
453 else if (pt < 7000.000000) return 0.931;
454 }
455 break;
456 };
457 }
458 else
459 {
460 return 0.0;
461 }
462 return 0.0;
463 }