179 {
180 std::unique_ptr<IsolationWP>
wp = std::make_unique<IsolationWP>(muWPname);
181 if (muWPname == "HighPtTrackOnly") {
182 wp->addCut(std::make_unique<IsolationConditionFormula>(
183 "ptcone20_Tight_1p25",
186 } else if (muWPname == "TightTrackOnly_FixedRad") {
187 wp->addCut(std::make_unique<IsolationConditionFormula>(
188 "MuonFixedCutHighMuTrackOnly_lowPt",
191 wp->addCut(std::make_unique<IsolationConditionFormula>(
192 "MuonFixedCutHighMuTrackOnly_highPt",
195 } else if (muWPname == "Tight_FixedRad") {
196 wp->addCut(std::make_unique<IsolationConditionFormula>(
197 "MuonFixedCutHighMuTight_track_lowPt",
200 wp->addCut(std::make_unique<IsolationConditionFormula>(
201 "MuonFixedCutHighMuTight_track_highPt",
204 wp->addCut(std::make_unique<IsolationConditionFormula>(
207 } else if (muWPname == "Loose_FixedRad") {
208 wp->addCut(std::make_unique<IsolationConditionFormula>(
209 "MuonFixedCutHighMuLoose_track_lowPt",
212 wp->addCut(std::make_unique<IsolationConditionFormula>(
213 "MuonFixedCutHighMuLoose_track_highPt",
216 wp->addCut(std::make_unique<IsolationConditionFormula>(
219 } else if (muWPname == "TightTrackOnly_VarRad") {
220 wp->addCut(std::make_unique<IsolationConditionFormula>(
221 "MuonFixedCutHighMuTrackOnly",
224 } else if (muWPname == "Tight_VarRad") {
225 wp->addCut(std::make_unique<IsolationConditionFormula>(
226 "MuonFixedCutHighMuTight_track",
229 wp->addCut(std::make_unique<IsolationConditionFormula>(
232 } else if (muWPname == "Loose_VarRad") {
233 wp->addCut(std::make_unique<IsolationConditionFormula>(
234 "MuonFixedCutHighMuLoose_track",
237 wp->addCut(std::make_unique<IsolationConditionFormula>(
240 } else if (muWPname == "PflowTight_FixedRad") {
241 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
244 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
247 wp->addCut(std::make_unique<IsolationConditionCombined>(
248 "MuonPFlowTightLowPt", isoTypesLowPt,
249 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
251 wp->addCut(std::make_unique<IsolationConditionCombined>(
252 "MuonPFlowTightHighPt", isoTypesHighPt,
253 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
255 } else if (muWPname == "PflowTight_VarRad") {
256 std::vector<xAOD::Iso::IsolationType> isoTypes{
259 wp->addCut(std::make_unique<IsolationConditionCombined>(
260 "MuonPFlowTight", isoTypes,
261 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
263 } else if (muWPname == "PflowLoose_FixedRad") {
264 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
267 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
270 wp->addCut(std::make_unique<IsolationConditionCombined>(
271 "MuonPFlowLooseLowPt", isoTypesLowPt,
272 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
274 wp->addCut(std::make_unique<IsolationConditionCombined>(
275 "MuonPFlowLooseHighPt", isoTypesHighPt,
276 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
278 } else if (muWPname == "PflowLoose_VarRad") {
279 std::vector<xAOD::Iso::IsolationType> isoTypes{
282 wp->addCut(std::make_unique<IsolationConditionCombined>(
283 "MuonPFlowLoose", isoTypes,
284 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
286 } else if (muWPname == "R3PLITasPLIVefficiencyTight") {
287 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
288 "PLIT_TPLTmu_pnpxall"};
289 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
290 20000.0, 25000.0, 32000.0,
291 43000.0, 60000.0, 95000.0};
292 const std::vector<std::vector<double>>
parameters = {
293 {3.75},
294 {2.4599999999999946, 0.0002400000000000006},
295 {2.6437499999999883, 0.00023250000000000085},
296 {5.576250000000033, 2.249999999999814e-05},
297 {7.061249999999798, -5.2499999999991085e-05},
298 {6.933482142856749, -4.553571428570058e-05},
299 {7.271590909090752, -5.5909090909086746e-05},
300 {5.105882352941061, -1.1764705882350721e-05},
301 {4.4250000000000025, -2.97364147850582e-20},
302 {4.425000000000001}};
303 const std::string cutFunction =
305 wp->addCut(std::make_unique<IsolationConditionCombined>(
306 "R3PLITasPLIVefficiencyTight", isoTypes,
307 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
309 } else if (muWPname == "R3PLITasPLIVefficiencyVeryTight") {
310 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
311 "PLIT_TPLTmu_pnpxall"};
312 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
313 20000.0, 25000.0, 32000.0,
314 43000.0, 60000.0, 95000.0};
315 const std::vector<std::vector<double>>
parameters = {
316 {4.050000000000001},
317 {2.5912499999999903, 0.0002625000000000011},
318 {2.8012499999999214, 0.00024750000000000623},
319 {5.677499999999787, 4.500000000001207e-05},
320 {6.2137499999998145, 2.2500000000008228e-05},
321 {7.09151785714283, -1.8749999999999094e-05},
322 {8.57727272727282, -6.545454545454794e-05},
323 {5.969852941176529, -1.0294117647059968e-05},
324 {5.528483606557319, -2.581967213113981e-06},
325 {5.324999999999999}};
326 const std::string cutFunction =
328 wp->addCut(std::make_unique<IsolationConditionCombined>(
329 "R3PLITasPLIVefficiencyVeryTight", isoTypes,
330 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
332 } else if (muWPname == "R3PLITasPLIVrejectionTight") {
333 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
334 "PLIT_TPLTmu_pnpxall"};
335 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
336 20000.0, 25000.0, 32000.0,
337 43000.0, 60000.0, 95000.0};
338 const std::vector<std::vector<double>>
parameters = {
339 {3.6750000000000007},
340 {2.4374999999999987, 0.00022500000000000008},
341 {2.572499999999916, 0.00022500000000000666},
342 {5.351249999999845, 2.2500000000008773e-05},
343 {7.113749999999581, -6.749999999998147e-05},
344 {7.213392857142764, -6.964285714285394e-05},
345 {7.4778409090906415, -7.977272727272016e-05},
346 {4.105790441176434, -1.3419117647058116e-05},
347 {3.590163934426209, -4.180327868852198e-06},
348 {3.1499999999999986}};
349 const std::string cutFunction =
351 wp->addCut(std::make_unique<IsolationConditionCombined>(
352 "R3PLITasPLIVrejectionTight", isoTypes,
353 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
355 } else if (muWPname == "R3PLITasPLIVrejectionVeryTight") {
356 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
357 "PLIT_TPLTmu_pnpxall"};
358 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
359 20000.0, 25000.0, 32000.0,
360 43000.0, 60000.0, 95000.0};
361 const std::vector<std::vector<double>>
parameters = {
362 {3.974999999999998},
363 {2.5875000000000035, 0.0002549999999999993},
364 {2.8687499999999373, 0.00023250000000000495},
365 {5.527499999999797, 4.500000000001146e-05},
366 {6.048749999999677, 2.2500000000014293e-05},
367 {7.019196428571157, -2.4107142857133378e-05},
368 {8.878977272727232, -8.38636363636353e-05},
369 {5.708823529411479, -1.76470588235239e-05},
370 {5.215573770491751, -7.131147540982918e-06},
371 {4.649999999999999}};
372 const std::string cutFunction =
374 wp->addCut(std::make_unique<IsolationConditionCombined>(
375 "R3PLITasPLIVrejectionVeryTight", isoTypes,
376 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
378 } else if (muWPname == "R2PLITasPLIVefficiencyTight") {
379 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
380 "PLIT_TPLTmu_pnpxall"};
381 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
382 20000.0, 25000.0, 32000.0,
383 43000.0, 60000.0, 95000.0};
384 const std::vector<std::vector<double>>
parameters = {
385 {3.974999999999998},
386 {2.789999999999986, 0.00021000000000000172},
387 {2.39249999999993, 0.00025500000000000555},
388 {5.737499999999933, 1.5000000000003797e-05},
389 {7.413749999999598, -6.749999999998225e-05},
390 {7.098214285714245, -5.3571428571427186e-05},
391 {6.934090909090853, -4.909090909090761e-05},
392 {5.253676470587868, -1.6176470588228218e-05},
393 {4.275000000000021, -3.17095862137587e-19},
394 {4.349999999999998}};
395 const std::string cutFunction =
397 wp->addCut(std::make_unique<IsolationConditionCombined>(
398 "R2PLITasPLIVefficiencyTight", isoTypes,
399 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
401 } else if (muWPname == "R2PLITasPLIVefficiencyVeryTight") {
402 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
403 "PLIT_TPLTmu_pnpxall"};
404 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
405 20000.0, 25000.0, 32000.0,
406 43000.0, 60000.0, 95000.0};
407 const std::vector<std::vector<double>>
parameters = {
408 {4.199999999999999},
409 {2.9625000000000026, 0.00022499999999999956},
410 {2.7674999999999454, 0.0002550000000000043},
411 {5.752499999999801, 4.500000000001117e-05},
412 {6.2887499999995, 2.2500000000022112e-05},
413 {7.265625000000208, -2.4107142857150163e-05},
414 {8.287500000000128, -5.863636363636705e-05},
415 {5.99329044117658, -1.194852941176682e-05},
416 {5.653893442622939, -5.5327868852457475e-06},
417 {5.25}};
418 const std::string cutFunction =
420 wp->addCut(std::make_unique<IsolationConditionCombined>(
421 "R2PLITasPLIVefficiencyVeryTight", isoTypes,
422 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
424 } else if (muWPname == "R2PLITasPLIVrejectionTight") {
425 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
426 "PLIT_TPLTmu_pnpxall"};
427 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
428 20000.0, 25000.0, 32000.0,
429 43000.0, 60000.0, 95000.0};
430 const std::vector<std::vector<double>>
parameters = {
431 {3.8999999999999986},
432 {2.853749999999994, 0.00018750000000000065},
433 {2.321250000000002, 0.0002474999999999998},
434 {5.426250000000083, 2.2499999999995095e-05},
435 {7.312499999999872, -7.499999999999437e-05},
436 {7.552232142857126, -8.303571428571374e-05},
437 {7.140340909090713, -7.022727272726753e-05},
438 {4.7727941176470186, -2.499999999999921e-05},
439 {3.679918032786865, -5.409836065573509e-06},
440 {3.0}};
441 const std::string cutFunction =
443 wp->addCut(std::make_unique<IsolationConditionCombined>(
444 "R2PLITasPLIVrejectionTight", isoTypes,
445 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
447 } else if (muWPname == "R2PLITasPLIVrejectionVeryTight") {
448 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
449 "PLIT_TPLTmu_pnpxall"};
450 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
451 20000.0, 25000.0, 32000.0,
452 43000.0, 60000.0, 95000.0};
453 const std::vector<std::vector<double>>
parameters = {
454 {4.199999999999999},
455 {2.9887499999999982, 0.0002175000000000001},
456 {2.9287500000000426, 0.0002324999999999965},
457 {5.602499999999976, 4.500000000000134e-05},
458 {6.262499999999722, 1.5000000000012243e-05},
459 {7.651339285714248, -4.5535714285712985e-05},
460 {8.947159090908924, -8.659090909090467e-05},
461 {5.994117647058617, -2.3529411764701903e-05},
462 {4.8565573770491985, -2.213114754098622e-06},
463 {4.349999999999998}};
464 const std::string cutFunction =
466 wp->addCut(std::make_unique<IsolationConditionCombined>(
467 "R2PLITasPLIVrejectionVeryTight", isoTypes,
468 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
470 } else if (muWPname == "R3PLITVeryLoose") {
471 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
472 "PLIT_TPLTmu_pnpxall"};
473 const std::vector<double> boundaries = {
474 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
475 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
476 const std::vector<std::vector<double>>
parameters = {
477 {-0.3040909, 0.0002809},
478 {1.56375, 9.75e-05},
479 {1.22625, 9.75e-05},
480 {1.4625, 7.5e-05},
481 {1.4622506, 6.45e-05},
482 {1.6695205, 4.62e-05},
483 {1.9120284, 3.31e-05},
484 {2.9462838, 1.26e-05},
485 {3.375},
486 {3.45},
487 {3.225},
488 {3.3}};
489 const std::string cutFunction =
491 wp->addCut(std::make_unique<IsolationConditionCombined>(
492 "R3PLITVeryLoose", isoTypes,
493 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
495 } else if (muWPname == "R2PLITVeryLoose") {
496 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
497 "PLIT_TPLTmu_pnpxall"};
498 const std::vector<double> boundaries = {
499 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
500 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
501 const std::vector<std::vector<double>>
parameters = {{0.0886364, 0.0002536},
502 {1.8651869, 8.55e-05},
503 {1.7625, 7.5e-05},
504 {1.4625, 7.5e-05},
505 {1.5238217, 6.21e-05},
506 {1.743375, 4.43e-05},
507 {2.1522807, 2.78e-05},
508 {2.3787162, 1.74e-05},
509 {3.3},
510 {3.45},
511 {3.15},
512 {3.075}};
513 const std::string cutFunction =
515 wp->addCut(std::make_unique<IsolationConditionCombined>(
516 "R2PLITVeryLoose", isoTypes,
517 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
519 } else {
521 return StatusCode::FAILURE;
522 }
524#ifndef XAOD_STANDALONE
526#endif
527 m_muWPs.push_back(std::move(wp));
528 return StatusCode::SUCCESS;
529}
@ ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000
@ ptcone20_Nonprompt_All_MaxWeightTTVA_pt500
Ptcone http://arxiv.org/abs/1007.2221 for high mu.
@ ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500