ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMuonHypoConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2
3
4# import Hypo Algs/Tools
5from AthenaConfiguration.ComponentFactory import CompFactory # tools are imported from the factory, (NewJO)
6
7# import monitoring
8from TrigMuonHypo.TrigMuonHypoMonitoring import (
9 TrigmuCombHypoMonitoring,
10 TrigMuonEFHypoMonitoring,
11 TrigMuonEFIdtpHypoMonitoring,
12 TrigL2MuonOverlapRemoverMonitoringMucomb,
13 TrigMuonEFInvMassHypoMonitoring,
14 TrigMuonEFIdtpInvMassHypoMonitoring,
15 TrigMuonEFTrackIsolationMonitoring
16)
17
18monitorAll = False #should only be true for local debugging to have histograms from all chains
19
20# other imports
21from AthenaCommon.SystemOfUnits import GeV
22
23from AthenaCommon.Logging import logging
24log = logging.getLogger('TrigMuonHypoConfig')
25
26muFastThresholds = {
27 # added for Run3 low-mu 2mu3
28 '3GeV_v22a' : [ [0,9.9], [ 0.1 ] ],
29 # 2011a tuning + 2015 tuning
30 '4GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.38, 1.25, 3.17, 3.41] ],
31 '4GeV_barrelOnly_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.38, 1000., 1000., 1000.] ],
32 '6GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 5.17, 3.25, 4.69, 5.14] ],
33 '8GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 6.63, 5.17, 6.39, 6.81] ],
34 '10GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 8.28, 6.35, 7.19, 8.58] ],
35 #not optimized: ATR-20049
36 '11GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 8.99, 6.62, 7.40, 9.32] ],
37 '13GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 10.42, 7.16, 7.81, 10.80] ],
38 '14GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 11.15, 7.58, 8.43, 11.61] ],
39 '15GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 11.31, 10.52, 12.00, 13.24] ],
40 '18GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 14.33, 9.45, 10.96, 14.35] ],
41 '20GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.10, 3.25, 2.69, 5.14] ], # new
42 '22GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.20, 3.25, 4.90, 5.00] ], # new
43 '23GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.20, 3.25, 4.90, 5.00] ], # new
44 '24GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 4.80, 3.25, 4.50, 5.10] ], # new
45 '26GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.50, 3.25, 4.45, 4.40] ], # new
46 '28GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.70, 3.25, 4.50, 5.40] ], # new
47 '30GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.00, 4.00, 4.30, 5.55] ], # new
48 '32GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.00, 6.50, 4.20, 6.00] ], # new
49 '34GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.40, 7.20, 4.60, 9.00] ], # new
50 '35GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.30, 5.40, 4.80, 5.00] ], # new
51 '36GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 4.20, 3.90, 4.30, 5.00] ], # new
52 '40GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.16, 6.20, 5.50, 10.00] ], # new
53 '45GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.20, 9.80, 5.30, 10.70] ], # new
54 '48GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 4.00, 7.30, 5.50, 9.50] ], # new
55 '50GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 1.30, 8.10, 4.50, 9.50] ], # new
56 '60GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 21.20, 25.38, 29.54] ],
57 '80GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 21.20, 25.38, 29.54] ],
58 '40GeV_uptoEC2_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 21.20, 25.38, 1000.] ],
59 '40GeV_barrelOnly_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 1000., 1000., 1000.] ],
60 '50GeV_barrelOnly_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 1000., 1000., 1000.] ],
61 '60GeV_barrelOnly_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.13, 1000., 1000., 1000.] ],
62 }
63
64muCombThresholds = {
65 # added for Run3 low-mu 2mu3
66 '3GeV_v22a' : [ [0,1.05,1.5,2.0,9.9], [ 2.82, 2.76, 2.64, 2.64] ],
67 # original + 2015 tuning
68 '2GeV_v15a' : [ [0,9.9], [ 2.000] ],
69 '3GeV_v15a' : [ [0,9.9], [ 3.000] ],
70 '4GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.86, 3.77, 3.69, 3.70] ],
71 '5GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 4.9, 4.8, 4.8, 4.8] ],
72 '6GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 5.87, 5.79, 5.70, 5.62] ],
73 '7GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 6.8, 6.7, 6.7, 6.6] ],
74 '8GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 7.80, 7.72, 7.59, 7.46] ],
75 '10GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 9.73, 9.63, 9.45, 9.24] ],
76 '11GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 10.8, 10.4, 10.6, 10.6] ],
77 '12GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 11.7, 11.3, 11.4, 11.5] ],
78 '13GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 12.62, 12.48, 12.24, 11.88] ],
79 '14GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 13.57, 13.44, 13.21, 12.77] ],
80 '15GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 14.50, 14.00, 14.00, 14.50] ],
81 '16GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 15.47, 15.09, 14.98, 15.08] ], # Lidia - extrapolated not optimized
82 '18GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 17.41, 17.27, 16.95, 16.25] ],
83 '20GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 16.50, 19.19, 18.80, 17.00] ], # new
84 '22GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.70, 21.07, 19.13, 18.80] ], # new
85 '23GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.70, 21.07, 19.13, 18.80] ], # new
86 '24GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.10, 21.07, 18.60, 19.35] ], # new
87 '25GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 24.20, 23.20, 23.20, 22.60] ],
88 '26GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.50, 21.07, 20.22, 19.65] ], # new
89 '27GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 26.20, 25.10, 25.10, 24.40] ],
90 '28GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.30, 21.07, 20.77, 20.00] ], # new
91 '30GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.80, 21.00, 21.00, 20.10] ], # new
92 '32GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 16.50, 22.50, 20.00, 21.50] ], # new
93 '34GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 18.40, 24.10, 21.45, 23.00] ], # new
94 '35GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 17.40, 25.90, 23.40, 23.80] ], # new
95 '36GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 16.90, 25.60, 24.20, 24.00] ], # new
96 '38GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 35.80, 35.40, 35.40, 33.60] ],
97 '40GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 13.20, 27.90, 27.30, 27.60] ], # new
98 '40GeV_slow_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 40.00, 40.00, 40.00, 40.00] ],
99 '45GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 17.70, 33.10, 31.60, 33.30] ], # new
100 '48GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 14.00, 33.80, 34.20, 35.90] ], # new
101 '50GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 8.30, 33.55, 32.40, 37.70] ], # new
102 '60GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 45.0, 45.0, 45.0, 45.0] ],
103 '60GeV_slow_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 47.0, 47.0, 47.0, 47.0] ],
104 '70GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 49.0, 49.0, 49.0, 49.0] ],
105 '80GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 56.0, 56.0, 56.0, 56.0] ],
106 '100GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 70.0, 70.0, 70.0, 70.0] ],
107
108 '5GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 4.9, 4.8, 4.8, 4.8] ],
109 '8GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 7.8, 7.7, 7.7, 7.7] ],
110 '10GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 9.8, 9.5, 9.6, 9.7] ],
111 '15GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 14.50, 14.00, 14.00, 14.50] ],
112 '20GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 19.31, 19.19, 18.80, 17.95] ],
113 '25GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 24.2, 23.2, 23.2, 22.6] ],
114 '30GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 29.0, 28.0, 28.0, 27.0] ],
115 '50GeV_v16' : [ [0,1.05,1.5,2.0,9.9], [ 40.0, 40.0, 40.0, 40.0] ],
116 }
117
118trigMuonEFSAThresholds = {
119 # added for Run3 low-mu 2mu3
120 '3GeV_v22a' : [ [0,9.9], [ 1.0 ] ],
121 #
122 '0GeV' : [ [0,9.9], [ 0.100 ] ],
123 '2GeV' : [ [0,9.9], [ 2.000 ] ],
124 '3GeV' : [ [0,9.9], [ 3.000 ] ],
125 '4GeV' : [ [0,1.05,1.5,2.0,9.9], [ 3.0, 2.5, 2.5, 2.5] ],
126 '4GeV_barrelOnly' : [ [0,1.05,1.5,2.0,9.9], [ 3.0,1000.0,1000.0,1000.0]],
127 '5GeV' : [ [0,1.05,1.5,2.0,9.9], [ 4.6, 3.3, 4.0, 4.5] ],
128 '6GeV' : [ [0,1.05,1.5,2.0,9.9], [ 5.4, 4.5, 4.9, 5.3] ],
129 '7GeV' : [ [0,1.05,1.5,2.0,9.9], [ 6.3, 5.6, 5.6, 6.3] ],
130 '8GeV' : [ [0,1.05,1.5,2.0,9.9], [ 7.2, 6.7, 6.4, 7.3] ],
131 '10GeV' : [ [0,1.05,1.5,2.0,9.9], [ 8.9, 9.0, 8.4, 9.2] ],
132 '11GeV' : [ [0,1.05,1.5,2.0,9.9], [ 9.8, 10.1, 9.3, 10.1] ],
133 '12GeV' : [ [0,1.05,1.5,2.0,9.9], [ 10.6, 11.0, 10.2, 11.0] ],
134 '13GeV' : [ [0,1.05,1.5,2.0,9.9], [ 11.4, 12.0, 11.1, 12.0] ],
135 '14GeV' : [ [0,1.05,1.5,2.0,9.9], [ 12.2, 13.0, 12.1, 13.0] ],
136 '15GeV' : [ [0,1.05,1.5,2.0,9.9], [ 13.0, 14.0, 13.0, 14.0] ],
137 '16GeV' : [ [0,1.05,1.5,2.0,9.9], [ 13.0, 14.0, 13.0, 14.0] ], # not optimized
138 '18GeV' : [ [0,1.05,1.5,2.0,9.9], [ 15.7, 16.6, 15.4, 16.3] ],
139 '20GeV' : [ [0,1.05,1.5,2.0,9.9], [ 18.20, 16.50, 17.00, 18.00] ], # new
140 '22GeV' : [ [0,1.05,1.5,2.0,9.9], [ 20.20, 18.00, 17.00, 19.00] ], # new
141 '23GeV' : [ [0,1.05,1.5,2.0,9.9], [ 21.20, 18.75, 17.80, 19.60] ], # new
142 '24GeV' : [ [0,1.05,1.5,2.0,9.9], [ 22.20, 19.50, 18.60, 20.20] ], # new
143 '26GeV' : [ [0,1.05,1.5,2.0,9.9], [ 23.50, 21.00, 20.15, 22.00] ], # new
144 '28GeV' : [ [0,1.05,1.5,2.0,9.9], [ 23.40, 21.00, 20.55, 22.50] ], # new
145 '30GeV' : [ [0,1.05,1.5,2.0,9.9], [ 25.20, 22.10, 21.70, 24.40] ], # new
146 '32GeV' : [ [0,1.05,1.5,2.0,9.9], [ 27.05, 20.50, 22.30, 26.12] ], # new
147 '34GeV' : [ [0,1.05,1.5,2.0,9.9], [ 28.90, 22.00, 24.00, 27.88] ], # new
148 '35GeV' : [ [0,1.05,1.5,2.0,9.9], [ 30.00, 20.90, 24.90, 28.85] ], # new
149 '36GeV' : [ [0,1.05,1.5,2.0,9.9], [ 30.50, 23.77, 26.40, 28.00] ], # new
150 '40GeV' : [ [0,1.05,1.5,2.0,9.9], [ 33.00, 27.30, 30.50, 32.90] ], # new
151 '40GeV_barrelOnly' : [ [0,1.05,1.5,2.0,9.9], [ 31.50,1000.0,1000.0,1000.0] ],
152 '40GeV_uptoEC2' : [ [0,1.05,1.5,2.0,9.9], [ 31.50, 30.00, 28.50, 1000.0] ],
153 '45GeV' : [ [0,1.05,1.5,2.0,9.9], [ 41.20, 31.90, 35.10, 37.50] ], # new
154 '48GeV' : [ [0,1.05,1.5,2.0,9.9], [ 43.00, 34.45, 38.00, 40.30] ], # new
155 '50GeV' : [ [0,1.05,1.5,2.0,9.9], [ 40.00, 36.30, 40.00, 42.10] ], # new
156 '50GeV_barrelOnly' : [ [0,1.05,1.5,2.0,9.9], [ 45.0,1000.0,1000.0,1000.0]],
157 '60GeV' : [ [0,1.05,1.5,2.0,9.9], [ 54.0, 54.0, 54.0, 54.0] ],
158 '60GeV_barrelOnly' : [ [0,1.05,1.5,2.0,9.9], [ 54.0,1000.0,1000.0,1000.0]],
159 '70GeV' : [ [0,1.05,1.5,2.0,9.9], [ 63.0, 63.0, 63.0, 63.0] ],
160 '80GeV' : [ [0,1.05,1.5,2.0,9.9], [ 72.0, 72.0, 72.0, 72.0] ],
161 '100GeV' : [ [0,1.05,1.5,2.0,9.9], [ 90.0, 90.0, 90.0, 90.0] ],
162 }
163
164efCombinerThresholds = {
165 #
166 # added for Run3 low-mu 2mu3
167 '3GeV_v22a' : [ [0,1.05,1.5,2.0,9.9], [ 2.94, 2.91, 2.77, 2.72] ],
168 # original + 2015 tuning
169 '2GeV_v15a' : [ [0,9.9], [2.000] ],
170 '3GeV_v15a' : [ [0,9.9], [3.000] ],
171 '4GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 3.94, 3.91, 3.77, 3.72] ],
172 '5GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 4.91, 4.86, 4.84, 4.83] ],
173 '6GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 5.92, 5.86, 5.70, 5.64] ],
174 '7GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 6.85, 6.77, 6.74, 6.74] ],
175 '8GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 7.89, 7.81, 7.60, 7.53] ],
176 '10GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 9.84, 9.77, 9.54, 9.47] ],
177 '11GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 10.74, 10.64, 10.58, 10.53] ],
178 '12GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 11.70, 11.59, 11.53, 11.49] ],
179 '13GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 12.80, 12.67, 12.43, 12.38] ],
180 '14GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 13.75, 13.62, 13.38, 13.36] ],
181 '15GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 14.63, 14.49, 14.42, 14.38] ],
182 '16GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 15.65, 15.50, 15.39, 15.37] ], # Lidia - extrapolated not optimized
183 '18GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 17.68, 17.51, 17.34, 17.34] ],
184 '20GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 19.65, 19.50, 19.20, 19.30] ], # new
185 '22GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 21.64, 21.32, 21.30, 21.30] ], # new
186 '23GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 22.59, 22.27, 22.25, 22.27] ], # new
187 '24GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 23.55, 23.21, 23.20, 23.25] ], # new
188 '26GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 25.60, 25.15, 25.20, 25.20] ], # new
189 '27GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 26.26, 26.12, 26.11, 26.02] ],
190 '28GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 27.28, 27.09, 27.15, 27.20] ], # new
191 '30GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 29.20, 29.00, 29.00, 29.00] ], # new
192 '32GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 31.20, 30.95, 30.90, 30.84] ], # new
193 '34GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 33.16, 32.88, 32.80, 32.70] ], # new
194 '35GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 34.15, 33.82, 33.65, 33.65] ], # new
195 '36GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 35.23, 34.75, 34.50, 34.60] ], # new
196 '38GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 36.87, 36.67, 36.55, 36.48] ],
197 '40GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 38.80, 38.56, 38.40, 38.90] ], # new
198 '45GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 43.75, 43.30, 43.10, 43.90] ], # new
199 '48GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 46.50, 46.20, 46.00, 46.80] ], # new
200 '50GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 48.00, 48.20, 48.00, 48.80] ], # new
201 '60GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 54.00, 54.00, 54.00, 54.00] ],
202 '70GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 63.00, 63.00, 63.00, 63.00] ],
203 '80GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 72.00, 72.00, 72.00, 72.00] ],
204 '100GeV_v15a' : [ [0,1.05,1.5,2.0,9.9], [ 90.00, 90.00, 90.00, 90.00] ],
205 }
206
207
208muFastThresholdsForECWeakBRegion = {
209 #
210 # added for Run3 low-mu 2mu3
211 '3GeV_v22a' : [ 0.1, 0.1 ],
212 # 2011a tuning + 2015 tuning
213 '4GeV_v15a' : [ 2.72, 1.58],
214 '4GeV_barrelOnly_v15a' : [ 1000., 1000. ],
215 '6GeV_v15a' : [ 3.91, 2.22],
216 '8GeV_v15a' : [ 4.65, 3.26],
217 '10GeV_v15a' : [ 5.96, 4.24],
218 #not optimized: ATR-20049
219 '11GeV_v15a' : [ 6.19, 4.37 ],
220 '13GeV_v15a' : [ 6.65, 4.64 ],
221 '14GeV_v15a' : [ 6.78, 5.03 ],
222 '15GeV_v15a' : [ 7.61, 7.81 ],
223 '18GeV_v15a' : [ 8.48, 7.26 ],
224 '20GeV_v15a' : [ 8.63, 7.26 ],
225 '22GeV_v15a' : [ 9.53, 7.77 ],
226 '23GeV_v15a' : [ 9.53, 7.77 ],
227 '24GeV_v15a' : [ 9.02, 8.31 ],
228 '26GeV_v15a' : [ 9.89, 8.77 ],
229 '28GeV_v15a' : [ 9.89, 8.77 ], # copy of 26
230 '30GeV_v15a' : [ 14.41, 17.43 ],
231 '32GeV_v15a' : [ 14.41, 17.43 ], # copy of 30
232 '34GeV_v15a' : [ 14.41, 17.43 ], # copy of 30
233 '35GeV_v15a' : [ 14.41, 17.43 ], # copy of 30
234 '36GeV_v15a' : [ 10.78, 10.66 ],
235 '40GeV_v15a' : [ 15.07, 18.02 ],
236 '45GeV_v15a' : [ 15.07, 18.02 ], # copy of 40
237 '48GeV_v15a' : [ 15.07, 18.02 ], # copy of 50
238 '50GeV_v15a' : [ 15.07, 18.02 ], # lixia, not optimized
239 '60GeV_v15a' : [ 15.07, 18.02 ],
240 '80GeV_v15a' : [ 15.07, 18.02 ],
241 '40GeV_uptoEC2_v15a' : [ 15.07, 18.02 ],
242 '40GeV_barrelOnly_v15a' : [ 1000., 1000. ],
243 '50GeV_barrelOnly_v15a' : [ 1000., 1000. ],
244 '60GeV_barrelOnly_v15a' : [ 1000., 1000. ],
245 }
246
247
248# Working points for EF track isolation algorithm
249# syntax is:
250# 'WPname' : cut on 0.3 cone
251# put < 0 for no cut
252trigMuonEFTrkIsoThresholds = {
253 'ivarloose' : 0.16, #ivarloose
254 'ivarmedium' : 0.07, #ivarmedium
255 'ivartight' : 0.06, #ivartight
256 'ivarverytight' : 0.04, #ivarverytight
257 'iloosems' : 3000.0 #ms-only iso
258 }
259
260trigMuonLrtd0Cut = {
261 'd0loose' : 2.0,
262 'd0medium' : 3.0,
263 'd0tight' : 5.0
264 }
265
266#Possible dimuon mass window cuts
267#Fomat is [lower bound, upper bound] in GeV
268# <0 for no cut
269trigMuonEFInvMassThresholds = {
270 'invmJPsiOS' : [2.5, 4.3],
271 'invmDimu' : [1.5, 14.],
272 'idZmumu' : [50., 130.],
273 'idJpsimumu' : [1., 5.],
274}
275
276# Monitoring groups to monitor
277muonHypoMonGroups = ['muonMon:online']
278idHypoMonGroups = ['idMon:t0','idMon:shifter']
279
280def getThresholdsFromDict( chainDict ):
281 cparts = [i for i in chainDict['chainParts'] if i['signature']=='Muon' or i['signature']=='Bphysics']
282 return sum( [ [part['threshold']]*int(part['multiplicity']) for part in cparts ], [])
283
284
285def TrigMufastHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs):
286 return CompFactory.TrigMufastHypoAlg(name, **kwargs)
287
288def TrigMufastHypoToolFromDict(flags, chainDict):
289
290 chainPart = chainDict['chainParts'][0]
291
292 doOverlapRemoval = False
293 if chainPart['signature'] == 'Bphysics' or 'l2io' in chainPart['l2AlgInfo']:
294 doOverlapRemoval = False
295 elif int(chainPart['multiplicity']) > 1:
296 doOverlapRemoval = True
297 elif len(chainDict['signatures']) > 1 and not chainPart['extra']:
298 doOverlapRemoval = True
299
300 doMonitoring = monitorAll or any(group in muonHypoMonGroups for group in chainDict['monGroups'])
301
302 config = TrigMufastHypoToolConfig(chainDict['chainName'], chainPart, chainDict['eventBuildType'], doOverlapRemoval, doMonitoring)
303 config.compile(flags)
304 return config.tool()
305
306
308 def __init__(self, name, cpart, eventBuildType, doOverlapRemoval = False, doMonitoring = False):
309
310 from AthenaCommon.Logging import logging
311 self.__log = logging.getLogger('TrigMufastHypoToolConfig')
312 self.__name = name
313
314 self.__threshold = int(cpart['threshold'])
315 self.__multiplicity = int(cpart['multiplicity'])
316 self.__isPassThrough = 'mucombTag' in cpart['extra']
317 self.__isCalibration = 'muoncalib' in cpart['extra']
318 self.__isMuonDSCalibration = 'MuonDS' in eventBuildType
319 self.__isBarrelOnly = '0eta105' in cpart['etaRange']
320 self.__useGeV_v15a = any(x in cpart['addInfo'] for x in ['idperf', 'idtp', '3layersEC'])
321 self.__doL2MT = 'l2mt' in cpart['l2AlgInfo']
322 self.__doOverlapRemoval = doOverlapRemoval
323 self.__doMonitoring = doMonitoring
324
325 from AthenaConfiguration.ComponentFactory import CompFactory
326 tool = CompFactory.TrigMufastHypoTool(name)
327 self.__tool = tool
328
329 def multiplicity(self):
330 return self.__multiplicity
331
332 def tool(self):
333 return self.__tool
334
335 def toolName(self):
336 return self.__name
337
338 def log(self):
339 return self.__log
340
341 def isPassThrough(self):
342 return self.__isPassThrough
343
344 def isCalibration(self):
345 return self.__isCalibration
346
348 return self.__isMuonDSCalibration
349
350 def isBarrelOnly(self):
351 return self.__isBarrelOnly
352
353 def useGeV_v15a(self):
354 return self.__useGeV_v15a or self.getThresholdValue() < 5
355
356 def doMonitoring(self):
357 return self.__doMonitoring
358
359 def doL2MT(self):
360 return self.__doL2MT
361
363 return self.__doOverlapRemoval
364
366 return self.__threshold
367
369 threshold = str(self.getThresholdValue())
370 key = '6GeV_v15a'
371 if self.useGeV_v15a():
372 key = threshold + 'GeV_v15a'
373 if self.getThresholdValue() == 3:
374 key = threshold + 'GeV_v22a'
375 elif self.isBarrelOnly():
376 key = threshold + 'GeV_barrelOnly_v15a'
377 elif self.getThresholdValue() >= 20:
378 key = threshold + 'GeV_v15a'
379 return key
380
382 self.tool().ApplyOR = True
383 # cut defintion
384 self.tool().RequireDR = True
385 self.tool().RequireMass = True
386 self.tool().RequireSameSign = True
387 # BB
388 self.tool().DRThresBB = 0.05
389 self.tool().MassThresBB = 0.20
390 # BE
391 self.tool().DRThresBE = 0.05
392 self.tool().MassThresBE = 0.20
393 # EE
394 self.tool().EtaBinsEC = [0.0, 1.9, 2.1, 9.9]
395 self.tool().DRThresEC = [0.06, 0.05, 0.05]
396 self.tool().MassThresEC = [0.20, 0.15, 0.10]
397
398 def setL2MT(self):
399 self.tool().ApplyOR = True
400 # cut defintion
401 self.tool().RequireDR = True
402 self.tool().RequireMass = True
403 self.tool().RequireSameSign = True
404 # BB
405 self.tool().DRThresBB = 0.05
406 self.tool().MassThresBB = 0.20
407 # BE
408 self.tool().DRThresBE = 0.05
409 self.tool().MassThresBE = 0.20
410 # EE
411 self.tool().EtaBinsEC = [0.0, 1.9, 2.1, 9.9]
412 self.tool().DRThresEC = [0.06, 0.05, 0.05]
413 self.tool().MassThresEC = [0.20, 0.15, 0.10]
414
415 def compile(self, flags):
416
417 nt = self.multiplicity()
418
419 if self.isCalibration():
420 if self.isMuonDSCalibration():
421 self.tool().AcceptAll = True
422 else:
423 self.tool().AcceptAll = False
424 self.tool().DoCalib = True
425 self.tool().PtBins = [ [ 0.0, 2.5 ] ] * nt
426
427 elif self.isPassThrough():
428 self.tool().AcceptAll = True
429 self.tool().PtBins = [ [-10000.,10000.] ]
430 self.tool().PtThresholds = [ [ -1. * GeV ] ]
431 self.tool().PtThresholdForECWeakBRegionA = [ 3. * GeV ]
432 self.tool().PtThresholdForECWeakBRegionB = [ 3. * GeV ]
433
434 else:
435 if(nt==0): # for zero multiplicity
436 nt = 1
437 self.log().debug('Set %d thresholds', nt)
438 self.tool().AcceptAll = False
439 self.tool().PtBins = [ [ 0.0, 2.5 ] ] * nt
440 self.tool().PtThresholds = [ [ 5.49 * GeV ] ] * nt
441 self.tool().PtThresholdForECWeakBRegionA = [ 3. * GeV ] * nt
442 self.tool().PtThresholdForECWeakBRegionB = [ 3. * GeV ] * nt
443
444 thvaluename = self.getThresholdName()
445
446 for th in range(nt):
447 try:
448 values = muFastThresholds[thvaluename]
449 self.tool().PtBins[th] = values[0]
450 self.tool().PtThresholds[th] = [ x * GeV for x in values[1] ]
451 self.log().debug('Configration of threshold[%d] %s', th, self.tool().PtThresholds[th])
452 self.log().debug('Configration of PtBins[%d] %s', th, self.tool().PtBins[th])
453 if thvaluename in muFastThresholdsForECWeakBRegion:
454 spThres = muFastThresholdsForECWeakBRegion[thvaluename]
455 self.tool().PtThresholdForECWeakBRegionA[th] = spThres[0] * GeV
456 self.tool().PtThresholdForECWeakBRegionB[th] = spThres[1] * GeV
457 else:
458 self.log().debug('No special thresholds for EC weak Bfield regions for %s. Copy EC1 for region A, EC2 for region B.', thvaluename)
459 spThres = values[0][1]
460 if thvaluename == '2GeV' or thvaluename == '3GeV':
461 self.tool().PtThresholdForECWeakBRegionA[th] = spThres[0] * GeV
462 self.tool().PtThresholdForECWeakBRegionB[th] = spThres[0] * GeV
463 else:
464 self.tool().PtThresholdForECWeakBRegionA[th] = spThres[1] * GeV
465 self.tool().PtThresholdForECWeakBRegionB[th] = spThres[2] * GeV
466
467 self.log().debug('Thresholds for A[%d]/B[%d] = %d/%d', th, th, self.tool().PtThresholdForECWeakBRegionA[th], self.tool().PtThresholdForECWeakBRegionB[th])
468
469 except LookupError:
470 raise Exception('MuFast Hypo Misconfigured: threshold %r not supported' % thvaluename)
471
472 if self.doL2MT():
473 self.setL2MT()
474 elif self.doOverlapRemoval():
475 self.setOverlapRemoval()
476
477 if self.doMonitoring():
478 if self.doOverlapRemoval():
479 from TrigMuonHypo.TrigMuonHypoMonitoring import TrigL2MuonOverlapRemoverMonitoringMufast
480 self.tool().MonTool = TrigL2MuonOverlapRemoverMonitoringMufast(flags, 'TrigMufastHypoTool/' + self.toolName())
481 else:
482 from TrigMuonHypo.TrigMuonHypoMonitoring import TrigMufastHypoMonitoring
483 self.tool().MonTool = TrigMufastHypoMonitoring(flags, 'TrigMufastHypoTool/' + self.toolName())
484
485
486def TrigmuCombHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs):
487 return CompFactory.TrigmuCombHypoAlg(name, **kwargs)
488
489def TrigmuCombHypoToolFromDict( flags, chainDict ):
490
491 if 'idperf' in chainDict['chainParts'][0]['addInfo'] or 'idtp' in chainDict['chainParts'][0]['addInfo'] :
492 thresholds = ['passthrough']
493 elif chainDict['chainParts'][0]['multiplicity']=="0":
494 thresholds = [chainDict['chainParts'][0]['threshold']]
495 else:
496 thresholds = getThresholdsFromDict( chainDict )
497
498 config = TrigmuCombHypoConfig()
499
500 tight = False # can be probably decoded from some of the proprties of the chain, expert work
501
502 acceptAll = False
503
504 if 'mucombTag' in chainDict['chainParts'][0]['extra']:
505 domuCombTag = True
506 else:
507 domuCombTag = False
508
509 if chainDict['chainParts'][0]['signature'] == 'Bphysics':
510 acceptAll = True
511
512 tool = config.ConfigurationHypoTool( chainDict['chainName'], thresholds, tight, acceptAll, domuCombTag )
513
514 if monitorAll:
515 tool.MonTool = TrigmuCombHypoMonitoring(flags, "TrigmuCombHypoTool/"+chainDict['chainName'])
516 else:
517 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
518 tool.MonTool = TrigmuCombHypoMonitoring(flags, "TrigmuCombHypoTool/"+chainDict['chainName'])
519
520 d0cut=0.
521 if 'd0loose' in chainDict['chainParts'][0]['lrtInfo']:
522 d0cut=trigMuonLrtd0Cut['d0loose']
523 elif 'd0medium' in chainDict['chainParts'][0]['lrtInfo']:
524 d0cut=trigMuonLrtd0Cut['d0medium']
525 elif 'd0tight' in chainDict['chainParts'][0]['lrtInfo']:
526 d0cut=trigMuonLrtd0Cut['d0tight']
527 tool.MinimumD0=d0cut
528
529 return tool
530
531
532def TrigmuCombHypoToolwORFromDict( flags, chainDict ):
533
534 if 'idperf' in chainDict['chainParts'][0]['addInfo'] or 'idtp' in chainDict['chainParts'][0]['addInfo'] :
535 thresholds = ['passthrough']
536 elif chainDict['chainParts'][0]['multiplicity']=="0":
537 thresholds = [chainDict['chainParts'][0]['threshold']]
538 else:
539 thresholds = getThresholdsFromDict( chainDict )
540
541 config = TrigmuCombHypoConfig()
542
543 tight = False # can be probably decoded from some of the proprties of the chain, expert work
544
545 acceptAll = False
546 if 'mucombTag' in chainDict['chainParts'][0]['extra']:
547 domuCombTag = True
548 else:
549 domuCombTag = False
550
551 tool = config.ConfigurationHypoTool( chainDict['chainName'], thresholds, tight, acceptAll, domuCombTag )
552
553 if monitorAll:
554 tool.MonTool = TrigL2MuonOverlapRemoverMonitoringMucomb(flags, "TrigmuCombHypoTool/"+chainDict['chainName'])
555 else:
556 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
557 tool.MonTool = TrigL2MuonOverlapRemoverMonitoringMucomb(flags, "TrigmuCombHypoTool/"+chainDict['chainName'])
558
559 # Overlap Removal
560 tool.ApplyOR = True
561 tool.RequireDR = True
562 tool.RequireMufastDR = True
563 tool.RequireMass = True
564 tool.RequireSameSign = True
565 tool.EtaBins = [0, 0.9, 1.1, 1.9, 2.1, 9.9]
566 tool.DRThres = [0.002, 0.001, 0.002, 0.002, 0.002]
567 tool.MufastDRThres = [0.4, 0.4, 0.4, 0.4, 0.4]
568 tool.MassThres = [0.004, 0.002, 0.006, 0.006, 0.006]
569
570 return tool
571
572
573# muComb Hypo for L2 inside-out
574def Trigl2IOHypoToolwORFromDict( flags, chainDict ):
575
576 thresholds = getThresholdsFromDict( chainDict )
577 if chainDict['chainParts'][0]['multiplicity']=="0":
578 thresholds = [chainDict['chainParts'][0]['threshold']]
579
580 config = TrigmuCombHypoConfig()
581
582 tight = False # can be probably decoded from some of the proprties of the chain, expert work
583
584 acceptAll = False
585 domuCombTag=False
586
587 tool=config.ConfigurationHypoTool( chainDict['chainName'], thresholds, tight, acceptAll, domuCombTag )
588
589 # Overlap Removal
590 tool.ApplyOR = True
591 tool.RequireDR = True
592 tool.RequireMufastDR = False
593 tool.RequireMass = True
594 tool.RequireSameSign = True
595 tool.EtaBins = [0, 0.9, 1.1, 1.9, 2.1, 9.9]
596 tool.DRThres = [0.002, 0.001, 0.002, 0.002, 0.002]
597 tool.MufastDRThres = [0]
598 tool.MassThres = [0.004, 0.002, 0.006, 0.006, 0.006]
599
600 return tool
601
602
603# muComb Hypo for L2 multi-track SA mode
604def Trigl2mtCBHypoToolwORFromDict( flags, chainDict ):
605
606 if 'idperf' in chainDict['chainParts'][0]['addInfo'] or 'idtp' in chainDict['chainParts'][0]['addInfo'] :
607 thresholds = ['passthrough']
608 elif chainDict['chainParts'][0]['multiplicity']=="0":
609 thresholds = [chainDict['chainParts'][0]['threshold']]
610 else:
611 thresholds = getThresholdsFromDict( chainDict )
612
613 config = TrigmuCombHypoConfig()
614
615 tight = False # can be probably decoded from some of the proprties of the chain, expert work
616
617 acceptAll = False
618 domuCombTag = False
619
620 tool=config.ConfigurationHypoTool( chainDict['chainName'], thresholds, tight, acceptAll, domuCombTag )
621
622 # Overlap Removal
623 tool.ApplyOR = True
624 tool.RequireDR = True
625 tool.RequireMufastDR = True
626 tool.RequireMass = True
627 tool.RequireSameSign = True
628 tool.EtaBins = [0, 0.9, 1.1, 1.9, 2.1, 9.9]
629 tool.DRThres = [0.002, 0.001, 0.002, 0.002, 0.002]
630 tool.MufastDRThres = [0.4, 0.4, 0.4, 0.4, 0.4]
631 tool.MassThres = [0.004, 0.002, 0.006, 0.006, 0.006]
632
633 return tool
634
635
637
638 log = logging.getLogger('TrigmuCombHypoConfig')
639
640 def ConfigurationHypoTool( self, thresholdHLT, thresholds, tight, acceptAll, domuCombTag ):
641
642 tool = CompFactory.TrigmuCombHypoTool( thresholdHLT )
643 tool.AcceptAll = acceptAll
644
645 nt = len(thresholds)
646 log.debug('Set %d thresholds', nt)
647 tool.PtBins = [ [ 0.0, 2.5 ] ] * nt
648 tool.PtThresholds = [ [ 5.83 * GeV ] ] * nt
649
650 for th, thvalue in enumerate(thresholds):
651 if thvalue == 'passthrough':
652 tool.AcceptAll = True
653 tool.PtBins[th] = [-10000.,10000.]
654 tool.PtThresholds[th] = [ -1. * GeV ]
655 else:
656 # 15.03.2022: original flow, commented to allow use of the new HLT algo thresholds
657 #if int(thvalue) >= 24:
658 # thvaluename = '22GeV_v15a'
659 #else:
660 # thvaluename = thvalue + 'GeV_v15a'
661 if domuCombTag:
662 thvaluename = thvalue + 'GeV_v16'
663 else:
664 thvaluename = thvalue + 'GeV_v15a'
665
666 if int(thvalue)==3:
667 thvaluename = thvalue + 'GeV_v22a'
668 log.debug('Number of threshold = %d, Value of threshold = %s', th, thvaluename)
669
670 try:
671 values = muCombThresholds[thvaluename]
672 tool.PtBins[th] = values[0]
673 tool.PtThresholds[th] = [ x * GeV for x in values[1] ]
674 if (tight is True):
675 tool.ApplyPikCuts = True
676 tool.MaxPtToApplyPik = 25.
677 tool.MaxChi2IDPik = 3.5
678 except LookupError:
679 raise Exception('MuComb Hypo Misconfigured: threshold %r not supported' % thvaluename)
680
681 return tool
682
683def TrigMuonEFHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs):
684 return CompFactory.TrigMuonEFHypoAlg(name, **kwargs)
685
687
688 chainPart = chainDict['chainParts'][0]
689
690 thresholds = getThresholdsFromDict( chainDict )
691 if int(chainPart['multiplicity']) == 0:
692 thresholds = [chainPart['threshold']]
693
694 doOverlapRemoval = False
695 # This is taken from Run-3 L2 Hypo Tool Cfg
696 if chainPart['signature'] == 'Bphysics' or 'l2io' in chainPart['l2AlgInfo']:
697 doOverlapRemoval = False
698 elif int(chainPart['multiplicity']) > 1:
699 doOverlapRemoval = True
700 elif len(chainDict['signatures']) > 1 and not chainPart['extra']:
701 doOverlapRemoval = True
702
703 kwargs={}
704 kwargs["RequireSAMuons"] = True
705 kwargs["IsFastReco"] = True
706 kwargs["RemoveOverlaps"] = doOverlapRemoval
707
708 # Same monitoring settings as Run-3 L2 Hypo Tool Cfg
709 if monitorAll or any(group in muonHypoMonGroups for group in chainDict['monGroups']):
710 if doOverlapRemoval:
711 from TrigMuonHypo.TrigMuonHypoMonitoring import TrigL2MuonOverlapRemoverMonitoringMufast
712 kwargs["MonTool"] = TrigL2MuonOverlapRemoverMonitoringMufast(flags, 'TrigMuonEFFastSAHypoTool/' + chainDict['chainName'])
713 else:
714 from TrigMuonHypo.TrigMuonHypoMonitoring import TrigMufastHypoMonitoring
715 kwargs["MonTool"] = TrigMufastHypoMonitoring(flags, 'TrigMuonEFFastSAHypoTool/' + chainDict['chainName'])
716
717 kwargs["ConeSize"] = 0.0
718 kwargs["NarrowScan"] = False
719
720 name = chainDict['chainName']
721 log = logging.getLogger(name)
722
723 # Implementing the same threshold configuration as in the Run-3 L2 Hypo Tool Cfg
724 # However, special thresholds for EC weak Bfield regions cannot be implemented
725 nt = len(thresholds)
726 log.debug('Set %d thresholds', nt)
727 PtBins = [ [ 0.0, 2.5 ] ] * nt
728 PtThresholds = [ [ 5.49 * GeV ] ] * nt
729
730 for th, thvalue in enumerate(thresholds):
731 thvaluename = '6GeV_v15a'
732
733 useGeV_v15a = any(x in chainPart['addInfo'] for x in ['idperf', 'idtp', '3layersEC'])
734 if useGeV_v15a or int(thvalue) < 5:
735 thvaluename = thvalue + 'GeV_v15a'
736 if int(thvalue) == 3:
737 thvaluename = thvalue + 'GeV_v22a'
738
739 isBarrelOnly = '0eta105' in chainPart['etaRange']
740 if isBarrelOnly:
741 thvaluename = thvalue+ "GeV_barrelOnly_v15a"
742
743 if int(thvalue) >= 20:
744 thvaluename = thvalue + 'GeV_v15a'
745
746 log.debug('Number of threshold = %d, Value of threshold = %s', th, thvaluename)
747
748 values = muFastThresholds[thvaluename]
749
750 PtBins[th] = values[0]
751 PtThresholds[th] = [ x * GeV for x in values[1] ]
752 log.debug('Configration of threshold[%d] %s', th, PtThresholds[th])
753 log.debug('Configration of PtBins[%d] %s', th, PtBins[th])
754
755 kwargs["AcceptAll"] = 'mucombTag' in chainPart['extra']
756 kwargs["PtBins"] = PtBins
757 kwargs["PtThresholds"] = PtThresholds
758 return CompFactory.TrigMuonEFHypoTool(name, **kwargs)
759
760def TrigMuonEFMSonlyHypoToolFromDict( flags, chainDict ) :
761 thresholds = getThresholdsFromDict( chainDict )
762 if chainDict['chainParts'][0]['multiplicity']=="0":
763 thresholds = [chainDict['chainParts'][0]['threshold']]
764 kwargs={}
765 kwargs.setdefault("RequireSAMuons",True)
766 if 'msonly' in chainDict['chainParts'][0]['msonlyInfo'] and 'noL1' not in chainDict['chainParts'][0]['extra']:
767 kwargs.setdefault("RemoveOverlaps",True)
768
769
770 if monitorAll:
771 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFMSonlyHypoTool/"+chainDict['chainName'])
772 kwargs.setdefault("MonTool", monTool)
773 else:
774 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
775 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFMSonlyHypoTool/"+chainDict['chainName'])
776 kwargs.setdefault("MonTool", monTool)
777 if '3layersEC' in chainDict['chainParts'][0]['addInfo']:
778 kwargs.setdefault("RequireThreeStations", True)
779
780 if 'nscan10' in chainDict['chainParts'][0]['addInfo']:
781 conesize = 0.1
782 narrowscan = True
783 elif 'nscan20' in chainDict['chainParts'][0]['addInfo']:
784 conesize = 0.2
785 narrowscan = True
786 elif 'nscan30' in chainDict['chainParts'][0]['addInfo']:
787 conesize = 0.3
788 narrowscan = True
789 elif 'nscan40' in chainDict['chainParts'][0]['addInfo']:
790 conesize = 0.4
791 narrowscan = True
792 elif 'nscan' in chainDict['chainParts'][0]['addInfo']:
793 conesize = 0.5
794 narrowscan = True
795 else:
796 narrowscan = False
797 conesize = 0.0
798
799 kwargs.setdefault("ConeSize", conesize)
800 kwargs.setdefault("NarrowScan", narrowscan)
801
802 return TrigMuonEFHypoToolCfg( chainDict['chainName'], thresholds, doSA=True, **kwargs )
803
804def TrigMuonEFMSonlyHypoToolFromName( flags, chainDict):
805 #For full scan chains, we need to configure the thresholds based on all muons
806 #in the chain to get the counting correct.
807 thresholds=[]
808 chainName = chainDict["chainName"]
809 hltChainName = chainName.rsplit("_L1",1)[0]
810 cparts = hltChainName.split("_")
811
812 if 'HLT' in hltChainName:
813 cparts.remove('HLT')
814 for part in cparts:
815 if 'mu' in part:
816 thrPart = part.split('mu')
817 if not thrPart[0] or thrPart[0] == "0":
818 mult = 1
819 else:
820 mult=thrPart[0]
821 thr = thrPart[1]
822 if 'noL1' in part:
823 thr =thr.replace('noL1','')
824 for i in range(1,int(mult)+1):
825 thresholds.append(thr)
826
827 monTool=None
828 if monitorAll:
829 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFMSonlyHypoTool/"+chainDict['chainName'])
830 else:
831 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
832 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFMSonlyHypoTool/"+chainDict['chainName'])
833
834 if 'nscan10' in chainDict['chainParts'][0]['addInfo']:
835 conesize = 0.1
836 narrowscan = True
837 elif 'nscan20' in chainDict['chainParts'][0]['addInfo']:
838 conesize = 0.2
839 narrowscan = True
840 elif 'nscan30' in chainDict['chainParts'][0]['addInfo']:
841 conesize = 0.3
842 narrowscan = True
843 elif 'nscan40' in chainDict['chainParts'][0]['addInfo']:
844 conesize = 0.4
845 narrowscan = True
846 elif 'nscan' in chainDict['chainParts'][0]['addInfo']:
847 conesize = 0.5
848 narrowscan = True
849 else:
850 narrowscan = False
851 conesize = 0.0
852
853
854 return TrigMuonEFHypoToolCfg( chainDict['chainName'], thresholds, doSA=True, MonTool=monTool, RequireSAMuons=True, NarrowScan=narrowscan, ConeSize=conesize)
855
856def TrigMuonEFHypoToolCfg(name, thresholds, doSA=False, **kwargs):
857
858
859 log = logging.getLogger(name)
860
861 nt = len(thresholds)
862 log.debug('Set %d thresholds', nt)
863 PtBins = [ [ 0.0, 2.5 ] ] * nt
864 PtThresholds = [ [ 5.49 * GeV ] ] * nt
865 passthrough=False
866 for th, thvalue in enumerate(thresholds):
867 if (thvalue=='passthrough'):
868 passthrough = True
869 PtBins[th] = [-10000.,10000.]
870 PtThresholds[th] = [ -1. * GeV ]
871 else:
872 if "0eta105" in name:
873 thvaluename = thvalue+ "GeV_barrelOnly"
874 else:
875 if int(thvalue)==3:
876 thvaluename = thvalue + 'GeV_v22a'
877 else:
878 if doSA:
879 thvaluename = thvalue + 'GeV'
880 else:
881 thvaluename = thvalue + 'GeV_v15a'
882 log.debug('Number of threshold = %d, Value of threshold = %s', th, thvaluename)
883
884 if doSA:
885 values = trigMuonEFSAThresholds[thvaluename]
886 else:
887 values = efCombinerThresholds[thvaluename]
888 PtBins[th] = values[0]
889 PtThresholds[th] = [ x * GeV for x in values[1] ]
890
891
892 kwargs.setdefault("AcceptAll", passthrough)
893 kwargs.setdefault("PtBins", PtBins)
894 kwargs.setdefault("PtThresholds", PtThresholds)
895 return CompFactory.TrigMuonEFHypoTool(name, **kwargs)
896
897
898def TrigMuonEFCombinerHypoToolFromDict( flags, chainDict ) :
899 if 'idperf' in chainDict['chainParts'][0]['addInfo'] or 'idtp' in chainDict['chainParts'][0]['addInfo']:
900 thresholds = ['passthrough']
901 elif chainDict['chainParts'][0]['multiplicity']=="0":
902 thresholds = [chainDict['chainParts'][0]['threshold']]
903 else:
904 thresholds = getThresholdsFromDict( chainDict )
905
906 if 'muonqual' in chainDict['chainParts'][0]['addInfo']:
907 muonquality = True
908 else:
909 muonquality = False
910
911 if 'nscan10' in chainDict['chainParts'][0]['addInfo']:
912 conesize = 0.1
913 narrowscan = True
914 elif 'nscan20' in chainDict['chainParts'][0]['addInfo']:
915 conesize = 0.2
916 narrowscan = True
917 elif 'nscan30' in chainDict['chainParts'][0]['addInfo']:
918 conesize = 0.3
919 narrowscan = True
920 elif 'nscan40' in chainDict['chainParts'][0]['addInfo']:
921 conesize = 0.4
922 narrowscan = True
923 elif 'nscan' in chainDict['chainParts'][0]['addInfo']:
924 conesize = 0.5
925 narrowscan = True
926 else:
927 narrowscan = False
928 conesize = 0.0
929
930 if 'noL1' not in chainDict['chainParts'][0]['extra']:
931 overlap=True
932 else:
933 overlap=False
934
935 monTool=None
936 if monitorAll:
937 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFCombinerHypoTool/"+chainDict['chainName'])
938 else:
939 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
940 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFCombinerHypoTool/"+chainDict['chainName'])
941
942 d0cut=0.
943 if 'd0loose' in chainDict['chainParts'][0]['lrtInfo']:
944 d0cut=trigMuonLrtd0Cut['d0loose']
945 elif 'd0medium' in chainDict['chainParts'][0]['lrtInfo']:
946 d0cut=trigMuonLrtd0Cut['d0medium']
947 elif 'd0tight' in chainDict['chainParts'][0]['lrtInfo']:
948 d0cut=trigMuonLrtd0Cut['d0tight']
949
950
951 tool = TrigMuonEFHypoToolCfg(chainDict['chainName'], thresholds, doSA=False, MuonQualityCut=muonquality, MonTool=monTool,
952 NarrowScan=narrowscan, RemoveOverlaps=overlap, ConeSize=conesize, MinimumD0=d0cut)
953
954 return tool
955
957 #For full scan chains, we need to configure the thresholds based on all muons
958 #in the chain to get the counting correct. Currently a bit convoluted as
959 #the chain dict is (improperly) overwritten when merging for FS chains.
960 #Can probably improve this once serial merging is officially implemented
961 thresholds=[]
962 chainName = chainDict["chainName"]
963 hltChainName = chainName.rsplit("_L1",1)[0]
964 cparts = hltChainName.split("_")
965 if 'HLT' in hltChainName:
966 cparts.remove('HLT')
967 for part in cparts:
968 if 'mu' in part:
969 thrPart = part.split('mu')
970 if not thrPart[0] or thrPart[0] == "0":
971 mult = 1
972 else:
973 mult=thrPart[0]
974 thr = thrPart[1]
975 if 'noL1' in part:
976 thr =thr.replace('noL1','')
977 for i in range(1,int(mult)+1):
978 thresholds.append(thr)
979 if 'nscan10' in chainDict['chainParts'][0]['addInfo']:
980 conesize = 0.1
981 narrowscan = True
982 elif 'nscan20' in chainDict['chainParts'][0]['addInfo']:
983 conesize = 0.2
984 narrowscan = True
985 elif 'nscan30' in chainDict['chainParts'][0]['addInfo']:
986 conesize = 0.3
987 narrowscan = True
988 elif 'nscan40' in chainDict['chainParts'][0]['addInfo']:
989 conesize = 0.4
990 narrowscan = True
991 if 'nscan' in chainDict['chainParts'][0]['addInfo']:
992 conesize = 0.5
993 narrowscan = True
994 else:
995 narrowscan = False
996 conesize = 0.0
997
998 if 'muonqual' in chainDict['chainParts'][0]['addInfo']:
999 muonquality = True
1000 else:
1001 muonquality = False
1002
1003 monTool=None
1004 if monitorAll:
1005 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFCombinerHypoTool/"+chainDict['chainName'])
1006 else:
1007 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
1008 monTool = TrigMuonEFHypoMonitoring(flags, "TrigMuonEFCombinerHypoTool/"+chainDict['chainName'])
1009
1010 tool = TrigMuonEFHypoToolCfg(chainDict['chainName'], thresholds, doSA=False, MuonQualityCut=muonquality, MonTool=monTool,
1011 NarrowScan=narrowscan, ConeSize=conesize)
1012
1013 return tool
1014
1015
1016
1018 cparts = [i for i in chainDict['chainParts'] if i['signature']=='Muon']
1019 if 'ivarperf' in chainDict['chainParts'][0]['isoInfo']:
1020 thresholds = 'passthrough'
1021 else:
1022 thresholds = cparts[0]['isoInfo']
1023
1024 tool = TrigMuonEFTrackIsolationHypoCfg(flags, chainDict['chainName'], thresholds)
1025
1026
1027 if monitorAll:
1028 tool.MonTool = TrigMuonEFTrackIsolationMonitoring(flags, 'TrigMuonEFTrackIsolationHypoTool/'+chainDict['chainName'])
1029 else:
1030 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
1031 tool.MonTool = TrigMuonEFTrackIsolationMonitoring(flags, 'TrigMuonEFTrackIsolationHypoTool/'+chainDict['chainName'])
1032
1033 return tool
1034
1035def TrigMuonEFTrackIsolationHypoCfg(flags, name, isoCut, **kwargs) :
1036
1037
1038 if(isoCut=='passthrough') :
1039 kwargs.setdefault("AcceptAll", True)
1040
1041 else:
1042 ptcone03 = trigMuonEFTrkIsoThresholds[ isoCut ]
1043
1044 kwargs.setdefault("PtCone02Cut", 0.0)
1045 kwargs.setdefault("PtCone03Cut", ptcone03)
1046 kwargs.setdefault("AcceptAll", False)
1047
1048 if 'ms' in isoCut:
1049 kwargs.setdefault("RequireCombinedMuon", False)
1050 kwargs.setdefault("DoAbsCut", True)
1051 else:
1052 kwargs.setdefault("RequireCombinedMuon", True)
1053 kwargs.setdefault("DoAbsCut", False)
1054
1055
1056 if 'var' in isoCut :
1057 kwargs.setdefault("useVarIso", True)
1058 else :
1059 kwargs.setdefault("useVarIso", False)
1060
1061 tool = CompFactory.TrigMuonEFTrackIsolationHypoTool(name, **kwargs)
1062 return tool
1063
1064def TrigMuonEFTrackIsolationHypoAlgCfg(flags, name="TrigMuonEFTrackIsolationHypoAlg", **kwargs):
1065 return CompFactory.TrigMuonEFTrackIsolationHypoAlg(name, **kwargs)
1066
1067def TrigMuonEFInvMassHypoToolFromDict( flags, chainDict ) :
1068 cparts = [i for i in chainDict['chainParts'] if i['signature']=='Muon']
1069 #The invariant mass is specified at end of chain, so only shows up in the last chainPart
1070 thresholds = cparts[-1]['invMassInfo']
1071 if "os" in cparts[-1]['addInfo']:
1072 osCut=True
1073 else:
1074 osCut = False
1075
1076 tool = TrigMuonEFInvMassHypoCfg( flags, chainDict['chainName'], thresholds, SelectOppositeSign=osCut )
1077
1078 if monitorAll:
1079 tool.MonTool = TrigMuonEFInvMassHypoMonitoring(flags, "TrigMuonEFInvMassHypoTool/"+chainDict['chainName'])
1080 else:
1081 if any(group in muonHypoMonGroups for group in chainDict['monGroups']):
1082 tool.MonTool = TrigMuonEFInvMassHypoMonitoring(flags, "TrigMuonEFInvMassHypoTool/"+chainDict['chainName'])
1083
1084 return tool
1085
1086def TrigMuonEFInvMassHypoCfg(flags, toolName, thresholds, **kwargs):
1087
1088 massWindow = trigMuonEFInvMassThresholds[thresholds]
1089
1090 kwargs.setdefault("InvMassLow", massWindow[0])
1091 kwargs.setdefault("InvMassHigh", massWindow[1])
1092 kwargs.setdefault("AcceptAll", False)
1093
1094 tool = CompFactory.TrigMuonEFInvMassHypoTool(toolName, **kwargs)
1095 return tool
1096
1097def TrigMuonEFIdtpHypoToolFromDict( flags, chainDict ) :
1098 thresholds = getThresholdsFromDict( chainDict )
1099 monTool=None
1100 if any(group in idHypoMonGroups for group in chainDict['monGroups']):
1101 monTool = TrigMuonEFIdtpHypoMonitoring(flags, "TrigMuonEFIdtpHypoTool/"+chainDict['chainName'])
1102 tool = TrigMuonEFIdtpHypoCfg( chainDict['chainName'], thresholds, MonTool=monTool )
1103 return tool
1104
1105
1106def TrigMuonEFIdtpHypoCfg(name, thresholds, **kwargs):
1107
1108 log = logging.getLogger(name)
1109
1110 nt = len(thresholds)
1111 log.debug('Set %d thresholds', nt)
1112 ptBins = [ [ 0, 2.5 ] ] * nt
1113 ptThresholds = [ [ 5.49 * GeV ] ] * nt
1114 for th, thvalue in enumerate(thresholds):
1115 thvaluename = thvalue + 'GeV'
1116 if int(thvalue)==3:
1117 thvaluename = thvalue + 'GeV_v22a'
1118 log.debug('Number of threshold = %d, Value of threshold = %s', th, thvaluename)
1119 if (thvalue=='passthrough'):
1120 ptBins[th] = [-10000.,10000.]
1121 ptThresholds[th] = [ -1. * GeV ]
1122 else:
1123 values = trigMuonEFSAThresholds[thvaluename]
1124 ptBins[th] = values[0]
1125 ptThresholds[th] = [ x * GeV for x in values[1] ]
1126
1127
1128 if (thvalue=='passthrough'):
1129 kwargs.setdefault("AcceptAll", True)
1130 else:
1131 kwargs.setdefault("AcceptAll", False)
1132
1133 kwargs.setdefault("PtBins", ptBins)
1134 kwargs.setdefault("PtThresholds", ptThresholds)
1135
1136
1137 return CompFactory.TrigMuonEFIdtpHypoTool( name, **kwargs )
1138
1140 cname = chainDict['chainName']
1141 if 'idZmumu' in cname :
1142 thresholds = 'idZmumu'
1143 elif 'idJpsimumu' in cname :
1144 thresholds = 'idJpsimumu'
1145 else :
1146 log.warning("unknown chain name for IdtpInvmassHypo, chain name= %s, setting threshold of Z mass",cname)
1147 thresholds = 'idZmumu'
1148
1149 tool = TrigMuonEFIdtpInvMassHypoCfg( chainDict['chainName'], thresholds )
1150
1151 if any(group in idHypoMonGroups for group in chainDict['monGroups']):
1152 tool.MonTool = TrigMuonEFIdtpInvMassHypoMonitoring(flags, "TrigMuonEFIdtpInvMassHypoTool/"+chainDict['chainName'])
1153
1154 return tool
1155
1156def TrigMuonEFIdtpInvMassHypoCfg(name, thresholds, **kwargs) :
1157
1158 massWindow = trigMuonEFInvMassThresholds[thresholds]
1159 kwargs.setdefault("InvMassLow", massWindow[0])
1160 kwargs.setdefault("InvMassHigh", massWindow[1])
1161 kwargs.setdefault("AcceptAll", False)
1162
1163 return CompFactory.TrigMuonEFIdtpInvMassHypoTool(name, **kwargs)
1164
1165
1166def TrigMuonEFIdtpHypoAlgCfg(flags, name="TrigMuonEFIdtpHypoAlg", **kwargs):
1167 return CompFactory.TrigMuonEFIdtpHypoAlg(name, **kwargs)
1168
1169def TrigMuonLateMuRoIHypoAlgCfg(flags, name="TrigMuRoIHypoAlg", **kwargs):
1170 return CompFactory.TrigMuonLateMuRoIHypoAlg(name, **kwargs)
1171
1173 tool = TrigMuonLateMuRoIHypoCfg(flags, chainDict['chainName'])
1174 return tool
1175
1176def TrigMuonLateMuRoIHypoCfg(flags, name="TrigMuRoIHypoTool") :
1177
1178 tool = CompFactory.TrigMuonLateMuRoIHypoTool(name, AcceptAll=False)
1179 return tool
const bool debug
if(pathvar)
__init__(self, name, cpart, eventBuildType, doOverlapRemoval=False, doMonitoring=False)
ConfigurationHypoTool(self, thresholdHLT, thresholds, tight, acceptAll, domuCombTag)
TrigMuonEFTrackIsolationHypoAlgCfg(flags, name="TrigMuonEFTrackIsolationHypoAlg", **kwargs)
TrigMuonEFInvMassHypoCfg(flags, toolName, thresholds, **kwargs)
TrigmuCombHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs)
TrigMuonEFIdtpHypoAlgCfg(flags, name="TrigMuonEFIdtpHypoAlg", **kwargs)
TrigMuonEFIdtpInvMassHypoCfg(name, thresholds, **kwargs)
TrigMuonLateMuRoIHypoCfg(flags, name="TrigMuRoIHypoTool")
TrigmuCombHypoToolFromDict(flags, chainDict)
TrigMuonEFIdtpHypoToolFromDict(flags, chainDict)
TrigMuonEFInvMassHypoToolFromDict(flags, chainDict)
TrigMuonEFIdtpHypoCfg(name, thresholds, **kwargs)
TrigMuonEFIdtpInvMassHypoToolFromDict(flags, chainDict)
TrigMuonEFHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs)
TrigmuCombHypoToolwORFromDict(flags, chainDict)
TrigMuonEFMSonlyHypoToolFromName(flags, chainDict)
TrigMuonLateMuRoIHypoToolFromDict(flags, chainDict)
TrigMuonLateMuRoIHypoAlgCfg(flags, name="TrigMuRoIHypoAlg", **kwargs)
Trigl2IOHypoToolwORFromDict(flags, chainDict)
TrigMuonEFMSonlyHypoToolFromDict(flags, chainDict)
TrigMufastHypoToolFromDict(flags, chainDict)
Trigl2mtCBHypoToolwORFromDict(flags, chainDict)
TrigMuonEFFastRecoSAHypoToolFromDict(flags, chainDict)
TrigMuonEFHypoToolCfg(name, thresholds, doSA=False, **kwargs)
TrigMufastHypoAlgCfg(flags, name="UNSPECIFIED", **kwargs)
TrigMuonEFCombinerHypoToolFromDict(flags, chainDict)
TrigMuonEFTrackIsolationHypoCfg(flags, name, isoCut, **kwargs)
TrigMuonEFCombinerHypoToolFromName(flags, chainDict)
TrigMuonEFTrackIsolationHypoToolFromDict(flags, chainDict)