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 =
200 auto trackZ0SinthetaTJVA =
203 auto trackZ0sinthetaSigTJVA =
209 auto trackPtRatioSeedJet =
212 auto trackNInnermostPixHits =
216 auto trackeProbabilityHT =
218 auto trackeProbabilityNN =
220 auto trackeProbabilityHTorNN =
231 auto clusterSecondLambda =
233 auto clusterCenterLambda =
235 auto clusterFirstEngDens =
238 auto clustersMeanCenterLambda =
240 auto clustersMeanFirstEngDens =
242 auto clustersMeanEMProbability =
244 auto clustersMeanSecondLambda =
246 auto clustersMeanPresamplerFrac =
248 auto clustersPFOEngRelDiff =
255 for (
const auto tau : *shallowTaus) {
257 if (!passThinningAcc.
withDefault(*tau,
true))
continue;
261 tauEt = tau->pt() /
GeV;
262 tauCharge = tau->charge();
263 NumTracks = tau->nTracks();
277 jetSeedEta = tau->etaJetSeed();
278 jetSeedPhi = tau->phiJetSeed();
279 jetSeedPt = tau->ptJetSeed() /
GeV;
289 if( trans_score.isAvailable()) {
293 JetScore =
score.isAvailable() ?
score(*tau) : -1234;
295 JetScoreSigTrans = trans_score(*tau);
298 tauLoose = tauid_loose.isAvailable() ? tauid_loose(*tau) : -1234;
301 tauMedium = tauid_medium.isAvailable() ? tauid_medium(*tau) : -1234;
304 tauTight = tauid_tight.isAvailable() ? tauid_tight(*tau) : -1234;
322 panEta = tau->etaPanTauCellBased();
323 panPhi = tau->phiPanTauCellBased();
324 panPt = tau->ptPanTauCellBased() /
GeV;
329 EMFrac = EMFracFixedAcc(*tau);
333 EfracL2EffCluster = tau->detail<
float>(
340 nNeutPFO = tau->nProtoNeutralPFOs();
341 nShot = tau->nShotPFOs();
343 int panModeDummy = -1;
344 int panModeSubstructureDummy = -1;
348 if( tauEt > lowerEtThreshold) {
352 if (tauEt > higherEtThreshold) {
353 nHighPtTauCandidates += 1;
358 tauEt > lowerEtThreshold && tauLoose) {
360 tauPhiEt15Loose = tau->phi();
361 tauEtaEt15Loose = tau->eta();
362 tauEtEt15Loose = tau->pt() /
GeV;
365 NumTracksEt15Loose = tau->nTracks();
369 panModeEt15Loose = panModeDummy;
370 fill(
tool, tauPhiEt15Loose, tauEtaEt15Loose,
371 nClustersEt15Loose, NumTracksEt15Loose, tauEtEt15Loose,
376 tauPhiLoose = tau->phi();
377 tauEtaLoose = tau->eta();
378 tauEtLoose = tau->pt() /
GeV;
379 NumTracksLoose = tau->nTracks();
381 fill(
tool, tauPhiLoose, tauEtaLoose, NumTracksLoose,
386 tauPhiMedium = tau->phi();
387 tauEtaMedium = tau->eta();
388 tauEtMedium = tau->pt() /
GeV;
389 NumTracksMedium = tau->nTracks();
391 fill(
tool, tauPhiMedium, tauEtaMedium, NumTracksMedium,
396 tauPhiTight = tau->phi();
397 tauEtaTight = tau->eta();
398 tauEtTight = tau->pt() /
GeV;
399 NumTracksTight = tau->nTracks();
401 fill(
tool, tauPhiTight, tauEtaTight, NumTracksTight,
407 if (tau->nTracks() != 0) {
416 if (d0SigTJVAAcc.isAvailable(*tau->track(0))) {
424 if (z0sinthetaSigTJVAAcc.
isAvailable(*tau->track(0))) {
484 phiTrack = perigee.parameters()[
Trk::phi];
485 etaTrack = perigee.eta();
486 ptTrack = perigee.pT() /
GeV;
502 double tauSeedPt = tau->ptJetSeed();
503 double logTauSeedPt =
std::log(tauSeedPt);
504 trackLogSeedJetPt = logTauSeedPt;
517 trackAcc(
"trackLinks");
518 if (!trackAcc(*
track)[0]) {
525 trackZ0SinthetaTJVA =
track->z0sinThetaTJVA(*tau);
526 trackD0SigTJVA = 999.;
527 trackZ0sinthetaSigTJVA = 999.;
529 float rConvII = 999.;
533 trackZ0SinthetaTJVA =
track->z0sinthetaTJVA();
534 trackD0SigTJVA =
track->d0SigTJVA();
535 trackZ0sinthetaSigTJVA =
track->z0sinthetaSigTJVA();
536 rConv =
track->rConv();
537 rConvII =
track->rConvII();
543 uint8_t nInnermostPixelLayerHits = 0;
570 trackeProbabilityHTorNN =
577 trackd0TJVA = std::tanh(
d0TJVA / 10.);
578 trackCharge = trackParticle->
charge();
579 trackqOverP =
qOverP * 1000.;
581 trackTanhRConvII = std::tanh(rConvII / 500.0);
582 trackPtRatioSeedJet =
trackPt / tauSeedPt;
583 trackNInnermostPixHits = nInnermostPixelLayerHits;
584 trackNPixHits =
nPixelHits + nPixelDeadSensors;
589 trackD0SigTJVA, trackZ0sinthetaSigTJVA, trackCharge, trackqOverP,
590 trackLogRConv, trackTanhRConvII, trackPtRatioSeedJet,
591 trackdRJetSeedAxis, trackNInnermostPixHits,
594 trackeProbabilityHT, trackeProbabilityNN, trackeProbabilityHTorNN);
597 float chargedScore = acc_trackScoreCharged(*
track);
598 float isolationScore = acc_trackScoreIso(*
track);
599 float conversionScore = acc_trackScoreConv(*
track);
600 float fakeScore = 1. - chargedScore - isolationScore - conversionScore;
605 trackIdScoreCharged = chargedScore;
606 trackIdScoreIso = isolationScore;
607 trackIdScoreConv = conversionScore;
608 trackIdScoreFake = fakeScore;
610 fill(
tool, trackIdScoreCharged, trackIdScoreIso, trackIdScoreConv,
616 std::vector<const xAOD::IParticle *> particleList = tau->clusters();
617 std::vector<xAOD::CaloVertexedTopoCluster>
clusters;
619 if (tau->vertexLink().isValid())
626 clusters.emplace_back(*cluster, xAOD::CaloCluster::State::CALIBRATED,
629 clusters.emplace_back(*cluster, xAOD::CaloCluster::State::CALIBRATED);
636 return lhs.
p4().Et() > rhs.p4().Et();
646 for (
const auto& vertexedCluster :
clusters) {
649 clusterLogEt = std::log10(vertexedCluster.p4().Et());
650 clusterEta = vertexedCluster.eta();
651 clusterPhi = vertexedCluster.phi();
654 clusterSecondR = std::log10(moment + 0.1);
658 clusterSecondLambda = std::log10(moment + 0.1);
662 clusterCenterLambda = std::log10(moment + 1
e-6);
667 moment = std::log10(std::abs(moment));
668 clusterFirstEngDens = moment;
672 clusterEMproba = moment;
674 fill(
tool, clusterLogEt, clusterEta, clusterPhi, clusterSecondR,
675 clusterSecondLambda, clusterCenterLambda, clusterFirstEngDens,
680 float avariable = 0.;
684 clustersMeanCenterLambda = avariable;
689 clustersMeanFirstEngDens = avariable;
694 clustersMeanEMProbability = avariable;
699 clustersMeanSecondLambda = avariable;
704 clustersMeanPresamplerFrac = avariable;
708 clustersPFOEngRelDiff = avariable;
710 fill(
tool, clustersMeanCenterLambda, clustersMeanFirstEngDens,
711 clustersMeanEMProbability, clustersMeanSecondLambda,
712 clustersMeanPresamplerFrac, clustersPFOEngRelDiff);
714 for (
int s = 0;
s < nShot;
s++) {
716 if (shot !=
nullptr) {
717 float pt3Temp = -9.0;
725 for (
unsigned int np = 0;
np < nNeutPFO;
np++) {
731 if (tauEt > lowerEtThreshold) {
732 tauPhiEt15 = tau->phi();
733 tauEtaEt15 = tau->eta();
740 muonVeto, tauLoose, tauMedium, tauTight, PSSFrac, EMFrac, EMFracTrk,
741 EfracL2EffCluster, EisoEffCluster, InvMassEffClusters, nNeutPFO,
742 nShot, NumTracks, nClusters, jetSeedEta, jetSeedPhi, jetSeedPt,
746 panModeSubstructureDummy);
747 panModeSubstructure = panModeSubstructureDummy;
756 fill(
tool, nHighPtTauCandidates, nTauCandidates, nHighPtTaus);
758 return StatusCode::SUCCESS;