7 #include "GaudiKernel/SystemOfUnits.h"
16 ISvcLocator *pSvcLocator)
49 ATH_MSG_ERROR(
"evtStore() does not contain tau Collection with name "
51 return StatusCode::FAILURE;
55 std::unique_ptr<xAOD::TauJetContainer> shallowTaus(shallowCopy.first);
56 std::unique_ptr<xAOD::ShallowAuxContainer> shallowTausAux(shallowCopy.second);
58 const int lowerEtThreshold = 15;
59 const int higherEtThreshold = 75;
67 std::string tauid =
"";
76 auto panModeEt15Loose =
78 auto panModeSubstructure =
89 auto JetScoreSigTrans =
97 auto NumTracksEt15Loose =
101 auto nHighPtTauCandidates =
104 auto nClustersEt15Loose =
193 auto trackZ0SinthetaTJVA =
196 auto trackZ0sinthetaSigTJVA =
202 auto trackPtRatioSeedJet =
205 auto trackNInnermostPixHits =
209 auto trackeProbabilityHT =
211 auto trackeProbabilityNN =
213 auto trackeProbabilityHTorNN =
224 auto clusterSecondLambda =
226 auto clusterCenterLambda =
228 auto clusterFirstEngDens =
231 auto clustersMeanCenterLambda =
233 auto clustersMeanFirstEngDens =
235 auto clustersMeanEMProbability =
237 auto clustersMeanSecondLambda =
239 auto clustersMeanPresamplerFrac =
241 auto clustersPFOEngRelDiff =
248 for (
const auto tau : *shallowTaus) {
250 if (!passThinningAcc.
withDefault(*tau,
true))
continue;
254 tauEt = tau->pt() /
GeV;
255 tauCharge = tau->charge();
256 NumTracks = tau->nTracks();
268 jetSeedEta = tau->etaJetSeed();
269 jetSeedPhi = tau->phiJetSeed();
270 jetSeedPt = tau->ptJetSeed() /
GeV;
280 if( trans_score.isAvailable()) {
284 JetScore =
score.isAvailable() ?
score(*tau) : -1234;
286 JetScoreSigTrans = trans_score(*tau);
289 tauLoose = tauid_loose.isAvailable() ? tauid_loose(*tau) : -1234;
292 tauMedium = tauid_medium.isAvailable() ? tauid_medium(*tau) : -1234;
295 tauTight = tauid_tight.isAvailable() ? tauid_tight(*tau) : -1234;
313 panEta = tau->etaPanTauCellBased();
314 panPhi = tau->phiPanTauCellBased();
315 panPt = tau->ptPanTauCellBased() /
GeV;
320 EMFrac = EMFracFixedAcc(*tau);
324 nNeutPFO = tau->nProtoNeutralPFOs();
325 nShot = tau->nShotPFOs();
327 int panModeDummy = -1;
328 int panModeSubstructureDummy = -1;
332 if( tauEt > lowerEtThreshold) {
336 if (tauEt > higherEtThreshold) {
337 nHighPtTauCandidates += 1;
342 tauEt > lowerEtThreshold && tauLoose) {
344 tauPhiEt15Loose = tau->phi();
345 tauEtaEt15Loose = tau->eta();
346 tauEtEt15Loose = tau->pt() /
GeV;
349 NumTracksEt15Loose = tau->nTracks();
353 panModeEt15Loose = panModeDummy;
354 fill(
tool, tauPhiEt15Loose, tauEtaEt15Loose,
355 nClustersEt15Loose, NumTracksEt15Loose, tauEtEt15Loose,
360 tauPhiLoose = tau->phi();
361 tauEtaLoose = tau->eta();
362 tauEtLoose = tau->pt() /
GeV;
363 NumTracksLoose = tau->nTracks();
365 fill(
tool, tauPhiLoose, tauEtaLoose, NumTracksLoose,
370 tauPhiMedium = tau->phi();
371 tauEtaMedium = tau->eta();
372 tauEtMedium = tau->pt() /
GeV;
373 NumTracksMedium = tau->nTracks();
375 fill(
tool, tauPhiMedium, tauEtaMedium, NumTracksMedium,
380 tauPhiTight = tau->phi();
381 tauEtaTight = tau->eta();
382 tauEtTight = tau->pt() /
GeV;
383 NumTracksTight = tau->nTracks();
385 fill(
tool, tauPhiTight, tauEtaTight, NumTracksTight,
391 if (tau->nTracks() != 0) {
399 if (d0SigTJVAAcc.isAvailable(*tau->track(0))) {
407 if (z0sinthetaSigTJVAAcc.
isAvailable(*tau->track(0))) {
467 phiTrack = perigee.parameters()[
Trk::phi];
468 etaTrack = perigee.eta();
469 ptTrack = perigee.pT() /
GeV;
485 double tauSeedPt = tau->ptJetSeed();
486 double logTauSeedPt =
std::log(tauSeedPt);
487 trackLogSeedJetPt = logTauSeedPt;
500 trackAcc(
"trackLinks");
501 if (!trackAcc(*
track)[0]) {
508 trackZ0SinthetaTJVA =
track->z0sinThetaTJVA(*tau);
509 trackD0SigTJVA = 999.;
510 trackZ0sinthetaSigTJVA = 999.;
512 float rConvII = 999.;
516 trackZ0SinthetaTJVA =
track->z0sinthetaTJVA();
517 trackD0SigTJVA =
track->d0SigTJVA();
518 trackZ0sinthetaSigTJVA =
track->z0sinthetaSigTJVA();
519 rConv =
track->rConv();
520 rConvII =
track->rConvII();
526 uint8_t nInnermostPixelLayerHits = 0;
553 trackeProbabilityHTorNN =
560 trackd0TJVA = std::tanh(
d0TJVA / 10.);
561 trackCharge = trackParticle->
charge();
562 trackqOverP =
qOverP * 1000.;
564 trackTanhRConvII = std::tanh(rConvII / 500.0);
565 trackPtRatioSeedJet =
trackPt / tauSeedPt;
566 trackNInnermostPixHits = nInnermostPixelLayerHits;
572 trackD0SigTJVA, trackZ0sinthetaSigTJVA, trackCharge, trackqOverP,
573 trackLogRConv, trackTanhRConvII, trackPtRatioSeedJet,
574 trackdRJetSeedAxis, trackNInnermostPixHits,
577 trackeProbabilityHT, trackeProbabilityNN, trackeProbabilityHTorNN);
580 float chargedScore = acc_trackScoreCharged(*
track);
581 float isolationScore = acc_trackScoreIso(*
track);
582 float conversionScore = acc_trackScoreConv(*
track);
583 float fakeScore = 1. - chargedScore - isolationScore - conversionScore;
588 trackIdScoreCharged = chargedScore;
589 trackIdScoreIso = isolationScore;
590 trackIdScoreConv = conversionScore;
591 trackIdScoreFake = fakeScore;
593 fill(
tool, trackIdScoreCharged, trackIdScoreIso, trackIdScoreConv,
599 std::vector<const xAOD::IParticle *> particleList = tau->clusters();
600 std::vector<xAOD::CaloVertexedTopoCluster>
clusters;
602 if (tau->vertexLink().isValid())
609 clusters.emplace_back(*cluster, xAOD::CaloCluster::State::CALIBRATED,
612 clusters.emplace_back(*cluster, xAOD::CaloCluster::State::CALIBRATED);
619 return lhs.
p4().Et() > rhs.p4().Et();
629 for (
const auto& vertexedCluster :
clusters) {
632 clusterLogEt = std::log10(vertexedCluster.p4().Et());
633 clusterEta = vertexedCluster.eta();
634 clusterPhi = vertexedCluster.phi();
637 clusterSecondR = std::log10(moment + 0.1);
641 clusterSecondLambda = std::log10(moment + 0.1);
645 clusterCenterLambda = std::log10(moment + 1
e-6);
650 moment = std::log10(std::abs(moment));
651 clusterFirstEngDens = moment;
655 clusterEMproba = moment;
657 fill(
tool, clusterLogEt, clusterEta, clusterPhi, clusterSecondR,
658 clusterSecondLambda, clusterCenterLambda, clusterFirstEngDens,
663 float avariable = 0.;
667 clustersMeanCenterLambda = avariable;
672 clustersMeanFirstEngDens = avariable;
677 clustersMeanEMProbability = avariable;
682 clustersMeanSecondLambda = avariable;
687 clustersMeanPresamplerFrac = avariable;
691 clustersPFOEngRelDiff = avariable;
693 fill(
tool, clustersMeanCenterLambda, clustersMeanFirstEngDens,
694 clustersMeanEMProbability, clustersMeanSecondLambda,
695 clustersMeanPresamplerFrac, clustersPFOEngRelDiff);
697 for (
unsigned int np = 0;
np < nNeutPFO;
np++) {
703 if (tauEt > lowerEtThreshold) {
704 tauPhiEt15 = tau->phi();
705 tauEtaEt15 = tau->eta();
712 muonVeto, tauLoose, tauMedium, tauTight, PSSFrac, EMFrac, EMFracTrk, nNeutPFO,
713 nShot, NumTracks, nClusters, jetSeedEta, jetSeedPhi, jetSeedPt,
717 panModeSubstructureDummy);
718 panModeSubstructure = panModeSubstructureDummy;
727 fill(
tool, nHighPtTauCandidates, nTauCandidates, nHighPtTaus);
729 return StatusCode::SUCCESS;