138 if (!evt.isValid()) {
141 float mcEventWeight = evt->mcEventWeight();
151 m_tccPlots.at(name)->setEventWeight(mcEventWeight);
156 if (not jets_beforeCalib) {
157 return StatusCode::FAILURE;
168 ATH_MSG_WARNING(
"Unable to create calibrated jet shallow copy container");
169 return StatusCode::SUCCESS;
174 const auto *
const caloclusters = (name.find(
"Trimmed") == std::string::npos)
177 const auto *
const truths = (name.find(
"Trimmed") == std::string::npos)
182 return StatusCode::FAILURE;
185 if (not caloclusters) {
186 return StatusCode::FAILURE;
191 for (
const auto jet : *jets) {
199 if (truth_matched_nocuts)
200 m_tccPlots.at(name)->fillResponseNoPtNoMassCuts(*
jet, *truth_matched_nocuts);
210 for (
const auto truth : *truths)
226 m_tccPlots.at(name)->fillResponseNPV(*
jet, *truth_matched, vertices->size());
233 m_tccPlots.at(name)->fillPseudoResponse(*
jet, *calo_matched);
240 std::vector<const xAOD::Jet*> leadings = {
nullptr,
nullptr };
241 std::vector<const xAOD::Jet*> leadings_nocuts = {
nullptr,
nullptr };
243 std::vector<const xAOD::Jet*> tmp_leadings;
244 if (!jets->empty()) {
245 tmp_leadings.push_back(jets->at(0));
247 if (jets->size() > 1) {
248 tmp_leadings.push_back(jets->at(1));
251 if (tmp_leadings.size() > 1 and tmp_leadings.at(0)->m() < tmp_leadings.at(1)->m()) {
252 std::swap(tmp_leadings.at(0), tmp_leadings.at(1));
256 if (!tmp_leadings.empty() and fabs(tmp_leadings.at(0)->eta()) <
m_maxEta) {
257 leadings_nocuts.at(0) = tmp_leadings.at(0);
260 if (tmp_leadings.size() > 1 and fabs(tmp_leadings.at(1)->eta()) <
m_maxEta) {
261 leadings_nocuts.at(1) = tmp_leadings.at(1);
264 std::vector<const xAOD::Jet*> truth_matches_nocuts = {
nullptr,
nullptr };
265 unsigned int pos = 0;
266 for (
const auto&
jet : leadings_nocuts) {
271 if (truth_matched_nocuts)
272 truth_matches_nocuts.at(pos - 1) = truth_matched_nocuts;
275 if (leadings_nocuts.at(0)) {
277 if (truth_matches_nocuts.at(0))
278 m_tccPlots.at(name)->fillResponseNoPtNoMassCutsLeading(*leadings_nocuts.at(0), *truth_matches_nocuts.at(0));
279 ATH_MSG_DEBUG(
"Leading jet w/o cuts histograms filled! ...");
282 if (leadings_nocuts.at(1)) {
284 if (truth_matches_nocuts.at(1))
285 m_tccPlots.at(name)->fillResponseNoPtNoMassCutsSubLeading(*leadings_nocuts.at(1),
286 *truth_matches_nocuts.at(1));
287 ATH_MSG_DEBUG(
"SubLeading jet w/o cuts histograms filled! ...");
291 if (!tmp_leadings.empty() and fabs(tmp_leadings.at(0)->eta()) <
m_maxEta and tmp_leadings.at(0)->pt() >
m_minPt)
292 leadings.at(0) = tmp_leadings.at(0);
294 if (tmp_leadings.size() > 1 and fabs(tmp_leadings.at(1)->eta()) <
m_maxEta and tmp_leadings.at(1)->pt() >
m_minPt)
295 leadings.at(1) = tmp_leadings.at(1);
297 if (leadings.at(0)) {
298 m_tccPlots.at(name)->fillLeading(*leadings.at(0));
299 m_tccPlots.at(name)->fillMomentsLeading(*leadings.at(0));
302 if (leadings.at(1)) {
303 m_tccPlots.at(name)->fillSubLeading(*leadings.at(1));
304 m_tccPlots.at(name)->fillMomentsSubLeading(*leadings.at(1));
307 std::vector<const xAOD::Jet*> truth_matches = {
nullptr,
nullptr };
308 std::vector<const xAOD::Jet*> calo_matches = {
nullptr,
nullptr };
310 for (
const auto&
jet : leadings) {
316 truth_matches.at(pos - 1) = truth_matched;
319 calo_matches.at(pos - 1) = calo_matched;
322 if (leadings.at(0)) {
324 if (truth_matches.at(0) and (truth_matches.at(0)->m() >
m_minMass and truth_matches.at(0)->m() <
m_maxMass)) {
325 m_tccPlots.at(name)->fillMomentsLeadingWithMassCut(*leadings.at(0));
326 m_tccPlots.at(name)->fillResponseLeading(*leadings.at(0), *truth_matches.at(0));
328 m_tccPlots.at(name)->fillResponseLeadingNPV(*leadings.at(0), *truth_matches.at(0), vertices->size());
329 if (calo_matches.at(0))
330 m_tccPlots.at(name)->fillPseudoResponseLeading(*leadings.at(0), *calo_matches.at(0));
335 if (leadings.at(1)) {
337 if (truth_matches.at(1) and (truth_matches.at(1)->m() >
m_minMass and truth_matches.at(1)->m() <
m_maxMass)) {
338 m_tccPlots.at(name)->fillMomentsSubLeadingWithMassCut(*leadings.at(1));
339 m_tccPlots.at(name)->fillResponseSubLeading(*leadings.at(1), *truth_matches.at(1));
341 m_tccPlots.at(name)->fillResponseSubLeadingNPV(*leadings.at(1), *truth_matches.at(1), vertices->size());
342 if (calo_matches.at(1))
343 m_tccPlots.at(name)->fillPseudoResponseSubLeading(*leadings.at(1), *calo_matches.at(1));
354 return StatusCode::FAILURE;
355 for (
const auto track : *tracks) {
375 return StatusCode::FAILURE;
376 for (
const auto cluster : *clusters) {
388 return StatusCode::FAILURE;
390 std::vector<const xAOD::TrackParticle*> allpv0tracks;
391 for (
const auto tcc : *tccs) {
392 allpv0tracks.push_back(*tcc->trackParticleLink());
395 for (
const auto tcc : *tccs) {
396 m_tccPlots.at(name)->fillTCC(*tcc, allpv0tracks);
405 return StatusCode::SUCCESS;