143 {
144 std::unique_ptr<IsolationWP>
wp = std::make_unique<IsolationWP>(muWPname);
145 if (muWPname == "HighPtTrackOnly") {
146 wp->addCut(std::make_unique<IsolationConditionFormula>(
148 } else if (muWPname == "TightTrackOnly_FixedRad") {
149 wp->addCut(std::make_unique<IsolationConditionFormula>(
151 wp->addCut(std::make_unique<IsolationConditionFormula>(
153 } else if (muWPname == "Tight_FixedRad") {
154 wp->addCut(std::make_unique<IsolationConditionFormula>(
156 wp->addCut(std::make_unique<IsolationConditionFormula>(
159 } else if (muWPname == "Loose_FixedRad") {
160 wp->addCut(std::make_unique<IsolationConditionFormula>(
162 wp->addCut(std::make_unique<IsolationConditionFormula>(
165 } else if (muWPname == "TightTrackOnly_VarRad") {
166 wp->addCut(std::make_unique<IsolationConditionFormula>(
"MuonFixedCutHighMuTrackOnly",
168 } else if (muWPname == "Tight_VarRad") {
169 wp->addCut(std::make_unique<IsolationConditionFormula>(
"MuonFixedCutHighMuTight_track",
172 } else if (muWPname == "Loose_VarRad") {
173 wp->addCut(std::make_unique<IsolationConditionFormula>(
"MuonFixedCutHighMuLoose_track",
176 } else if (muWPname == "PflowTight_FixedRad") {
181 wp->addCut(std::make_unique<IsolationConditionCombined>(
"MuonPFlowTightLowPt", isoTypesLowPt,
182 std::make_unique<TF2>("pflowTFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
184 wp->addCut(std::make_unique<IsolationConditionCombined>(
"MuonPFlowTightHighPt", isoTypesHighPt,
185 std::make_unique<TF2>("pflowTFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
187 } else if (muWPname == "PflowTight_VarRad") {
190 wp->addCut(std::make_unique<IsolationConditionCombined>(
191 "MuonPFlowTight", isoTypes, std::make_unique<TF2>(
"pflowTFunction",
"fabs(x)+0.4*(y>0?y:0)"),
"0.045*x",
m_isoDecSuffix));
192 } else if (muWPname == "PflowLoose_FixedRad") {
197 wp->addCut(std::make_unique<IsolationConditionCombined>(
"MuonPFlowLooseLowPt", isoTypesLowPt,
198 std::make_unique<TF2>("pflowLFunctionLowPt", "fabs(x)+0.4*(y>0?y:0)"),
200 wp->addCut(std::make_unique<IsolationConditionCombined>(
"MuonPFlowLooseHighPt", isoTypesHighPt,
201 std::make_unique<TF2>("pflowLFunctionHighPt", "fabs(x)+0.4*(y>0?y:0)"),
203 } else if (muWPname == "PflowLoose_VarRad") {
206 wp->addCut(std::make_unique<IsolationConditionCombined>(
207 "MuonPFlowLoose", isoTypes, std::make_unique<TF2>(
"pflowTFunction",
"fabs(x)+0.4*(y>0?y:0)"),
"0.16*x",
m_isoDecSuffix));
208 } else if (muWPname == "R3PLITasPLIVefficiencyTight") {
209 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
210 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
211 const std::vector<std::vector<double>>
parameters = {{3.75},
212 {2.4599999999999946, 0.0002400000000000006},
213 {2.6437499999999883, 0.00023250000000000085},
214 {5.576250000000033, 2.249999999999814e-05},
215 {7.061249999999798, -5.2499999999991085e-05},
216 {6.933482142856749, -4.553571428570058e-05},
217 {7.271590909090752, -5.5909090909086746e-05},
218 {5.105882352941061, -1.1764705882350721e-05},
219 {4.4250000000000025, -2.97364147850582e-20},
220 {4.425000000000001}};
222 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R3PLITasPLIVefficiencyTight", isoTypes,
223 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
224 cutFunction,
226 } else if (muWPname == "R3PLITasPLIVefficiencyVeryTight") {
227 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
228 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
229 const std::vector<std::vector<double>>
parameters = {{4.050000000000001},
230 {2.5912499999999903, 0.0002625000000000011},
231 {2.8012499999999214, 0.00024750000000000623},
232 {5.677499999999787, 4.500000000001207e-05},
233 {6.2137499999998145, 2.2500000000008228e-05},
234 {7.09151785714283, -1.8749999999999094e-05},
235 {8.57727272727282, -6.545454545454794e-05},
236 {5.969852941176529, -1.0294117647059968e-05},
237 {5.528483606557319, -2.581967213113981e-06},
238 {5.324999999999999}};
240 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R3PLITasPLIVefficiencyVeryTight", isoTypes,
241 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
242 cutFunction,
244 } else if (muWPname == "R3PLITasPLIVrejectionTight") {
245 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
246 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
247 const std::vector<std::vector<double>>
parameters = {{3.6750000000000007},
248 {2.4374999999999987, 0.00022500000000000008},
249 {2.572499999999916, 0.00022500000000000666},
250 {5.351249999999845, 2.2500000000008773e-05},
251 {7.113749999999581, -6.749999999998147e-05},
252 {7.213392857142764, -6.964285714285394e-05},
253 {7.4778409090906415, -7.977272727272016e-05},
254 {4.105790441176434, -1.3419117647058116e-05},
255 {3.590163934426209, -4.180327868852198e-06},
256 {3.1499999999999986}};
258 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R3PLITasPLIVrejectionTight", isoTypes,
259 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
260 cutFunction,
262 } else if (muWPname == "R3PLITasPLIVrejectionVeryTight") {
263 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
264 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
265 const std::vector<std::vector<double>>
parameters = {{3.974999999999998},
266 {2.5875000000000035, 0.0002549999999999993},
267 {2.8687499999999373, 0.00023250000000000495},
268 {5.527499999999797, 4.500000000001146e-05},
269 {6.048749999999677, 2.2500000000014293e-05},
270 {7.019196428571157, -2.4107142857133378e-05},
271 {8.878977272727232, -8.38636363636353e-05},
272 {5.708823529411479, -1.76470588235239e-05},
273 {5.215573770491751, -7.131147540982918e-06},
274 {4.649999999999999}};
276 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R3PLITasPLIVrejectionVeryTight", isoTypes,
277 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
278 cutFunction,
280 } else if (muWPname == "R2PLITasPLIVefficiencyTight") {
281 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
282 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
283 const std::vector<std::vector<double>>
parameters = {{3.974999999999998},
284 {2.789999999999986, 0.00021000000000000172},
285 {2.39249999999993, 0.00025500000000000555},
286 {5.737499999999933, 1.5000000000003797e-05},
287 {7.413749999999598, -6.749999999998225e-05},
288 {7.098214285714245, -5.3571428571427186e-05},
289 {6.934090909090853, -4.909090909090761e-05},
290 {5.253676470587868, -1.6176470588228218e-05},
291 {4.275000000000021, -3.17095862137587e-19},
292 {4.349999999999998}};
294 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R2PLITasPLIVefficiencyTight", isoTypes,
295 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
296 cutFunction,
298 } else if (muWPname == "R2PLITasPLIVefficiencyVeryTight") {
299 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
300 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
301 const std::vector<std::vector<double>>
parameters = {{4.199999999999999},
302 {2.9625000000000026, 0.00022499999999999956},
303 {2.7674999999999454, 0.0002550000000000043},
304 {5.752499999999801, 4.500000000001117e-05},
305 {6.2887499999995, 2.2500000000022112e-05},
306 {7.265625000000208, -2.4107142857150163e-05},
307 {8.287500000000128, -5.863636363636705e-05},
308 {5.99329044117658, -1.194852941176682e-05},
309 {5.653893442622939, -5.5327868852457475e-06},
310 {5.25}};
312 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R2PLITasPLIVefficiencyVeryTight", isoTypes,
313 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
314 cutFunction,
316 } else if (muWPname == "R2PLITasPLIVrejectionTight") {
317 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
318 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
319 const std::vector<std::vector<double>>
parameters = {{3.8999999999999986},
320 {2.853749999999994, 0.00018750000000000065},
321 {2.321250000000002, 0.0002474999999999998},
322 {5.426250000000083, 2.2499999999995095e-05},
323 {7.312499999999872, -7.499999999999437e-05},
324 {7.552232142857126, -8.303571428571374e-05},
325 {7.140340909090713, -7.022727272726753e-05},
326 {4.7727941176470186, -2.499999999999921e-05},
327 {3.679918032786865, -5.409836065573509e-06},
328 {3.0}};
330 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R2PLITasPLIVrejectionTight", isoTypes,
331 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
332 cutFunction,
334 } else if (muWPname == "R2PLITasPLIVrejectionVeryTight") {
335 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
336 const std::vector<double> boundaries = {5500.0, 10000.0, 15000.0, 20000.0, 25000.0, 32000.0, 43000.0, 60000.0, 95000.0};
337 const std::vector<std::vector<double>>
parameters = {{4.199999999999999},
338 {2.9887499999999982, 0.0002175000000000001},
339 {2.9287500000000426, 0.0002324999999999965},
340 {5.602499999999976, 4.500000000000134e-05},
341 {6.262499999999722, 1.5000000000012243e-05},
342 {7.651339285714248, -4.5535714285712985e-05},
343 {8.947159090908924, -8.659090909090467e-05},
344 {5.994117647058617, -2.3529411764701903e-05},
345 {4.8565573770491985, -2.213114754098622e-06},
346 {4.349999999999998}};
348 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R2PLITasPLIVrejectionVeryTight", isoTypes,
349 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
350 cutFunction,
352 } else if (muWPname == "R3PLITVeryLoose") {
353 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
354 const std::vector<double> boundaries = {5000.0, 6000.0, 7000.0, 8000.0, 9000.0, 10000.0, 11000.0, 12000.0, 13000.0, 14000.0, 15000.0, 16000.0, 17000.0, 18000.0, 19000.0, 20000.0, 21000.0, 22000.0, 23000.0, 24000.0, 25000.0, 26000.0, 27000.0, 28000.0, 29000.0, 30000.0, 31000.0, 33000.0, 34000.0, 35000.0, 36000.0, 37000.0, 38000.0, 40000.0, 41000.0, 42000.0, 44000.0, 46000.0, 48000.0, 49000.0, 50000.0, 51000.0, 52000.0, 54000.0, 56000.0, 58000.0, 60000.0, 65000.0, 70000.0, 75000.0, 80000.0, 90000.0, 100000.0, 110000.0, 120000.0, 160000.0};
355 const std::vector<std::vector<double>>
parameters = {{0.0000}, {1.0500}, {1.5000}, {1.8000}, {2.1750}, {2.5500}, {2.7000}, {3.0000}, {3.2250}, {3.4500}, {3.6000}, {3.0750}, {3.1500}, {3.3000}, {3.3750}, {3.4500}, {3.2250}, {3.3000}, {3.4500}, {3.5250}, {3.6000}, {3.3750}, {3.4500}, {3.5250}, {3.6000}, {3.6750}, {3.4500}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {3.9750}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {3.9750}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {4.0500}, {4.1250}, {4.2750}, {3.9000}, {4.0500}, {4.1250}, {3.3750}, {3.4500}, {3.2250}, {3.3000}};
357 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R3PLITVeryLoose", isoTypes,
358 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
359 cutFunction,
361 } else if (muWPname == "R2PLITVeryLoose") {
362 const std::vector<std::string>& isoTypes = {"PLIT_TPLTmu_pmuxpromp", "PLIT_TPLTmu_pnpxall"};
363 const std::vector<double> boundaries = {5000.0, 6000.0, 7000.0, 8000.0, 9000.0, 10000.0, 11000.0, 12000.0, 13000.0, 14000.0, 15000.0, 17000.0, 18000.0, 19000.0, 20000.0, 21000.0, 22000.0, 23000.0, 24000.0, 25000.0, 26000.0, 27000.0, 28000.0, 29000.0, 30000.0, 32000.0, 33000.0, 34000.0, 35000.0, 36000.0, 38000.0, 39000.0, 40000.0, 41000.0, 43000.0, 44000.0, 46000.0, 48000.0, 50000.0, 51000.0, 54000.0, 56000.0, 58000.0, 60000.0, 65000.0, 70000.0, 75000.0, 80000.0, 90000.0, 100000.0, 110000.0, 120000.0, 160000.0};
364 const std::vector<std::vector<double>>
parameters = {{0.0000}, {1.3500}, {1.6500}, {2.0250}, {2.3250}, {2.7000}, {2.7750}, {3.0000}, {3.3000}, {3.5250}, {3.6000}, {3.2250}, {3.3750}, {3.4500}, {3.5250}, {3.3000}, {3.3750}, {3.4500}, {3.5250}, {3.6000}, {3.3750}, {3.4500}, {3.5250}, {3.6000}, {3.6750}, {3.4500}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {3.9750}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {3.5250}, {3.6000}, {3.6750}, {3.7500}, {3.8250}, {3.9000}, {4.0500}, {4.1250}, {3.7500}, {3.8250}, {4.0500}, {3.3000}, {3.4500}, {3.1500}, {3.0750}};
366 wp->addCut(std::make_unique<IsolationConditionCombined>(
"R2PLITVeryLoose", isoTypes,
367 std::make_unique<TF2>("muonPLIT", "TMath::Log(x / y)"),
368 cutFunction,
370 } else {
372 return StatusCode::FAILURE;
373 }
375#ifndef XAOD_STANDALONE
377#endif
378 m_muWPs.push_back(std::move(wp));
379 return StatusCode::SUCCESS;
380 }
@ 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