ATLAS Offline Software
PhysDESDM_HNL.py
Go to the documentation of this file.
1 from LongLivedParticleDPDMaker.LongLivedParticleDPDMakerConf import DerivationFramework__HnlSkimmingTool as skimtool
2 from DerivationFrameworkCore.DerivationFrameworkCoreConf import DerivationFramework__DerivationKernel as kernel
3 
4 from AthenaCommon.Logging import logging
5 msg = logging.getLogger("PhysDESDM_HNL")
6 msg.setLevel(logging.INFO)
7 
8 
9 from LongLivedParticleDPDMaker.RPVLLTriggers import RPVLLTriggers
10 apitriggers = RPVLLTriggers()
11 from LongLivedParticleDPDMaker.RPVLLTriggers import rpvllTrig
12 # Hardcoded lists are necessary.
13 # https://twiki.cern.ch/twiki/bin/view/Atlas/LowestUnprescaled
14 apiSingleMuonTriggerlist = [
15  # 2015
16  "HLT_mu20_iloose_L1MU15",
17  # 2016 A
18  "HLT_mu24_iloose",
19  # 2016 A
20  "HLT_mu24_ivarloose",
21  # 2016 B-E
22  "HLT_mu24_ivarmedium",
23  # 2016 B-E
24  "HLT_mu24_imedium",
25  # 2016 D4-G2
26  "HLT_mu26_imedium",
27  # 2016 I4-, 2017, 2018
28  "HLT_mu26_ivarmedium",
29  # 2015, 2016 A
30  "HLT_mu40",
31  # 2016, 2017, 2018
32  "HLT_mu50",
33  # 2015, 2017, 2018
34  "HLT_mu60_0eta105_msonly",
35 ]
36 apiSingleElectronTriggerlist = [
37  # 2015
38  "HLT_e24_lhmedium_L1EM20VH",
39  # 2016 A-D3
40  "HLT_e24_lhtight_nod0_ivarloose",
41  # 2018
42  "HLT_e26_lhtight_nod0",
43  # 2016 D4-, 2017, 2018
44  "HLT_e26_lhtight_nod0_ivarloose",
45  # 2016, 2017, 2018
46  "HLT_e60_lhmedium_nod0",
47  # 2015
48  "HLT_e60_lhmedium",
49  # 2016
50  "HLT_e60_medium",
51  # 2015
52  "HLT_e120_lhloose",
53  # 2016, 2017, 2018
54  "HLT_e140_lhloose_nod0",
55  # 2016, 2017, 2018
56  "HLT_e300_etcut",
57 ]
58 apiMultiMuonTriggerlist = [
59  # 2016 A
60  "HLT_2mu10",
61  # 2016 A
62  "HLT_2mu10_nomucomb",
63  # 2016 B-I3, 2017, 2018
64  "HLT_2mu14",
65  # 2016 B-
66  "HLT_2mu14_nomucomb",
67  # 2016 A-D3
68  "HLT_mu20_nomucomb_mu6noL1_nscan03",
69  # 2016 A-E
70  "HLT_mu20_mu8noL1",
71  # 2016 D4-, 2017, 2018
72  "HLT_mu22_mu8noL1",
73  # 2017
74  "HLT_mu22_mu8noL1_calotag_0eta010",
75  # 2016 A, I4-
76  "HLT_3mu4",
77  # 2016 A-D3
78  "HLT_mu6_2mu4",
79  # 2016 B-D3, 2017, 2018
80  "HLT_3mu6",
81  # 2016 D4-, 2017
82  "HLT_3mu6_msonly",
83  # 2016, 2017, 2018
84  "HLT_mu20_2mu4noL1",
85  # 2017
86  "HLT_4mu4",
87  # 2016 A-D3
88  "HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6",
89  # 2016 A-D3
90  "HLT_mu11_nomucomb_2mu4noL1_nscan03_L1MU11_2MU6_bTau",
91  # 2016 A-D3
92  "HLT_mu20_msonly_mu10noL1_msonly_nscan05_noComb",
93  # 2016 A-D3
94  "HLT_mu11_nomucomb_mu6noL1_nscan03_L1MU11_2MU6_bTau",
95  # 2016 A-D3
96  "HLT_mu6_nomucomb_2mu4_nomucomb_bTau_L1MU6_3MU4",
97  # 2016 A-D3
98  "HLT_2mu6_nomucomb_mu4_nomucomb_bTau_L12MU6_3MU4",
99 ]
100 apiMultiElectronTriggerlist = [
101  # 2015
102  "HLT_2e12_lhloose_L12EM10VH",
103  # 2016 A-D3
104  "HLT_2e15_lhvloose_nod0_L12EM13VH",
105  # 2015
106  "HLT_e17_lhloose_2e9_lhloose",
107  # 2016
108  "HLT_e17_lhloose_nod0_2e9_lhloose_nod0",
109  # 2017 G-
110  "HLT_e17_lhloose_nod0_2e10_lhloose_nod0_L1EM15VH_3EM8VH",
111  # 2017 D4-
112  "HLT_2e17_lhvloose_nod0",
113  # 2017, 2018
114  "HLT_2e17_lhvloose_nod0_L12EM15VHI",
115  # 2017, 2018
116  "HLT_2e24_lhvloose_nod0",
117  # 2017, 2018
118  "HLT_e24_lhvloose_nod0_2e12_lhvloose_nod0_L1EM20VH_3EM10VH",
119 ]
120 apiElectronMuonTriggerlist = [
121  # 2015 C2-D6
122  "HLT_e17_lhloose_mu14",
123  # 2016, 2017, 2018
124  "HLT_e17_lhloose_nod0_mu14",
125  # 2016
126  "HLT_e24_lhmedium_nod0_L1EM20VHI_mu8noL1",
127  # 2017, 2018
128  "HLT_e26_lhmedium_nod0_mu8noL1",
129  # 2016, 2017, 2018
130  "HLT_e7_lhmedium_nod0_mu24",
131  # 2016, 2017, 2018
132  "HLT_e12_lhloose_nod0_2mu10",
133  # 2015 C2-D6
134  "HLT_2e12_lhloose_mu10",
135  # 2016, 2017, 2018
136  "HLT_2e12_lhloose_nod0_mu10",
137  # 2015 C2-D6
138  "HLT_e7_lhmedium_mu24",
139  # 2015 C2-D6
140  "HLT_e12_lhloose_2mu10",
141 ]
142 if rpvllTrig.doRPVLLTriggerAPI:
143  apiSingleMuonTriggerlist = apitriggers.getHNLSingleMuonTriggers()
144  apiSingleElectronTriggerlist = apitriggers.getHNLSingleElectronTriggers()
145  apiMultiMuonTriggerlist = apitriggers.getHNLMultiMuonTriggers()
146  apiMultiElectronTriggerlist = apitriggers.getHNLMultiElectronTriggers()
147 
148 from LongLivedParticleDPDMaker.PrimaryDPDFlags_RPVLLStream import primRPVLLDESDM
149 
150 # Filter for a prompt muon + a displaced muon
151 HnlMuMuTriggers = apiSingleMuonTriggerlist
152 if primRPVLLDESDM.doHnlMultiLeptonTriggers():
153  HnlMuMuTriggers += apiMultiMuonTriggerlist
154 HnlMuMuFilterTool = skimtool( name = "HnlMuMuFilterTool",
155  IsPromptMuon = True,
156  IsDisplacedMuon = True,
157  Triggers = HnlMuMuTriggers,
158  Mu1PtMin = primRPVLLDESDM.promptMuonPtThreshHnl(),
159  Mu1Types = primRPVLLDESDM.promptMuonTypesHnl(),
160  Mu1IsoCut = primRPVLLDESDM.promptMuonIsoThreshHnl(),
161  Mu2PtMin = primRPVLLDESDM.displacedMuonPtThreshHnl(),
162  Mu2Types = primRPVLLDESDM.displacedMuonTypesHnl(),
163  Mu2IsoCut = primRPVLLDESDM.displacedMuonIsoThreshHnl(),
164  Mu2d0Min = primRPVLLDESDM.displacedMuonD0ThreshHnl(),
165  dPhiMin = primRPVLLDESDM.leptonDphiThreshHnl())
166 ToolSvc += HnlMuMuFilterTool
167 msg.info("HnlMuMuFilterTool.Triggers:")
168 msg.info(HnlMuMuFilterTool.Triggers)
169 topSequence += kernel( "RPVLL_HnlMuMuFilterKernel",
170  SkimmingTools = [HnlMuMuFilterTool] )
171 RPVLLfilterNames.extend(["RPVLL_HnlMuMuFilterKernel"])
172 
173 # Filter for a prompt electron + a displaced muon
174 if primRPVLLDESDM.doHnlElMu():
175  HnlElMuTriggers = apiSingleElectronTriggerlist
176  if primRPVLLDESDM.doHnlMultiLeptonTriggers():
177  HnlElMuTriggers += apiElectronMuonTriggerlist
178  HnlElMuFilterTool = skimtool( name = "HnlElMuFilterTool",
179  IsPromptMuon = False,
180  IsDisplacedMuon = True,
181  Triggers = HnlElMuTriggers,
182  El1PtMin = primRPVLLDESDM.promptElectronPtThreshHnl(),
183  El1ID = primRPVLLDESDM.promptElectronIDHnl(),
184  El1IsoType= primRPVLLDESDM.promptElectronIsoTypeHnl(),
185  El1IsoCut = primRPVLLDESDM.promptElectronIsoThreshHnl(),
186  Mu2PtMin = primRPVLLDESDM.displacedMuonPtThreshHnl(),
187  Mu2Types = primRPVLLDESDM.displacedMuonTypesHnl(),
188  Mu2IsoCut = primRPVLLDESDM.displacedMuonIsoThreshHnl(),
189  Mu2d0Min = primRPVLLDESDM.displacedMuonD0ThreshHnl(),
190  dPhiMin = primRPVLLDESDM.leptonDphiThreshHnl())
191  ToolSvc += HnlElMuFilterTool
192  msg.info("HnlElMuFilterTool.Triggers:")
193  msg.info(HnlElMuFilterTool.Triggers)
194  topSequence += kernel( "RPVLL_HnlElMuFilterKernel",
195  SkimmingTools = [HnlElMuFilterTool] )
196  RPVLLfilterNames.extend(["RPVLL_HnlElMuFilterKernel"])
197 
198 # Filter for a prompt electron + a displaced electron
199 if primRPVLLDESDM.doHnlElEl():
200  HnlElElTriggers = apiSingleElectronTriggerlist
201  if primRPVLLDESDM.doHnlMultiLeptonTriggers():
202  HnlElElTriggers += apiMultiElectronTriggerlist
203  HnlElElFilterTool = skimtool( name = "HnlElElFilterTool",
204  IsPromptMuon = False,
205  IsDisplacedMuon = False,
206  Triggers = HnlElElTriggers,
207  El1PtMin = primRPVLLDESDM.promptElectronPtThreshHnl(),
208  El1ID = primRPVLLDESDM.promptElectronIDHnl(),
209  El1IsoType= primRPVLLDESDM.promptElectronIsoTypeHnl(),
210  El1IsoCut = primRPVLLDESDM.promptElectronIsoThreshHnl(),
211  El2PtMin = primRPVLLDESDM.displacedElectronPtThreshHnl(),
212  El2IsoType= primRPVLLDESDM.displacedElectronIsoTypeHnl(),
213  El2IsoCut = primRPVLLDESDM.displacedElectronIsoThreshHnl(),
214  El2d0Min = primRPVLLDESDM.displacedElectronD0ThreshHnl(),
215  dPhiMin = primRPVLLDESDM.leptonDphiThreshHnl())
216  ToolSvc += HnlElElFilterTool
217  msg.info("HnlElElFilterTool.Triggers:")
218  msg.info(HnlElElFilterTool.Triggers)
219  topSequence += kernel( "RPVLL_HnlElElFilterKernel",
220  SkimmingTools = [HnlElElFilterTool] )
221  RPVLLfilterNames.extend(["RPVLL_HnlElElFilterKernel"])
222 
223 # Filter for a prompt muon + a displaced electron
224 if primRPVLLDESDM.doHnlMuEl():
225  HnlMuElTriggers = apiSingleMuonTriggerlist
226  if primRPVLLDESDM.doHnlMultiLeptonTriggers():
227  HnlMuElTriggers += apiElectronMuonTriggerlist
228  HnlMuElFilterTool = skimtool( name = "HnlMuElFilterTool",
229  IsPromptMuon = True,
230  IsDisplacedMuon = False,
231  Triggers = HnlMuElTriggers,
232  Mu1PtMin = primRPVLLDESDM.promptMuonPtThreshHnl(),
233  Mu1Types = primRPVLLDESDM.promptMuonTypesHnl(),
234  Mu1IsoCut = primRPVLLDESDM.promptMuonIsoThreshHnl(),
235  El2PtMin = primRPVLLDESDM.displacedElectronPtThreshHnl(),
236  El2IsoType= primRPVLLDESDM.displacedElectronIsoTypeHnl(),
237  El2IsoCut = primRPVLLDESDM.displacedElectronIsoThreshHnl(),
238  El2d0Min = primRPVLLDESDM.displacedElectronD0ThreshHnl(),
239  dPhiMin = primRPVLLDESDM.leptonDphiThreshHnl())
240  ToolSvc += HnlMuElFilterTool
241  msg.info("HnlMuElFilterTool.Triggers:")
242  msg.info(HnlMuElFilterTool.Triggers)
243  topSequence += kernel( "RPVLL_HnlMuElFilterKernel",
244  SkimmingTools = [HnlMuElFilterTool] )
245  RPVLLfilterNames.extend(["RPVLL_HnlMuElFilterKernel"])