20 }
catch (
const std::out_of_range &e) {
26 return func(tau, out);
30 const std::vector<const xAOD::TauTrack *> &tracks,
31 std::vector<double> &out)
const {
38 }
catch (
const std::out_of_range &e) {
46 for (
const auto *
const trk : tracks) {
47 success = success && func(tau, *trk, value);
55 const std::vector<xAOD::CaloVertexedTopoCluster> &clusters,
56 std::vector<double> &out)
const {
63 }
catch (
const std::out_of_range &e) {
72 success = success && func(tau, cluster, value);
80 if (std::find(scalar_vars.begin(), scalar_vars.end(), name) == scalar_vars.end()) {
84 throw std::invalid_argument(
"Nullptr passed to VarCalc::insert");
90 if (std::find(track_vars.begin(), track_vars.end(), name) == track_vars.end()) {
94 throw std::invalid_argument(
"Nullptr passed to VarCalc::insert");
100 if (std::find(cluster_vars.begin(), cluster_vars.end(), name) == cluster_vars.end()) {
104 throw std::invalid_argument(
"Nullptr passed to VarCalc::insert");
109std::unique_ptr<VarCalc>
get_calculator(
const std::vector<std::string>& scalar_vars,
110 const std::vector<std::string>& track_vars,
111 const std::vector<std::string>& cluster_vars,
113 auto calc = std::make_unique<VarCalc>();
208 out = std::min(std::abs(ipSigLeadTrk), 30.0f);
242 const auto success = tau.
detail(TauDetail::dRmax,
dRmax);
257 out = std::log10(std::max(
massTrkSys, 140.0f));
262 out = std::log10(std::min(tau.
pt() /
GeV, 100.0));
267 out = std::log10(std::max(tau.
pt() /
GeV, 1e-6));
277 out = std::log10(std::max(tau.
ptJetSeed(), 1e-3));
284 float absEtaLeadTrack = acc_absEtaLeadTrack(tau);
285 out = std::max(0.f, absEtaLeadTrack);
292 out = std::max(0.f, absDeltaEta);
298 float absDeltaPhi = tau.
nTracks() > 0 ? std::abs( tau.
track(0)->
track()->
p4().DeltaPhi(tau.
p4()) ) : -1111.;
299 out = std::max(0.f, absDeltaPhi);
307 if (!tracks.empty()) {
309 return lhs->
pt() > rhs->pt();
311 std::sort(tracks.begin(), tracks.end(), cmp_pt);
317 float eProbabilityNN = acc_eProbabilityNN(*xTrackParticle);
318 out = (tauLeadTrack->
pt()>2000.) ? eProbabilityNN : eProbabilityHT;
330 if (!tracks.empty()) {
332 return lhs->
pt() > rhs->pt();
334 std::sort(tracks.begin(), tracks.end(), cmp_pt);
338 out = (tauLeadTrack->
pt()>2000.) ? 0.5 : 1.;
350 float emFracFixed = acc_emFracFixed(tau);
351 out = std::max(emFracFixed, 0.0f);
359 out = std::log10(out);
372 const auto success = tau.
detail(TauDetail::PSSFraction,
PSFrac);
373 out = std::max(0.f,
PSFrac);
415 out = std::log10(track.pt());
420 out = std::log10(std::max(tau.
pt(), 1e-6));
430 out = std::log10(std::abs(track.z0sinthetaTJVA()) + 1e-6);
435 out = std::log10(std::abs(track.d0TJVA()) + 1e-6);
440 out = track.z0sinthetaTJVA();
445 out = track.z0sinthetaSigTJVA();
450 out = track.d0TJVA();
455 out = track.d0SigTJVA();
460 out = track.eta() - tau.
eta();
465 out = track.p4().DeltaPhi(tau.
p4());
470 uint8_t inner_pixel_hits;
472 out = inner_pixel_hits;
492 uint8_t inner_pixel_hits, inner_pixel_exp;
495 out = inner_pixel_exp ? inner_pixel_hits : 1.;
496 return success1 && success2;
500 uint8_t pixel_hits, pixel_dead;
503 out = pixel_hits + pixel_dead;
504 return success1 && success2;
508 uint8_t sct_hits, sct_dead;
511 out = sct_hits + sct_dead;
512 return success1 && success2;
516 auto atrack = track.track();
519 float eProbabilityNN = acc_eProbabilityNN(*atrack);
520 out = (atrack->pt()>2000.) ? eProbabilityNN : eProbabilityHT;
525 auto atrack = track.track();
527 out = (atrack->pt()>2000.) ? 0.5 : 1.;
538 out = std::log10(cluster.
p4().Et());
543 out = std::log10(std::max(tau.
pt(), 1e-6));
553 out = cluster.
eta() - tau.
eta();
558 out = cluster.
p4().DeltaPhi(tau.
p4());
564 out = std::log10(out + 0.1);
570 out = std::log10(out + 0.1);
576 out = std::log10(out + 1e-6);
583 double secondLambda(0);
584 const auto success = cluster.
clust().
retrieveMoment(MomentType::SECOND_LAMBDA, secondLambda);
592 double centerLambda(0);
593 const auto success = cluster.
clust().
retrieveMoment(MomentType::CENTER_LAMBDA, centerLambda);
600 out = std::min(out, 250.);
610 double clusterFirstEngDens = 0.0;
611 bool status = cluster.
clust().
retrieveMoment(MomentType::FIRST_ENG_DENS, clusterFirstEngDens);
612 if (clusterFirstEngDens < 1e-6) clusterFirstEngDens = 1e-6;
615 float clusterTotalEnergy = acc_ClusterTotalEnergy(tau);
616 if (clusterTotalEnergy < 1e-6) clusterTotalEnergy = 1e-6;
619 float clustersMeanFirstEngDens = acc_ClustersMeanFirstEngDens(tau);
621 out = std::log10(clusterFirstEngDens/clusterTotalEnergy) - clustersMeanFirstEngDens;
Helper class to provide constant type-safe access to aux data.
std::unordered_map< std::string, ClusterCalc > m_cluster_map
bool(*)(const xAOD::TauJet &, double &) ScalarCalc
bool compute(const std::string &name, const xAOD::TauJet &tau, double &out) const
void insert(const std::string &name, ScalarCalc func, const std::vector< std::string > &scalar_vars)
bool(*)(const xAOD::TauJet &, const xAOD::TauTrack &, double &) TrackCalc
std::unordered_map< std::string, ScalarCalc > m_scalar_map
bool(*)(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &, double &) ClusterCalc
std::unordered_map< std::string, TrackCalc > m_track_map
AsgMessaging(const std::string &name)
Constructor with a name.
bool retrieveMoment(MomentType type, double &value) const
Retrieve individual moment.
MomentType
Enums to identify different moments.
virtual FourMom_t p4() const final
The full 4-momentum of the particle.
const CaloCluster & clust() const
Return the cluster being proxied,.
virtual double eta() const final
The pseudorapidity ( ) of the particle.
Evaluate cluster kinematics with a different vertex / signal state.
double ptDetectorAxis() const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
virtual double pt() const
The transverse momentum ( ) of the particle.
bool detail(TauJetParameters::Detail detail, int &value) const
Get and set values of common details variables via enum.
const TauTrack * track(size_t i, TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged, int *container_index=0) const
Get the pointer to a given tauTrack associated with this tau /*container index needed by trackNonCons...
std::vector< const TauTrack * > allTracks() const
Get the v<const pointer> to all tracks associated with this tau, regardless of classification.
virtual double eta() const
The pseudorapidity ( ) of the particle.
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
virtual double pt() const
The transverse momentum ( ) of the particle.
const TrackParticle * track() const
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
xAOD::CaloCluster::MomentType MomentType
bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &, double &out)
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool SECOND_R(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool et_log(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool CENTER_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool SECOND_LAMBDA(const xAOD::TauJet &, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool SECOND_LAMBDAOverClustersMeanSecondLambda(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool CENTER_LAMBDAOverClustersMeanCenterLambda(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool dEta(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool FirstEngDensOverClustersMeanFirstEngDens(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, double &out)
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &, double &out)
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::TauTrack &, double &out)
bool pt_tau_log(const xAOD::TauJet &tau, const xAOD::TauTrack &, double &out)
bool d0TJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool z0sinthetaSigTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nSCTHitsPlusDeadSensors(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nInnermostPixelHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nIBLHitsAndExp(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool pt_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool d0_abs_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nPixelHitsPlusDeadSensors(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool nSCTHits(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool z0sinthetaTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
bool eProbabilityNNorHT_noTRT(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool eProbabilityNNorHT(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool z0sinThetaTJVA_abs_log(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool d0SigTJVA(const xAOD::TauJet &, const xAOD::TauTrack &track, double &out)
bool innerTrkAvgDist(const xAOD::TauJet &tau, double &out)
bool etOverPtLeadTrk(const xAOD::TauJet &tau, double &out)
bool ClustersMeanCenterLambda(const xAOD::TauJet &tau, double &out)
bool pt_tau_log(const xAOD::TauJet &tau, double &out)
bool ptJetSeed_log(const xAOD::TauJet &tau, double &out)
bool pt(const xAOD::TauJet &tau, double &out)
bool trFlightPathSig(const xAOD::TauJet &tau, double &out)
bool ptDetectorAxis(const xAOD::TauJet &tau, double &out)
bool ClustersMeanPresamplerFrac(const xAOD::TauJet &tau, double &out)
bool ClustersMeanFirstEngDens(const xAOD::TauJet &tau, double &out)
bool ClustersMeanEMProbability(const xAOD::TauJet &tau, double &out)
bool etHotShotWinOverPtLeadTrk(const xAOD::TauJet &tau, double &out)
bool PSFrac(const xAOD::TauJet &tau, double &out)
bool leadTrackDeltaEta(const xAOD::TauJet &tau, double &out)
bool hadLeakFracFixed(const xAOD::TauJet &tau, double &out)
bool ptRatioEflowApprox(const xAOD::TauJet &tau, double &out)
bool EMFracFixed(const xAOD::TauJet &tau, double &out)
bool leadTrackProbNNorHT(const xAOD::TauJet &tau, double &out)
bool EMPOverTrkSysP(const xAOD::TauJet &tau, double &out)
bool mEflowApprox(const xAOD::TauJet &tau, double &out)
bool absleadTrackEta(const xAOD::TauJet &tau, double &out)
bool absipSigLeadTrk(const xAOD::TauJet &tau, double &out)
bool leadTrackProbNNorHT_noTRT(const xAOD::TauJet &tau, double &out)
bool centFrac(const xAOD::TauJet &tau, double &out)
bool dRmax(const xAOD::TauJet &tau, double &out)
bool massTrkSys(const xAOD::TauJet &tau, double &out)
bool leadTrackDeltaPhi(const xAOD::TauJet &tau, double &out)
bool SumPtTrkFrac(const xAOD::TauJet &tau, double &out)
xAOD::TauJetParameters::Detail TauDetail
bool ClustersMeanSecondLambda(const xAOD::TauJet &tau, double &out)
std::unique_ptr< VarCalc > get_calculator(const std::vector< std::string > &scalar_vars, const std::vector< std::string > &track_vars, const std::vector< std::string > &cluster_vars, bool useTRT)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
Detail
Enum for tau parameters - used mainly for backward compatibility with the analysis code.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TauTrack_v1 TauTrack
Definition of the current version.
TauJet_v3 TauJet
Definition of the current "tau version".
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ eProbabilityHT
Electron probability from High Threshold (HT) information [float].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].