ATLAS Offline Software
Loading...
Searching...
No Matches
EventSelectionConfigNObject_unitTest.py
Go to the documentation of this file.
1#!/usr/bin/env python
2# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3"""Unit tests for the N-object pT selectors: EL_N, MU_N, JET_N, PH_N, TAU_N,
4LJET_N, OBJ_N. All build CP::NObjectPtSelectorAlg, differing only in source."""
5
6import unittest
7from EventSelectionAlgorithms.EventSelectionConfigTestSupport import run, named, prop
8
9# keyword -> (option name, container name)
10FAMILY = {
11 "EL_N": ("electrons", "AnaElectrons"),
12 "MU_N": ("muons", "AnaMuons"),
13 "JET_N": ("jets", "AnaJets"),
14 "PH_N": ("photons", "AnaPhotons"),
15 "TAU_N": ("taus", "AnaTaus"),
16 "LJET_N": ("largeRjets", "AnaLRJets"),
17}
18TAG = {"EL_N": "NEL", "MU_N": "NMU", "JET_N": "NJET", "PH_N": "NPH",
19 "TAU_N": "NTAU", "LJET_N": "NLJET"}
20
21
22class TestNObjectMinimal(unittest.TestCase):
24 for kw, (opt, val) in FAMILY.items():
25 with self.subTest(kw=kw):
26 algs = named(run(f"{kw} 25000 >= 2", containers={opt: val}), TAG[kw])
27 self.assertEqual(len(algs), 1)
28 alg = algs[0]
29 self.assertEqual(alg.getType(), "CP::NObjectPtSelectorAlg")
30 self.assertEqual(prop(alg, "minPt"), 25000.0)
31 self.assertEqual(prop(alg, "sign"), "GE")
32 self.assertEqual(prop(alg, "count"), 2)
33
35 for kw, (opt, val) in FAMILY.items():
36 with self.subTest(kw=kw):
37 algs = named(run(f"{kw} mysel 25000 >= 2", containers={opt: val}), TAG[kw])
38 self.assertIn("mysel", prop(algs[0], "objectSelection"))
39
41 for kw, (opt, val) in FAMILY.items():
42 with self.subTest(kw=kw):
43 algs = named(run(f"{kw} mysel 25000 >= 2",
44 containers={opt: f"{val}.baseline"}), TAG[kw])
45 sel = prop(algs[0], "objectSelection")
46 self.assertIn("baseline", sel)
47 self.assertIn("mysel", sel)
48
49 def test_all_signs(self):
50 for sym, enum in [("<", "LT"), (">", "GT"), ("==", "EQ"),
51 (">=", "GE"), ("<=", "LE")]:
52 with self.subTest(sign=sym):
53 algs = named(run(f"JET_N 30000 {sym} 2", containers={"jets": "AnaJets"}), "NJET")
54 self.assertEqual(prop(algs[0], "sign"), enum)
55
56
57class TestNObjectErrors(unittest.TestCase):
59 for kw, (opt, _) in FAMILY.items():
60 if kw == "LJET_N": # no missing-input guard in the source
61 continue
62 with self.subTest(kw=kw):
63 self.assertRaises(ValueError, run, f"{kw} 25000 >= 2")
64
66 for kw, (opt, val) in FAMILY.items():
67 with self.subTest(kw=kw):
68 self.assertRaises(ValueError, run,
69 f"{kw} 25000 >= 2 extra junk", containers={opt: val})
70
71
72class TestObjN(unittest.TestCase):
74 algs = named(run("OBJ_N MyContainer 30000 >= 2",
75 containers={"jets": "MyContainer"}), "NOBJ")
76 self.assertEqual(len(algs), 1)
77 self.assertEqual(prop(algs[0], "minPt"), 30000.0)
78 self.assertEqual(prop(algs[0], "count"), 2)
79
81 self.assertRaises(ValueError, run, "OBJ_N MyContainer 30000 >= 2 extra",
82 containers={"jets": "MyContainer"})
83 self.assertRaises(ValueError, run, "OBJ_N 30000 >= 2",
84 containers={"jets": "MyContainer"})
85
86
87if __name__ == "__main__":
88 unittest.main()
int run(int argc, char *argv[])