ATLAS Offline Software
Loading...
Searching...
No Matches
xAODTauJetAuxContainerCnv_v2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5// System include(s):
6#include <stdexcept>
7
8// Gaudi/Athena include(s):
9#include "GaudiKernel/MsgStream.h"
10#include "GaudiKernel/ThreadLocalContext.h"
11
12// EDM include(s):
18
19// Local include(s):
21
22// StoreGateSvc
24#include "GaudiKernel/ServiceHandle.h"
25
26
30
31
35 const std::string& key,
36 MsgStream& log ) const {
37
38 ServiceHandle<StoreGateSvc> evtStore ("StoreGateSvc", "tauJetCnv_v2");
39 if (evtStore.retrieve().isFailure()) {
40 log << MSG::ERROR << "Cannot get StoreGateHandle" << endmsg;
41 return;
42 }
43
44 std::string tauTrackContName=key;
45 if (tauTrackContName.ends_with ("Aux.")) {
46 tauTrackContName.resize (tauTrackContName.size()-4);
47 }
48
49 //example names:
50 //TauJets : Jets --> Tracks
51 //HLT_xAOD__TauJetContainer_TrigTauRecMerged Jet --> Track; +=Tracks
52 //HLT_xAOD__TauJetContainer_TrigTauRecPreselection ""
53 if(tauTrackContName.find("Jet") != std::string::npos){
54 tauTrackContName.replace( tauTrackContName.find("Jet"), 3, "Track" );
55 if(tauTrackContName.find("HLT") != std::string::npos) tauTrackContName+="Tracks";
56 }
57 else if (key.length() > 0) {
58 log << MSG::ERROR << "Cannot decipher name TauTrackContainer should have" << endmsg;
59 return;
60 }
61
62 std::string tauTrackAuxContName=tauTrackContName+"Aux.";
63
64 xAOD::TauTrackContainer* pTracks = nullptr;
65 xAOD::TauTrackAuxContainer* pAuxTracks = nullptr;
66 if(key.length()){
67 //if reading data, then trigger calls T/P converter directly
68 //and the key is not set. In this case, forget about TauTracks
69 pTracks = new xAOD::TauTrackContainer();
70 pAuxTracks = new xAOD::TauTrackAuxContainer();
71 pTracks->setStore(pAuxTracks);
72
73 if(evtStore->record(pTracks, tauTrackContName).isFailure() ||
74 evtStore->record(pAuxTracks, tauTrackAuxContName).isFailure()){
75 log << MSG::DEBUG << "Couldn't Record TauTracks" << endmsg;
76 return;
77 }
78 }
79
80 // Clear the transient object:
81 newObj->resize( 0 );
82
83 // Set up interface containers on top of them:
85 for( size_t i = 0; i < oldObj->size(); ++i ) {
86 oldInt.push_back( new xAOD::TauJet_v2() );
87 }
88 oldInt.setStore( oldObj );
90 newInt.setStore( newObj );
91
92 // Loop over the interface objects, and do the conversion with their help:
93 for( const xAOD::TauJet_v2* oldTau : oldInt ) {
94
95 // Add an object to the output container:
96 xAOD::TauJet* newTau = new xAOD::TauJet;
97 newInt.push_back( newTau );
98
99 //
100 // Copy the 4-momentum variables:
101 //
102 newTau->setP4( oldTau->pt(), oldTau->eta(), oldTau->phi(), oldTau->m() );
103 newTau->setP4( xAOD::TauJetParameters::JetSeed, oldTau->ptJetSeed(), oldTau->etaJetSeed(), oldTau->phiJetSeed(), oldTau->mJetSeed() );
104 newTau->setP4( xAOD::TauJetParameters::DetectorAxis, oldTau->ptDetectorAxis(), oldTau->etaDetectorAxis(), oldTau->phiDetectorAxis(), oldTau->mDetectorAxis() );
105 newTau->setP4( xAOD::TauJetParameters::IntermediateAxis, oldTau->ptIntermediateAxis(), oldTau->etaIntermediateAxis(), oldTau->phiIntermediateAxis(), oldTau->mIntermediateAxis() );
106 newTau->setP4( xAOD::TauJetParameters::TauEnergyScale, oldTau->ptTauEnergyScale(), oldTau->etaTauEnergyScale(), oldTau->phiTauEnergyScale(), oldTau->mTauEnergyScale() );
107 newTau->setP4( xAOD::TauJetParameters::TauEtaCalib, oldTau->ptTauEtaCalib(), oldTau->etaTauEtaCalib(), oldTau->phiTauEtaCalib(), oldTau->mTauEtaCalib() );
108 newTau->setP4( xAOD::TauJetParameters::PanTauCellBased, oldTau->ptPanTauCellBased(), oldTau->etaPanTauCellBased(), oldTau->phiPanTauCellBased(), oldTau->mPanTauCellBased() );
109 newTau->setP4( xAOD::TauJetParameters::PanTauCellBasedProto, oldTau->ptPanTauCellBasedProto(), oldTau->etaPanTauCellBasedProto(), oldTau->phiPanTauCellBasedProto(), oldTau->mPanTauCellBasedProto() );
110
111 // ROI and charge
112 newTau->setROIWord( oldTau->ROIWord() );
113 newTau->setCharge( oldTau->charge() );
114 newTau->setTrackFilterProngs( oldTau->trackFilterProngs() );
115 newTau->setTrackFilterQuality( oldTau->trackFilterQuality() );
116 newTau->setPi0ConeDR( oldTau->pi0ConeDR() );
117
118 //
119 //copy PID variables
120 //
130
131 //
132 //set individual int type details variables
133 //
138
139 //
140 //set individual float type details variables
141 //
192
193
194 //
195 //set pantau details
196 //
209
210 //copy element links
211 newTau->setJetLink( oldTau->jetLink() );
212 newTau->setVertexLink( oldTau->vertexLink() );
213 newTau->setSecondaryVertexLink( oldTau->secondaryVertexLink() );
214
215 newTau->setNeutralPFOLinks( oldTau->neutralPFOLinks() );
216 newTau->setChargedPFOLinks( oldTau->chargedPFOLinks() );
217 newTau->setPi0PFOLinks( oldTau->pi0PFOLinks() );
218 newTau->setShotPFOLinks( oldTau->shotPFOLinks() );
219
220 //v2 doesn't have pfo element link with specific type name, so copy cellbased ones into proto
221 newTau->setProtoNeutralPFOLinks( oldTau->protoNeutralPFOLinks() );
222 newTau->setProtoChargedPFOLinks( oldTau->protoChargedPFOLinks() );
223 newTau->setProtoPi0PFOLinks( oldTau->protoPi0PFOLinks() );
224
225 if(key.length()==0) continue;
226
227 // Get context and look up hashed track container key.
228 const EventContext& ctx = Gaudi::Hive::currentContext();
229 ElementLink<xAOD::TauTrackContainer> dum (tauTrackContName, 0, ctx);
230 SG::sgkey_t track_sgkey = dum.key();
231 IProxyDict* sg = dum.source();
232
233 for(unsigned int i = 0; i < oldTau->nTracks(); ++i){
234 ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->trackLinks()[i];
235 linkToTrackParticle.toTransient (sg);
236 if(!linkToTrackParticle.isValid()) continue;
237 newTau->addTauTrackLink(ElementLink<xAOD::TauTrackContainer>(track_sgkey, pTracks->size(), ctx));
238 pTracks->push_back(std::make_unique<xAOD::TauTrack>());
239 xAOD::TauTrack& track = *pTracks->back();
240 const xAOD::TrackParticle* trackParticle=*linkToTrackParticle;
241 track.addTrackLink(linkToTrackParticle);
242 track.setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
247 //ElementLink<xAOD::TauTrackContainer> linkToTauTrack;
248 //linkToTauTrack.resetWithKeyAndIndex(track_sgkey, pTracks->size()-1, ctx);
249 //newTau->addTauTrackLink(linkToTauTrack);
250 }
251
252 for(unsigned int i = 0; i < oldTau->nWideTracks(); ++i){
253 ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->wideTrackLinks()[i];
254 linkToTrackParticle.toTransient (sg);
255 if(!linkToTrackParticle.isValid()) continue;
256 newTau->addTauTrackLink(ElementLink<xAOD::TauTrackContainer>(track_sgkey, pTracks->size(), ctx));
257 pTracks->push_back(std::make_unique<xAOD::TauTrack>());
258 xAOD::TauTrack& track = *pTracks->back();
259 const xAOD::TrackParticle* trackParticle=*linkToTrackParticle;
260 track.addTrackLink(linkToTrackParticle);
261 track.setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
267 }
268
269 for(unsigned int i = 0; i < oldTau->nOtherTracks(); ++i){
270 ElementLink< xAOD::TrackParticleContainer > linkToTrackParticle = oldTau->otherTrackLinks()[i];
271 linkToTrackParticle.toTransient (sg);
272 if(!linkToTrackParticle.isValid()) continue;
273 newTau->addTauTrackLink(ElementLink<xAOD::TauTrackContainer>(track_sgkey, pTracks->size(), ctx));
274 pTracks->push_back(std::make_unique<xAOD::TauTrack>());
275 xAOD::TauTrack& track = *pTracks->back();
276 const xAOD::TrackParticle* trackParticle=*linkToTrackParticle;
277 track.addTrackLink(linkToTrackParticle);
278 track.setP4(trackParticle->pt(), trackParticle->eta(), trackParticle->phi(), trackParticle->m());
279 float dR=oldTau->p4(xAOD::TauJetParameters::IntermediateAxis).DeltaR(trackParticle->p4());
280 if(dR<=0.2) track.setFlag(xAOD::TauJetParameters::TauTrackFlag::coreTrack, true);
281 else track.setFlag(xAOD::TauJetParameters::TauTrackFlag::wideTrack, true);
283 }
284
285
288
289 }
290
291 return;
292}
293
300 const std::string& /*key*/,
301 MsgStream& log ) const {
302
303 log << MSG::ERROR
304 << "Somebody called xAODTauJetAuxContainerCnv_v2::transToPers"
305 << endmsg;
306 throw std::runtime_error( "Somebody called xAODTauJetAuxContainerCnv_v2::"
307 "transToPers" );
308
309 return;
310}
311
#define endmsg
const T * back() const
Access the last element in the collection as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual void transToPersWithKey(const xAOD::TauJetAuxContainer *, xAOD::TauJetAuxContainer_v2 *, const std::string &key, MsgStream &log) const override
Dummy function inherited from the base class.
virtual void persToTransWithKey(const xAOD::TauJetAuxContainer_v2 *oldObj, xAOD::TauJetAuxContainer *newObj, const std::string &key, MsgStream &log) const override
Function converting from the old type to the current one.
virtual bool resize(size_t size) override
Resize the arrays to a given size.
virtual size_t size() const override
Get the size of the container.
Temporary container used until we have I/O for AuxStoreInternal.
Class describing a tau jet.
Definition TauJet_v2.h:38
void setShotPFOLinks(const PFOLinks_t &shotPFOs)
void setProtoPi0PFOLinks(const PFOLinks_t &protoPi0PFOs)
void setJetLink(const JetLink_t &jetLink)
void setPi0PFOLinks(const PFOLinks_t &pi0PFOs)
void setROIWord(unsigned int)
void setPanTauDetail(TauJetParameters::PanTauDetails panTauDetail, int value)
void setCharge(float)
void setVertexLink(const VertexLink_t &vertexLink)
void setPi0ConeDR(float)
void setProtoChargedPFOLinks(const PFOLinks_t &protoChargedPFOs)
void setSecondaryVertexLink(const VertexLink_t &vertexLink)
void setDiscriminant(TauJetParameters::TauID discID, double disc)
Set value of discriminant.
void setDetail(TauJetParameters::Detail detail, int value)
void setTrackFilterQuality(int)
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
void setTrackFilterProngs(int)
void setIsTau(TauJetParameters::IsTauFlag flag, bool value)
Set Flag for tau acceptance based on predefined arbitrary criteria.
void setProtoNeutralPFOLinks(const PFOLinks_t &protoNeutralPFOs)
void setNeutralPFOLinks(const PFOLinks_t &neutralPFOs)
void addTauTrackLink(const ElementLink< TauTrackContainer > &tr)
add a TauTrack to the tau
void setChargedPFOLinks(const PFOLinks_t &chargedPFOs)
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
virtual double m() const override final
The invariant mass of the particle..
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
uint32_t sgkey_t
Type used for hashed StoreGate key+CLID pairs.
Definition sgkey_t.h:32
@ hadRadius
Get hadron calorimeter radius.
Definition TauDefs.h:192
@ EMRadius
Get E_T radius.
Definition TauDefs.h:190
@ secMaxStripEt
migrate only seedTrk_ variables which are used in reco and ID and without prefix
Definition TauDefs.h:230
@ TauJetVtxFraction
@Tau Jet Vertex Fraction
Definition TauDefs.h:262
@ stripWidth2
Get strip width ^2.
Definition TauDefs.h:202
@ topoInvMass
get invariant mass from topoclusters of jet associated to tau candidate
Definition TauDefs.h:177
@ etHadAtEMScale
Get Hadronic energy at EM scale.
Definition TauDefs.h:196
@ isolFrac
Get isolation fraction.
Definition TauDefs.h:198
@ lead2ClusterEOverAllClusterE
Get sum of 2 leading cluster energy over all cluster energy.
Definition TauDefs.h:218
@ topoMeanDeltaR
get mean distance to leading topocluster for topoclusters of jet associated to tau candidate
Definition TauDefs.h:181
@ trkRmsDist
Get the RMS of track distance to calorimeter seed.
Definition TauDefs.h:216
@ nStrip
Get number of strips.
Definition TauDefs.h:204
@ cellBasedEnergyRing4
Ring 4: 0.10 < R < 0.125.
Definition TauDefs.h:252
@ effTopoMeanDeltaR
get mean distance to leading topocluster for effective topoclusters of jet associated to tau candidat...
Definition TauDefs.h:183
@ caloIso
Get sum of transvers energy of clusters around jet seed within 0.2 < dR < 0.4.
Definition TauDefs.h:222
@ trkAvgDist
Get calibrated EM transverse energy (DEPRECATED since r19)
Definition TauDefs.h:214
@ cellBasedEnergyRing6
Ring 6: 0.15 < R < 0.2.
Definition TauDefs.h:256
@ cellBasedEnergyRing5
Ring 5: 0.125 < R < 0.15.
Definition TauDefs.h:254
@ effTopoInvMass
get invariant mass from effective topoclusters of jet associated to tau candidate
Definition TauDefs.h:179
@ cellBasedEnergyRing7
Ring 7: 0.2 < R < 0.4.
Definition TauDefs.h:258
@ etEMAtEMScale
Get EM energy at EM scale.
Definition TauDefs.h:194
@ TRT_NHT_OVER_NLT
TRT hits high threshold over low threshold.
Definition TauDefs.h:260
@ centFrac
Get centrality fraction.
Definition TauDefs.h:200
@ caloIsoCorrected
Get sum of transvers energy of clusters around jet seed within 0.2 < dR < 0.4 (pile up corrected)
Definition TauDefs.h:224
@ cellBasedEnergyRing2
Ring 2: 0.05 < R < 0.075.
Definition TauDefs.h:248
@ numTopoClusters
get number of topocluster constituents of jet associated to tau candidate
Definition TauDefs.h:173
@ numEffTopoClusters
get number of effective topocluster constituents of jet associated to tau candidate !...
Definition TauDefs.h:175
@ cellBasedEnergyRing3
Ring 3: 0.075 < R < 0.10.
Definition TauDefs.h:250
@ cellBasedEnergyRing1
EM+TES final scale.
Definition TauDefs.h:246
@ dRmax
Get maximal dR of tracks associated to calo-seeded tau.
Definition TauDefs.h:226
@ lead3ClusterEOverAllClusterE
Get sum of 3 leading cluster energy over all cluster energy.
Definition TauDefs.h:220
@ PanTau_BDTVar_Neutral_PID_BDTValues_BDTSort_2
Definition TauDefs.h:371
@ PanTau_BDTVar_Neutral_Ratio_1stBDTEtOverEtAllConsts
Definition TauDefs.h:372
@ PanTau_BDTVar_Neutral_PID_BDTValues_BDTSort_1
Definition TauDefs.h:370
@ PanTau_BDTVar_Combined_DeltaR1stNeutralTo1stCharged
Definition TauDefs.h:375
@ PanTau_BDTVar_Neutral_Ratio_EtOverEtAllConsts
Definition TauDefs.h:373
@ PanTau_BDTVar_Charged_StdDev_Et_WrtEtAllConsts
Definition TauDefs.h:368
@ BDTJetScore
Boosted Decision Tree socre for Jet rejection (not transformed)
Definition TauDefs.h:78
@ BDTEleScore
Boosted Decision Tree score for electron rejection.
Definition TauDefs.h:80
@ BDTJetScoreSigTrans
BDT score which is signal transformed/flattened.
Definition TauDefs.h:84
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TauTrack_v1 TauTrack
Definition of the current version.
Definition TauTrack.h:16
TauJet_v3 TauJet
Definition of the current "tau version".
TauJetAuxContainer_v3 TauJetAuxContainer
Definition of the current taujet auxiliary container.
TauTrackContainer_v1 TauTrackContainer
Definition of the current TauTrack container version.
DataVector< xAOD::TauJet_v2 > TauJetContainer_v2
The container is a simple typedef for now.
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".
TauTrackAuxContainer_v1 TauTrackAuxContainer