129 def makeAlgs(self, config):
130 self.parseSelectionRegionsConfig()
131 for perRegionConfig in self.perRegionConfiguration:
132 selectionName = perRegionConfig["selectionName"]
133 alg = config.createAlgorithm(
134 "EventReco::RunKLFitterAlg",
135 f"RunKLFitterAlg_{selectionName}",
136 )
137
138 alg.electrons, alg.electronSelection = config.readNameAndSelection(
139 self.electrons
140 )
141 alg.muons, alg.muonSelection = config.readNameAndSelection(self.muons)
142 alg.jets, alg.jetSelection = config.readNameAndSelection(self.jets)
143 alg.met = config.readName(self.met)
144 alg.result = self.containerName + "_%SYS%"
145
146
147 alg.SaveAllPermutations = self.saveAllPermutations
148
149
150 alg.selectionDecorationName = selectionName + "_%SYS%,as_char"
151 alg.LHType = self.likelihoodType
152 alg.LeptonType = perRegionConfig.get("leptonType", self.leptonType)
153 alg.JetSelectionMode = perRegionConfig.get(
154 "jetSelectionMode", self.jetSelectionMode
155 )
156 btagAlgo = perRegionConfig.get("btagger", self.btagger)
157 btagWP = perRegionConfig.get("btagWP", self.btagWP)
158 alg.BTaggingDecoration = f"ftag_select_{btagAlgo}_{btagWP}"
159
160 alg.BTaggingMethod = perRegionConfig.get(
161 "btaggingMethod", self.btaggingMethod
162 )
163 if alg.BTaggingMethod == "kWorkingPoint":
164 config.addPrivateTool("btagEffTool", "BTaggingEfficiencyTool")
165 alg.btagEffTool.TaggerName = self.btagger
166 alg.btagEffTool.OperatingPoint = self.btagWP
167 jetCollection = config.originalName(self.jets.
split(
".")[0])
168 alg.btagEffTool.JetAuthor = jetCollection
169 alg.btagEffTool.ScaleFactorFileName = (
170 getRecommendedBTagCalib(config.geometry(), self.btagWP)
171 if self.bTagCDIFile is None
172 else self.bTagCDIFile
173 )
174 alg.btagEffTool.IgnoreOutOfValidityRange = (
175 self.btagIgnoreOutOfValidityRange
176 )
177 alg.btagEffTool.MinPt = (
178 20e3
179 )
180
181
182
183 finalizeAlg = config.createAlgorithm(
184 "EventReco::KLFitterFinalizeOutputAlg",
185 "KLFitterFinalizeOutputAlg",
186 )
187 finalizeAlg.resultContainerToCheck = self.containerName + "_%SYS%"
188 finalizeAlg.resultContainerToWrite = self.containerName + "_%SYS%"
189
190 config.writeName(self.containerName)
191
192 config.addOutputVar(self.containerName, "eventProbability", "eventProbability", auxType="float")
193 config.addOutputVar(self.containerName, "logLikelihood", "logLikelihood", auxType="float")
194 if self.saveAllPermutations:
195 config.addOutputVar(self.containerName, "selected", "selected", auxType="char")
196
197 if self.likelihoodType != "ttbar_AllHad":
198 config.addOutputVar(
199 self.containerName, "model_bhad_jetIndex", "bhad_jetIndex", auxType="unsigned_int"
200 )
201 config.addOutputVar(
202 self.containerName, "model_blep_jetIndex", "blep_jetIndex", auxType="unsigned_int"
203 )
204 config.addOutputVar(
205 self.containerName, "model_lq1_jetIndex", "lq1_jetIndex", auxType="unsigned_int"
206 )
207 if self.likelihoodType != "ttbar_BoostedLJets":
208 config.addOutputVar(
209 self.containerName, "model_lq2_jetIndex", "lq2_jetIndex", auxType="unsigned_int"
210 )
211 if self.likelihoodType == "ttH":
212 config.addOutputVar(
213 self.containerName, "model_Higgs_b1_jetIndex", "Higgs_b1_jetIndex", auxType="unsigned_int"
214 )
215 config.addOutputVar(
216 self.containerName, "model_Higgs_b2_jetIndex", "Higgs_b2_jetIndex", auxType="unsigned_int"
217 )
218
219 config.addOutputVar(self.containerName, "model_nu_pt", "nu_pt", auxType="float")
220 config.addOutputVar(self.containerName, "model_nu_eta", "nu_eta", auxType="float")
221 config.addOutputVar(self.containerName, "model_nu_phi", "nu_phi", auxType="float")
222 config.addOutputVar(self.containerName, "model_nu_E", "nu_E", auxType="float")
223
224 if self.likelihoodType == "ttZTrilepton":
225 config.addOutputVar(self.containerName, "model_lep_index", "lep_index", auxType="unsigned_int")
226 config.addOutputVar(
227 self.containerName, "model_lepZ1_index", "lepZ1_index", auxType="unsigned_int"
228 )
229 config.addOutputVar(
230 self.containerName, "model_lepZ2_index", "lepZ2_index", auxType="unsigned_int"
231 )
232 else:
233 config.addOutputVar(
234 self.containerName, "model_b_from_top1_jetIndex", "b_from_top1_jetIndex", auxType="unsigned_int"
235 )
236 config.addOutputVar(
237 self.containerName, "model_b_from_top2_jetIndex", "b_from_top2_jetIndex", auxType="unsigned_int"
238 )
239 config.addOutputVar(
240 self.containerName,
241 "model_lj1_from_top1_jetIndex",
242 "lj1_from_top1_jetIndex",
243 auxType="unsigned_int"
244 )
245 config.addOutputVar(
246 self.containerName,
247 "model_lj2_from_top1_jetIndex",
248 "lj2_from_top1_jetIndex",
249 auxType="unsigned_int"
250 )
251 config.addOutputVar(
252 self.containerName,
253 "model_lj1_from_top2_jetIndex",
254 "lj1_from_top2_jetIndex",
255 auxType="unsigned_int"
256 )
257 config.addOutputVar(
258 self.containerName,
259 "model_lj2_from_top2_jetIndex",
260 "lj2_from_top2_jetIndex",
261 auxType="unsigned_int"
262 )
std::vector< std::string > split(const std::string &s, const std::string &t=":")