181 {
182 std::unique_ptr<IsolationWP>
wp = std::make_unique<IsolationWP>(muWPname);
183 if (muWPname == "HighPtTrackOnly") {
184 wp->addCut(std::make_unique<IsolationConditionFormula>(
185 "ptcone20_Tight_1p25",
188 } else if (muWPname == "TightTrackOnly_FixedRad") {
189 wp->addCut(std::make_unique<IsolationConditionFormula>(
190 "MuonFixedCutHighMuTrackOnly_lowPt",
193 wp->addCut(std::make_unique<IsolationConditionFormula>(
194 "MuonFixedCutHighMuTrackOnly_highPt",
197 } else if (muWPname == "Tight_FixedRad") {
198 wp->addCut(std::make_unique<IsolationConditionFormula>(
199 "MuonFixedCutHighMuTight_track_lowPt",
202 wp->addCut(std::make_unique<IsolationConditionFormula>(
203 "MuonFixedCutHighMuTight_track_highPt",
206 wp->addCut(std::make_unique<IsolationConditionFormula>(
209 } else if (muWPname == "Loose_FixedRad") {
210 wp->addCut(std::make_unique<IsolationConditionFormula>(
211 "MuonFixedCutHighMuLoose_track_lowPt",
214 wp->addCut(std::make_unique<IsolationConditionFormula>(
215 "MuonFixedCutHighMuLoose_track_highPt",
218 wp->addCut(std::make_unique<IsolationConditionFormula>(
221 } else if (muWPname == "TightTrackOnly_VarRad") {
222 wp->addCut(std::make_unique<IsolationConditionFormula>(
223 "MuonFixedCutHighMuTrackOnly",
226 } else if (muWPname == "Tight_VarRad") {
227 wp->addCut(std::make_unique<IsolationConditionFormula>(
228 "MuonFixedCutHighMuTight_track",
231 wp->addCut(std::make_unique<IsolationConditionFormula>(
234 } else if (muWPname == "Loose_VarRad") {
235 wp->addCut(std::make_unique<IsolationConditionFormula>(
236 "MuonFixedCutHighMuLoose_track",
239 wp->addCut(std::make_unique<IsolationConditionFormula>(
242 } else if (muWPname == "PflowTight_FixedRad") {
243 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
246 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
249 wp->addCut(std::make_unique<IsolationConditionCombined>(
250 "MuonPFlowTightLowPt", isoTypesLowPt,
251 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
253 wp->addCut(std::make_unique<IsolationConditionCombined>(
254 "MuonPFlowTightHighPt", isoTypesHighPt,
255 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
257 } else if (muWPname == "PflowTight_VarRad") {
258 std::vector<xAOD::Iso::IsolationType> isoTypes{
261 wp->addCut(std::make_unique<IsolationConditionCombined>(
262 "MuonPFlowTight", isoTypes,
263 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
265 } else if (muWPname == "PflowLoose_FixedRad") {
266 std::vector<xAOD::Iso::IsolationType> isoTypesHighPt{
269 std::vector<xAOD::Iso::IsolationType> isoTypesLowPt{
272 wp->addCut(std::make_unique<IsolationConditionCombined>(
273 "MuonPFlowLooseLowPt", isoTypesLowPt,
274 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
276 wp->addCut(std::make_unique<IsolationConditionCombined>(
277 "MuonPFlowLooseHighPt", isoTypesHighPt,
278 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
280 } else if (muWPname == "PflowLoose_VarRad") {
281 std::vector<xAOD::Iso::IsolationType> isoTypes{
284 wp->addCut(std::make_unique<IsolationConditionCombined>(
285 "MuonPFlowLoose", isoTypes,
286 std::make_unique<TF2>("pflowTFunction", "fabs(x)+0.4*(y>0?y:0)"),
288 } else if (muWPname == "R3PLITasPLIVefficiencyTight") {
289 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
290 "PLIT_TPLTmu_pnpxall"};
291 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
292 20000.0, 25000.0, 32000.0,
293 43000.0, 60000.0, 95000.0};
294 const std::vector<std::vector<double>>
parameters = {
295 {3.75},
296 {2.4599999999999946, 0.0002400000000000006},
297 {2.6437499999999883, 0.00023250000000000085},
298 {5.576250000000033, 2.249999999999814e-05},
299 {7.061249999999798, -5.2499999999991085e-05},
300 {6.933482142856749, -4.553571428570058e-05},
301 {7.271590909090752, -5.5909090909086746e-05},
302 {5.105882352941061, -1.1764705882350721e-05},
303 {4.4250000000000025, -2.97364147850582e-20},
304 {4.425000000000001}};
305 const std::string cutFunction =
307 wp->addCut(std::make_unique<IsolationConditionCombined>(
308 "R3PLITasPLIVefficiencyTight", isoTypes,
309 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
311 } else if (muWPname == "R3PLITasPLIVefficiencyVeryTight") {
312 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
313 "PLIT_TPLTmu_pnpxall"};
314 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
315 20000.0, 25000.0, 32000.0,
316 43000.0, 60000.0, 95000.0};
317 const std::vector<std::vector<double>>
parameters = {
318 {4.050000000000001},
319 {2.5912499999999903, 0.0002625000000000011},
320 {2.8012499999999214, 0.00024750000000000623},
321 {5.677499999999787, 4.500000000001207e-05},
322 {6.2137499999998145, 2.2500000000008228e-05},
323 {7.09151785714283, -1.8749999999999094e-05},
324 {8.57727272727282, -6.545454545454794e-05},
325 {5.969852941176529, -1.0294117647059968e-05},
326 {5.528483606557319, -2.581967213113981e-06},
327 {5.324999999999999}};
328 const std::string cutFunction =
330 wp->addCut(std::make_unique<IsolationConditionCombined>(
331 "R3PLITasPLIVefficiencyVeryTight", isoTypes,
332 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
334 } else if (muWPname == "R3PLITasPLIVrejectionTight") {
335 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
336 "PLIT_TPLTmu_pnpxall"};
337 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
338 20000.0, 25000.0, 32000.0,
339 43000.0, 60000.0, 95000.0};
340 const std::vector<std::vector<double>>
parameters = {
341 {3.6750000000000007},
342 {2.4374999999999987, 0.00022500000000000008},
343 {2.572499999999916, 0.00022500000000000666},
344 {5.351249999999845, 2.2500000000008773e-05},
345 {7.113749999999581, -6.749999999998147e-05},
346 {7.213392857142764, -6.964285714285394e-05},
347 {7.4778409090906415, -7.977272727272016e-05},
348 {4.105790441176434, -1.3419117647058116e-05},
349 {3.590163934426209, -4.180327868852198e-06},
350 {3.1499999999999986}};
351 const std::string cutFunction =
353 wp->addCut(std::make_unique<IsolationConditionCombined>(
354 "R3PLITasPLIVrejectionTight", isoTypes,
355 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
357 } else if (muWPname == "R3PLITasPLIVrejectionVeryTight") {
358 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
359 "PLIT_TPLTmu_pnpxall"};
360 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
361 20000.0, 25000.0, 32000.0,
362 43000.0, 60000.0, 95000.0};
363 const std::vector<std::vector<double>>
parameters = {
364 {3.974999999999998},
365 {2.5875000000000035, 0.0002549999999999993},
366 {2.8687499999999373, 0.00023250000000000495},
367 {5.527499999999797, 4.500000000001146e-05},
368 {6.048749999999677, 2.2500000000014293e-05},
369 {7.019196428571157, -2.4107142857133378e-05},
370 {8.878977272727232, -8.38636363636353e-05},
371 {5.708823529411479, -1.76470588235239e-05},
372 {5.215573770491751, -7.131147540982918e-06},
373 {4.649999999999999}};
374 const std::string cutFunction =
376 wp->addCut(std::make_unique<IsolationConditionCombined>(
377 "R3PLITasPLIVrejectionVeryTight", isoTypes,
378 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
380 } else if (muWPname == "R2PLITasPLIVefficiencyTight") {
381 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
382 "PLIT_TPLTmu_pnpxall"};
383 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
384 20000.0, 25000.0, 32000.0,
385 43000.0, 60000.0, 95000.0};
386 const std::vector<std::vector<double>>
parameters = {
387 {3.974999999999998},
388 {2.789999999999986, 0.00021000000000000172},
389 {2.39249999999993, 0.00025500000000000555},
390 {5.737499999999933, 1.5000000000003797e-05},
391 {7.413749999999598, -6.749999999998225e-05},
392 {7.098214285714245, -5.3571428571427186e-05},
393 {6.934090909090853, -4.909090909090761e-05},
394 {5.253676470587868, -1.6176470588228218e-05},
395 {4.275000000000021, -3.17095862137587e-19},
396 {4.349999999999998}};
397 const std::string cutFunction =
399 wp->addCut(std::make_unique<IsolationConditionCombined>(
400 "R2PLITasPLIVefficiencyTight", isoTypes,
401 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
403 } else if (muWPname == "R2PLITasPLIVefficiencyVeryTight") {
404 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
405 "PLIT_TPLTmu_pnpxall"};
406 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
407 20000.0, 25000.0, 32000.0,
408 43000.0, 60000.0, 95000.0};
409 const std::vector<std::vector<double>>
parameters = {
410 {4.199999999999999},
411 {2.9625000000000026, 0.00022499999999999956},
412 {2.7674999999999454, 0.0002550000000000043},
413 {5.752499999999801, 4.500000000001117e-05},
414 {6.2887499999995, 2.2500000000022112e-05},
415 {7.265625000000208, -2.4107142857150163e-05},
416 {8.287500000000128, -5.863636363636705e-05},
417 {5.99329044117658, -1.194852941176682e-05},
418 {5.653893442622939, -5.5327868852457475e-06},
419 {5.25}};
420 const std::string cutFunction =
422 wp->addCut(std::make_unique<IsolationConditionCombined>(
423 "R2PLITasPLIVefficiencyVeryTight", isoTypes,
424 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
426 } else if (muWPname == "R2PLITasPLIVrejectionTight") {
427 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
428 "PLIT_TPLTmu_pnpxall"};
429 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
430 20000.0, 25000.0, 32000.0,
431 43000.0, 60000.0, 95000.0};
432 const std::vector<std::vector<double>>
parameters = {
433 {3.8999999999999986},
434 {2.853749999999994, 0.00018750000000000065},
435 {2.321250000000002, 0.0002474999999999998},
436 {5.426250000000083, 2.2499999999995095e-05},
437 {7.312499999999872, -7.499999999999437e-05},
438 {7.552232142857126, -8.303571428571374e-05},
439 {7.140340909090713, -7.022727272726753e-05},
440 {4.7727941176470186, -2.499999999999921e-05},
441 {3.679918032786865, -5.409836065573509e-06},
442 {3.0}};
443 const std::string cutFunction =
445 wp->addCut(std::make_unique<IsolationConditionCombined>(
446 "R2PLITasPLIVrejectionTight", isoTypes,
447 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
449 } else if (muWPname == "R2PLITasPLIVrejectionVeryTight") {
450 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
451 "PLIT_TPLTmu_pnpxall"};
452 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0,
453 20000.0, 25000.0, 32000.0,
454 43000.0, 60000.0, 95000.0};
455 const std::vector<std::vector<double>>
parameters = {
456 {4.199999999999999},
457 {2.9887499999999982, 0.0002175000000000001},
458 {2.9287500000000426, 0.0002324999999999965},
459 {5.602499999999976, 4.500000000000134e-05},
460 {6.262499999999722, 1.5000000000012243e-05},
461 {7.651339285714248, -4.5535714285712985e-05},
462 {8.947159090908924, -8.659090909090467e-05},
463 {5.994117647058617, -2.3529411764701903e-05},
464 {4.8565573770491985, -2.213114754098622e-06},
465 {4.349999999999998}};
466 const std::string cutFunction =
468 wp->addCut(std::make_unique<IsolationConditionCombined>(
469 "R2PLITasPLIVrejectionVeryTight", isoTypes,
470 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
472 } else if (muWPname == "R3PLITVeryLoose") {
473 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
474 "PLIT_TPLTmu_pnpxall"};
475 const std::vector<double> boundaries = {
476 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
477 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
478 const std::vector<std::vector<double>>
parameters = {
479 {-0.3040909, 0.0002809},
480 {1.56375, 9.75e-05},
481 {1.22625, 9.75e-05},
482 {1.4625, 7.5e-05},
483 {1.4622506, 6.45e-05},
484 {1.6695205, 4.62e-05},
485 {1.9120284, 3.31e-05},
486 {2.9462838, 1.26e-05},
487 {3.375},
488 {3.45},
489 {3.225},
490 {3.3}};
491 const std::string cutFunction =
493 wp->addCut(std::make_unique<IsolationConditionCombined>(
494 "R3PLITVeryLoose", isoTypes,
495 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
497 } else if (muWPname == "R2PLITVeryLoose") {
498 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp",
499 "PLIT_TPLTmu_pnpxall"};
500 const std::vector<double> boundaries = {
501 15000.0, 20000.0, 25000.0, 30000.0, 40000.0, 50000.0,
502 75000.0, 100000.0, 110000.0, 120000.0, 160000.0};
503 const std::vector<std::vector<double>>
parameters = {{0.0886364, 0.0002536},
504 {1.8651869, 8.55e-05},
505 {1.7625, 7.5e-05},
506 {1.4625, 7.5e-05},
507 {1.5238217, 6.21e-05},
508 {1.743375, 4.43e-05},
509 {2.1522807, 2.78e-05},
510 {2.3787162, 1.74e-05},
511 {3.3},
512 {3.45},
513 {3.15},
514 {3.075}};
515 const std::string cutFunction =
517 wp->addCut(std::make_unique<IsolationConditionCombined>(
518 "R2PLITVeryLoose", isoTypes,
519 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"), cutFunction,
521 } else {
523 return StatusCode::FAILURE;
524 }
526#ifndef XAOD_STANDALONE
528#endif
529 m_muWPs.push_back(std::move(wp));
530 return StatusCode::SUCCESS;
531}
@ 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