173 std::vector<float> cluster_et_log, cluster_dEta, cluster_dPhi;
174 std::vector<float> cluster_log_SECOND_R, cluster_SECOND_LAMBDA, cluster_CENTER_LAMBDA;
179 auto mon_cluster_SECOND_LAMBDA =
Monitored::Collection(
"cluster_SECOND_LAMBDA", cluster_SECOND_LAMBDA);
180 auto mon_cluster_CENTER_LAMBDA =
Monitored::Collection(
"cluster_CENTER_LAMBDA", cluster_CENTER_LAMBDA);
181 std::vector<unsigned char> calo_errors;
203 std::vector<float> track_pt_log, track_dEta, track_dPhi;
204 std::vector<float> track_d0_abs_log, track_z0sinthetaTJVA_abs_log;
205 std::vector<float> track_nPixelHitsPlusDeadSensors, track_nSCTHitsPlusDeadSensors;
210 auto mon_track_z0sinthetaTJVA_abs_log =
Monitored::Collection(
"track_z0sinthetaTJVA_abs_log", track_z0sinthetaTJVA_abs_log);
211 auto mon_track_nPixelHitsPlusDeadSensors =
Monitored::Collection(
"track_nPixelHitsPlusDeadSensors", track_nPixelHitsPlusDeadSensors);
212 auto mon_track_nSCTHitsPlusDeadSensors =
Monitored::Collection(
"track_nSCTHitsPlusDeadSensors", track_nSCTHitsPlusDeadSensors);
213 std::vector<unsigned char> track_errors;
216 std::map<std::string, Monitored::Scalar<float>> monitoredIdVariables;
219 monitoredIdVariables.emplace(key +
"_TauJetScoreTrans_0p",
Monitored::Scalar<float>(key +
"_TauJetScoreTrans_0p", -1));
221 monitoredIdVariables.emplace(key +
"_TauJetScoreTrans_1p",
Monitored::Scalar<float>(key +
"_TauJetScoreTrans_1p", -1));
223 monitoredIdVariables.emplace(key +
"_TauJetScoreTrans_mp",
Monitored::Scalar<float>(key +
"_TauJetScoreTrans_mp", -1));
228 std::vector<float> hit_z, hit_dPhi;
232 std::map<std::string, Monitored::Scalar<float>> monitoredHitZVariables;
238 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> monVars = {
240 std::ref(pT), std::ref(
eta), std::ref(
phi),
241 std::ref(etaRoI), std::ref(phiRoI), std::ref(dEta_RoI), std::ref(dPhi_RoI),
242 std::ref(mEflowApprox), std::ref(ptRatioEflowApprox), std::ref(pt_jetseed_log),
243 std::ref(etaDetectorAxis), std::ref(ptDetectorAxis), std::ref(ptDetectorAxis_log),
245 std::ref(EtHad), std::ref(EtEm), std::ref(EMFrac), std::ref(IsoFrac), std::ref(CentFrac),
246 std::ref(clustersMeanCenterLambda), std::ref(clustersMeanFirstEngDens), std::ref(clustersMeanEMProbability),
247 std::ref(clustersMeanSecondLambda), std::ref(clustersMeanPresamplerFrac),
248 std::ref(n_clusters), std::ref(mon_cluster_et_log), std::ref(mon_cluster_dEta), std::ref(mon_cluster_dPhi),
249 std::ref(mon_cluster_log_SECOND_R), std::ref(mon_cluster_SECOND_LAMBDA), std::ref(mon_cluster_CENTER_LAMBDA),
250 std::ref(mon_calo_errors),
251 std::ref(n_tracks), std::ref(n_iso_tracks),
252 std::ref(ipSigLeadTrk), std::ref(trFlightPathSig), std::ref(massTrkSys), std::ref(dRmax), std::ref(trkAvgDist), std::ref(innerTrkAvgDist),
253 std::ref(etovPtLead), std::ref(PSSFraction), std::ref(EMPOverTrkSysP), std::ref(ChPiEMEOverCaloEME),
254 std::ref(vertex_x), std::ref(vertex_y), std::ref(vertex_z),
255 std::ref(n_all_tracks), std::ref(mon_track_pt_log), std::ref(mon_track_dEta), std::ref(mon_track_dPhi),
256 std::ref(mon_track_d0_abs_log), std::ref(mon_track_z0sinthetaTJVA_abs_log),
257 std::ref(mon_track_nPixelHitsPlusDeadSensors), std::ref(mon_track_nSCTHitsPlusDeadSensors),
258 std::ref(mon_track_errors),
259 std::ref(n_hits), std::ref(mon_hit_z), std::ref(mon_hit_dPhi)
261 for(
auto& [key, var] : monitoredIdVariables) monVars.push_back(std::ref(var));
262 for(
auto& [key, var] : monitoredHitZVariables) monVars.push_back(std::ref(var));
274 std::vector<ROOT::Math::XYZVector> tauHits;
283 return StatusCode::FAILURE;
286 if(roisHandle->empty()) {
288 return StatusCode::FAILURE;
297 return StatusCode::FAILURE;
306 std::unique_ptr<xAOD::TauJetContainer> outputContainer = std::make_unique<xAOD::TauJetContainer>();
307 std::unique_ptr<xAOD::TauJetAuxContainer> outputAuxContainer = std::make_unique<xAOD::TauJetAuxContainer>();
308 outputContainer->setStore(outputAuxContainer.get());
311 ATH_CHECK(outputTauHandle.
record(std::move(outputContainer), std::move(outputAuxContainer)));
314 std::unique_ptr<xAOD::TauTrackContainer> outputTrackContainer = std::make_unique<xAOD::TauTrackContainer>();
315 std::unique_ptr<xAOD::TauTrackAuxContainer> outputTrackAuxContainer = std::make_unique<xAOD::TauTrackAuxContainer>();
316 outputTrackContainer->setStore(outputTrackAuxContainer.get());
319 ATH_CHECK(tauTrackHandle.
record(std::move(outputTrackContainer), std::move(outputTrackAuxContainer)));
338 if(RoICaloClusterContainer) {
339 ATH_MSG_DEBUG(
"CaloCluster container found of size: " << RoICaloClusterContainer->
size());
346 return StatusCode::FAILURE;
350 std::unique_ptr<xAOD::JetContainer> jetContainer{std::make_unique<xAOD::JetContainer>()};
351 std::unique_ptr<xAOD::JetAuxContainer> jetAuxContainer{std::make_unique<xAOD::JetAuxContainer>()};
352 jetContainer->setStore(jetAuxContainer.get());
355 ATH_CHECK(outputTauSeedJetHandle.
record(std::move(jetContainer), std::move(jetAuxContainer)));
358 outputTauSeedJetHandle->push_back(std::make_unique<xAOD::Jet>());
366 TLorentzVector cluster_p4, barycenter;
368 ATH_MSG_DEBUG(
"Cluster (e, eta, phi): (" << cluster->e() <<
", " << cluster->eta() <<
", " << cluster->phi() <<
")");
370 if(cluster->e() < 0) {
375 cluster_p4.SetPtEtaPhiE(cluster->pt(), cluster->eta(), cluster->phi(), cluster->e());
376 jet->addConstituent(cluster);
378 barycenter += cluster_p4;
381 jet->setJetP4(
xAOD::JetFourMom_t(barycenter.Pt(), barycenter.Eta(), barycenter.Phi(), barycenter.M()));
382 ATH_MSG_DEBUG(
"Built jet with eta: " <<
jet->eta() <<
", phi: " <<
jet->phi() <<
", pT: " <<
jet->pt() <<
", E: "<<
jet->e() );
387 outputTauHandle->push_back(std::make_unique<xAOD::TauJet>());
388 tau = outputTauHandle->back();
396 ATH_MSG_DEBUG(
"Changing (eta, phi) back to the RoI center due to negative energy: " <<
jet->e());
397 tau->
setP4(tau->
pt(), roiDescriptor->
eta(), roiDescriptor->
phi(), tau->
m());
420 ATH_CHECK(hitsInputDecorHandle.isValid());
422 ATH_CHECK(hitsOutputDecorHandle.isValid());
433 for(
size_t i = 0; i < inputTauContainer->
size(); ++i) {
435 const auto& inputHits = hitsInputDecorHandle(*inputTau);
439 tauHits.push_back(ROOT::Math::XYZVector(
x(**el),
y(**el),
z(**el)));
444 hitsOutputDecorHandle(*outputTau) = inputHits;
456 for(
size_t j = 0; j < inputTauContainer->
size(); ++j) {
457 outputDecorHandle(*outputTauHandle->at(j)) = inputDecorHandle(*inputTauContainer->
at(j));
473 if(!outputTauHandle->empty()) {
474 tau = outputTauHandle->back();
494 if(!VertexContainerHandle.
isValid()) {
495 ATH_MSG_DEBUG(
"No VertexContainer retrieved for the trigger element");
498 RoIVxContainer = VertexContainerHandle.
get();
510 StatusCode processStatus = StatusCode::SUCCESS;
517 processStatus = tool->executeVertexFinder(*tau, RoIVxContainer);
519 if(!processStatus.isFailure()) {
520 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
528 if(!processStatus.isFailure())
ATH_MSG_DEBUG(
"Starting Tool: " << tool->name());
531 processStatus = tool->execute(*tau);
533 if(!processStatus.isFailure()) {
534 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
542 if(!processStatus.isFailure())
ATH_MSG_DEBUG(
"Starting Tool: " << tool->name());
545 processStatus = tool->executeTrackFinder(*tau, *tauTrackHandle);
547 if(!processStatus.isFailure()) {
548 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
556 if(!processStatus.isFailure())
ATH_MSG_DEBUG(
"Starting Tool: " << tool->name());
559 processStatus = tool->execute(*tau);
561 if(!processStatus.isFailure()) {
562 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
572 if(!processStatus.isFailure())
ATH_MSG_DEBUG(
"Starting Tool: " << tool->name());
575 processStatus = tool->executeVertexVariables(*tau, dummyVxCont);
577 if(!processStatus.isFailure()) {
578 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
586 if(!processStatus.isFailure())
ATH_MSG_DEBUG(
"Starting Tool: " << tool->name());
589 processStatus = tool->execute(*tau);
591 if(!processStatus.isFailure()) {
592 ATH_MSG_DEBUG(
" " << tool->name() <<
" executed successfully");
603 if(!processStatus.isSuccess()) {
604 ATH_MSG_DEBUG(
"The tau object has NOT been registered in the tau container");
608 tauTrackHandle->erase(tauTrackHandle->end() - bad_tau->
nAllTracks(), tauTrackHandle->end());
610 outputTauHandle->pop_back();
617 float fJetEnergy = (*tau->
jetLink())->e();
620 if(fJetEnergy < 0.00001) {
621 ATH_MSG_DEBUG(
"Changing tau's (eta,phi) to RoI ones due to negative energy (PxPyPzE flips eta and phi)");
622 ATH_MSG_DEBUG(
"This is probably not needed anymore, method PxPyPzE has been corrected");
625 tau->
setP4(tau->
pt(), roiDescriptor->
eta(), roiDescriptor->
phi(), tau->
m());
627 ATH_MSG_DEBUG(
"Roi: " << roiDescriptor->
roiId() <<
", Tau eta: " << tau->
eta() <<
", phi: " << tau->
phi() <<
", pT: " << tau->
pt());
635 pT = tau->
pt()/Gaudi::Units::GeV;
640 etaRoI = roiDescriptor->
eta();
641 phiRoI = roiDescriptor->
phi();
642 dEta_RoI =
eta - roiDescriptor->
eta();
643 dPhi_RoI =
phi - roiDescriptor->
phi();
644 if(dPhi_RoI < -
M_PI) dPhi_RoI += 2.0*
M_PI;
645 if(dPhi_RoI >
M_PI) dPhi_RoI -= 2.0*
M_PI;
648 float pre_mEflowApprox;
650 mEflowApprox = std::log10(std::max(pre_mEflowApprox, 140.0f));
652 float pre_ptRatioEflowApprox;
654 ptRatioEflowApprox = std::min(pre_ptRatioEflowApprox, 4.0f);
656 pt_jetseed_log = std::log10(tau->
ptJetSeed());
658 ptDetectorAxis = std::min(tau->
ptDetectorAxis()/Gaudi::Units::GeV, 10000.0);
659 ptDetectorAxis_log = std::log10(std::min(tau->
ptDetectorAxis()/Gaudi::Units::GeV, 10000.0));
664 EtHad /= Gaudi::Units::GeV;
666 EtEm /= Gaudi::Units::GeV;
668 float Et_raw = EtEm + EtHad;
669 if(Et_raw != 0) EMFrac = EtEm / Et_raw;
678 if(test) clustersMeanCenterLambda = tmp;
680 if(test) clustersMeanFirstEngDens = tmp;
682 if(test) clustersMeanEMProbability = tmp;
684 if(test) clustersMeanSecondLambda = tmp;
686 if(test) clustersMeanPresamplerFrac = tmp;
690 n_clusters = tau->
clusters().size();
691 for(
const auto& cluster : tau->
clusters()) {
694 cluster_et_log.push_back(std::log10(cls->et()));
695 cluster_dEta.push_back(cls->eta() - tau->
eta());
696 cluster_dPhi.push_back(cls->p4().DeltaPhi(tau->
p4()));
698 double log_second_R = -999;
700 if(success_SECOND_R) log_second_R = std::log10(log_second_R + 0.1);
701 cluster_log_SECOND_R.push_back(log_second_R);
703 double second_lambda = -999;
705 if(success_SECOND_LAMBDA) second_lambda = std::log10(second_lambda + 0.1);
706 cluster_SECOND_LAMBDA.push_back(second_lambda);
708 double center_lambda = -999;
710 if(success_CENTER_LAMBDA) center_lambda = std::log10(center_lambda + 1e-6);
711 cluster_CENTER_LAMBDA.push_back(center_lambda);
722 massTrkSys /= Gaudi::Units::GeV;
741 track_pt_log.push_back(std::log10(track->pt()));
742 track_dEta.push_back(track->eta() - tau->
eta());
743 track_dPhi.push_back(track->p4().DeltaPhi(tau->
p4()));
744 track_d0_abs_log.push_back(std::log10(std::abs(track->track()->d0()) + 1e-6));
745 track_z0sinthetaTJVA_abs_log.push_back(track->z0sinthetaTJVA());
747 uint8_t pixel_hits, pixel_dead;
750 float nPixelHitsPlusDeadSensor = -999;
751 if(success1_pixel_hits && success2_pixel_dead) nPixelHitsPlusDeadSensor = pixel_hits + pixel_dead;
752 track_nPixelHitsPlusDeadSensors.push_back(nPixelHitsPlusDeadSensor);
754 uint8_t sct_hits, sct_dead;
757 float nSCTHitsPlusDeadSensors = -999;
758 if(success1_sct_hits && success2_sct_dead) nSCTHitsPlusDeadSensors = sct_hits + sct_dead;
759 track_nSCTHitsPlusDeadSensors.push_back(nSCTHitsPlusDeadSensors);
765 n_hits = tauHits.size();
766 for(
const ROOT::Math::XYZVector& hit : tauHits) {
767 hit_z.push_back(hit.z());
777 if(score.isAvailable(*tau)) {
779 monitoredIdVariables.at(key +
"_TauJetScore_0p") = score(*tau);
780 }
else if(tau->
nTracks() == 1) {
781 monitoredIdVariables.at(key +
"_TauJetScore_1p") = score(*tau);
783 monitoredIdVariables.at(key +
"_TauJetScore_mp") = score(*tau);
787 if(scoreTrans.isAvailable(*tau)) {
789 monitoredIdVariables.at(key +
"_TauJetScoreTrans_0p") = scoreTrans(*tau);
790 }
else if(tau->
nTracks() == 1) {
791 monitoredIdVariables.at(key +
"_TauJetScoreTrans_1p") = scoreTrans(*tau);
793 monitoredIdVariables.at(key +
"_TauJetScoreTrans_mp") = scoreTrans(*tau);
803 if(z0.isAvailable(*tau)) {
804 monitoredHitZVariables.at(key +
"_z0") = z0(*tau);
806 if(sigma.isAvailable(*tau)) {
807 monitoredHitZVariables.at(key +
"_z0_sigma") = sigma(*tau);
816 <<
", Tau pT (GeV): " << pT <<
", Tau eta: " <<
eta <<
", Tau phi: " <<
phi
817 <<
", wrt RoI dEta: " << dEta_RoI <<
", dPhi: " << dPhi_RoI);
824 ATH_MSG_DEBUG(
"Output TauJetContainer size: " << outputTauHandle->size());
825 ATH_MSG_DEBUG(
"Output TauJetTrackContainer size: " << tauTrackHandle->size());
827 return StatusCode::SUCCESS;