ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTauRecMerged Class Reference

#include <TrigTauRecMerged.h>

Inheritance diagram for TrigTauRecMerged:

Public Member Functions

 TrigTauRecMerged (const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx) const override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

enum  TAUEFCALOMON {
  NoROIDescr =0 , NoCellCont =1 , EmptyCellCont =2 , NoClustCont =3 ,
  NoClustKey =4 , EmptyClustCont =5 , NoJetAttach =6 , NoHLTtauAttach =7 ,
  NoHLTtauDetAttach =8 , NoHLTtauXdetAttach =9
}
enum  TAUEFTRKMON { NoTrkCont =0 , NoVtxCont =1 }
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

template<class V>
StatusCode deepCopy (SG::WriteHandle< DataVector< V > > &writeHandle, const DataVector< V > *oldContainer) const
bool doCaloReconstruction () const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

const ToolHandleArray< ITauToolBasem_commonTools {this, "CommonTools", {}, "List of ITauToolBase common tools"}
const ToolHandleArray< ITauToolBasem_commonToolsBeforeTF {this, "CommonToolsBeforeTF", {}, "List of ITauToolBase common tools to execute before the Track Finder tools"}
const ToolHandleArray< ITauToolBasem_vertexFinderTools {this, "VertexFinderTools", {}, "Vertex Finder tools"}
const ToolHandleArray< ITauToolBasem_trackFinderTools {this, "TrackFinderTools", {}, "Track Finder tools"}
const ToolHandleArray< ITauToolBasem_vertexVarsTools {this, "VertexVarsTools", {}, "Vertex Variables tools"}
const ToolHandleArray< ITauToolBasem_idTools {this, "IDTools", {}, "Vertex Variables tools"}
const ToolHandle< GenericMonitoringToolm_monTool {this, "MonTool", "", "Monitoring tool"}
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredIdScores {this, "MonitoredIDScores", {}, "Pairs of the TauID score and signal-transformed scores for each TauID algorithm to be monitored"}
std::map< std::string, std::pair< SG::ConstAccessor< float >, SG::ConstAccessor< float > > > m_monitoredIdAccessors
SG::ReadHandleKey< TrigRoiDescriptorCollectionm_roiInputKey {this, "InputRoIs", "", "Input RoI name"}
SG::ReadHandleKey< xAOD::CaloClusterContainerm_clustersInputKey {this, "InputCaloClusterContainer", "", "Caloclusters in view"}
SG::ReadHandleKey< xAOD::VertexContainerm_vertexInputKey {this, "InputVertexContainer", "", "Input vertex container"}
SG::ReadHandleKey< xAOD::TauJetContainerm_tauJetInputKey {this, "InputTauJetContainer", "", "Input TauJet container"}
SG::ReadHandleKey< xAOD::TauTrackContainerm_tauTrackInputKey {this, "InputTauTrackContainer", "", "Input TauTrack container" }
SG::WriteHandleKey< xAOD::JetContainerm_tauSeedOutputKey {this, "OutputJetSeed", "", "Output jets which are seeds for tau jets"}
SG::WriteHandleKey< xAOD::TauJetContainerm_tauJetOutputKey {this, "OutputTauJetContainer", "", "Output TauJet container"}
SG::WriteHandleKey< xAOD::TauTrackContainerm_tauTrackOutputKey {this, "OutputTauTrackContainer", "", "Output TauTrack container"}
DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 25 of file TrigTauRecMerged.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ TAUEFCALOMON

Enumerator
NoROIDescr 
NoCellCont 
EmptyCellCont 
NoClustCont 
NoClustKey 
EmptyClustCont 
NoJetAttach 
NoHLTtauAttach 
NoHLTtauDetAttach 
NoHLTtauXdetAttach 

Definition at line 36 of file TrigTauRecMerged.h.

◆ TAUEFTRKMON

Enumerator
NoTrkCont 
NoVtxCont 

Definition at line 50 of file TrigTauRecMerged.h.

Constructor & Destructor Documentation

◆ TrigTauRecMerged()

TrigTauRecMerged::TrigTauRecMerged ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 33 of file TrigTauRecMerged.cxx.

34 : AthReentrantAlgorithm(name, pSvcLocator)
35{
36
37}

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ deepCopy()

template<class V>
StatusCode TrigTauRecMerged::deepCopy ( SG::WriteHandle< DataVector< V > > & writeHandle,
const DataVector< V > * oldContainer ) const
private

Definition at line 87 of file TrigTauRecMerged.h.

87 {
88 if(!writeHandle.isValid()) {
89 ATH_MSG_FATAL("Provided with an invalid write handle");
90 return StatusCode::FAILURE;
91 }
92
93 if(oldContainer){
94 for(const V* v : *oldContainer) {
95 // Build a new object in the new container
96 writeHandle->push_back(std::make_unique<V>());
97 // Copy across the aux store
98 *writeHandle->back() = *v;
99 }
100 }
101 return StatusCode::SUCCESS;
102}
#define ATH_MSG_FATAL(x)
virtual bool isValid() override final
Can the handle be successfully dereferenced?

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ doCaloReconstruction()

bool TrigTauRecMerged::doCaloReconstruction ( ) const
inlineprivate

Definition at line 83 of file TrigTauRecMerged.h.

83{ return m_tauJetInputKey.key().empty() && !m_clustersInputKey.key().empty(); }
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clustersInputKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauJetInputKey

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode TrigTauRecMerged::execute ( const EventContext & ctx) const
overridevirtual

Definition at line 81 of file TrigTauRecMerged.cxx.

82{
83 //===============================================================================
84 // Initialize monitoring variables
85 //===============================================================================
86
87 // Common CaloOnly and Precision monitored variables:
88 auto n_taus = Monitored::Scalar<int>("NTauCandidates", 0);
89
90 auto pT = Monitored::Scalar<float>("Pt", 0);
91 auto eta = Monitored::Scalar<float>("Eta", -99.9);
92 auto phi = Monitored::Scalar<float>("Phi", -99.9);
93
94 auto etaRoI = Monitored::Scalar<float>("EtaRoI", -99.9);
95 auto phiRoI = Monitored::Scalar<float>("PhiRoI", -99.9);
96 auto dEta_RoI = Monitored::Scalar<float>("dEtaTau_RoI", -10);
97 auto dPhi_RoI = Monitored::Scalar<float>("dPhiTau_RoI", -10);
98
99 auto mEflowApprox = Monitored::Scalar<float>("mEflowApprox", -99.9);
100 auto ptRatioEflowApprox = Monitored::Scalar<float>("ptRatioEflowApprox", -99.9);
101 auto pt_jetseed_log = Monitored::Scalar<float>("pt_jetseed_log", -99.9);
102 auto etaDetectorAxis = Monitored::Scalar<float>("etaDetectorAxis", -99.9);
103 auto ptDetectorAxis = Monitored::Scalar<float>("ptDetectorAxis", -99.9);
104 auto ptDetectorAxis_log = Monitored::Scalar<float>("ptDetectorAxis_log", -99.9);
105
106 auto n_cells = Monitored::Scalar<int>("NCaloCells", 0);
107 auto EMRadius = Monitored::Scalar<float>("EMRadius", -0.099);
108 auto HadRadius = Monitored::Scalar<float>("HadRadius", -0.099);
109 auto EtHad = Monitored::Scalar<float>("EtHad", -10);
110 auto EtEm = Monitored::Scalar<float>("EtEm", -10);
111 auto EMFrac = Monitored::Scalar<float>("EMFrac", -10);
112 auto IsoFrac = Monitored::Scalar<float>("IsoFrac", -1);
113 auto CentFrac = Monitored::Scalar<float>("CentFrac", -10);
114
115 auto clustersMeanCenterLambda = Monitored::Scalar<float>("clustersMeanCenterLambda", 0);
116 auto clustersMeanFirstEngDens = Monitored::Scalar<float>("clustersMeanFirstEngDens", 0);
117 auto clustersMeanEMProbability = Monitored::Scalar<float>("clustersMeanEMProbability", 0);
118 auto clustersMeanSecondLambda = Monitored::Scalar<float>("clustersMeanSecondLambda", 0);
119 auto clustersMeanPresamplerFrac = Monitored::Scalar<float>("clustersMeanPresamplerFrac", 0);
120
121 auto n_clusters = Monitored::Scalar<int>("NClusters", 0);
122 std::vector<float> cluster_et_log, cluster_dEta, cluster_dPhi;
123 std::vector<float> cluster_log_SECOND_R, cluster_SECOND_LAMBDA, cluster_CENTER_LAMBDA;
124 auto mon_cluster_et_log = Monitored::Collection("cluster_et_log", cluster_et_log);
125 auto mon_cluster_dEta = Monitored::Collection("cluster_dEta", cluster_dEta);
126 auto mon_cluster_dPhi = Monitored::Collection("cluster_dPhi", cluster_dPhi);
127 auto mon_cluster_log_SECOND_R = Monitored::Collection("cluster_log_SECOND_R", cluster_log_SECOND_R);
128 auto mon_cluster_SECOND_LAMBDA = Monitored::Collection("cluster_SECOND_LAMBDA", cluster_SECOND_LAMBDA);
129 auto mon_cluster_CENTER_LAMBDA = Monitored::Collection("cluster_CENTER_LAMBDA", cluster_CENTER_LAMBDA);
130 std::vector<unsigned char> calo_errors;
131 auto mon_calo_errors = Monitored::Collection("calo_errors", calo_errors);
132
133 // Precision monitored variables
134 auto n_tracks = Monitored::Scalar<int>("NTracks", -10);
135 auto n_iso_tracks = Monitored::Scalar<int>("NIsoTracks", -10);
136
137 auto ipSigLeadTrk = Monitored::Scalar<float>("ipSigLeadTrk", -1000);
138 auto trFlightPathSig = Monitored::Scalar<float>("trFlightPathSig", -10);
139 auto massTrkSys = Monitored::Scalar<float>("massTrkSys", -10);
140 auto dRmax = Monitored::Scalar<float>("dRmax", -10);
141 auto trkAvgDist = Monitored::Scalar<float>("TrkAvgDist", -1);
142 auto innerTrkAvgDist = Monitored::Scalar<float>("innerTrkAvgDist", -1);
143 auto etovPtLead = Monitored::Scalar<float>("EtovPtLead", -10);
144 auto PSSFraction = Monitored::Scalar<float>("PSSFraction", -999.9);
145 auto EMPOverTrkSysP = Monitored::Scalar<float>("EMPOverTrkSysP", -999.9);
146 auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("ChPiEMEOverCaloEME", -999.9);
147 auto vertex_x = Monitored::Scalar<float>("vertex_x", -999.9);
148 auto vertex_y = Monitored::Scalar<float>("vertex_y", -999.9);
149 auto vertex_z = Monitored::Scalar<float>("vertex_z", -999.9);
150
151 auto n_all_tracks = Monitored::Scalar<int>("NAllTracks", 0);
152 std::vector<float> track_pt_log, track_dEta, track_dPhi;
153 std::vector<float> track_d0_abs_log, track_z0sinthetaTJVA_abs_log;
154 std::vector<float> track_nPixelHitsPlusDeadSensors, track_nSCTHitsPlusDeadSensors;
155 auto mon_track_pt_log = Monitored::Collection("track_pt_log", track_pt_log);
156 auto mon_track_dEta = Monitored::Collection("track_dEta", track_dEta);
157 auto mon_track_dPhi = Monitored::Collection("track_dPhi", track_dPhi);
158 auto mon_track_d0_abs_log = Monitored::Collection("track_d0_abs_log", track_d0_abs_log);
159 auto mon_track_z0sinthetaTJVA_abs_log = Monitored::Collection("track_z0sinthetaTJVA_abs_log", track_z0sinthetaTJVA_abs_log);
160 auto mon_track_nPixelHitsPlusDeadSensors = Monitored::Collection("track_nPixelHitsPlusDeadSensors", track_nPixelHitsPlusDeadSensors);
161 auto mon_track_nSCTHitsPlusDeadSensors = Monitored::Collection("track_nSCTHitsPlusDeadSensors", track_nSCTHitsPlusDeadSensors);
162 std::vector<unsigned char> track_errors;
163 auto mon_track_errors = Monitored::Collection("track_errors", track_errors);
164
165 std::map<std::string, Monitored::Scalar<float>> monitoredIdVariables;
166 for(const auto& [key, p] : m_monitoredIdScores) {
167 monitoredIdVariables.emplace(key + "_TauJetScore_0p", Monitored::Scalar<float>(key + "_TauJetScore_0p", -1));
168 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_0p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_0p", -1));
169 monitoredIdVariables.emplace(key + "_TauJetScore_1p", Monitored::Scalar<float>(key + "_TauJetScore_1p", -1));
170 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_1p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_1p", -1));
171 monitoredIdVariables.emplace(key + "_TauJetScore_mp", Monitored::Scalar<float>(key + "_TauJetScore_mp", -1));
172 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_mp", Monitored::Scalar<float>(key + "_TauJetScoreTrans_mp", -1));
173 }
174
175 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> monVars = {
176 std::ref(n_taus),
177 std::ref(pT), std::ref(eta), std::ref(phi),
178 std::ref(etaRoI), std::ref(phiRoI), std::ref(dEta_RoI), std::ref(dPhi_RoI),
179 std::ref(mEflowApprox), std::ref(ptRatioEflowApprox), std::ref(pt_jetseed_log),
180 std::ref(etaDetectorAxis), std::ref(ptDetectorAxis), std::ref(ptDetectorAxis_log),
181 std::ref(n_cells),
182 std::ref(EMRadius), std::ref(HadRadius), std::ref(EtHad), std::ref(EtEm), std::ref(EMFrac), std::ref(IsoFrac), std::ref(CentFrac),
183 std::ref(clustersMeanCenterLambda), std::ref(clustersMeanFirstEngDens), std::ref(clustersMeanEMProbability),
184 std::ref(clustersMeanSecondLambda), std::ref(clustersMeanPresamplerFrac),
185 std::ref(n_clusters), std::ref(mon_cluster_et_log), std::ref(mon_cluster_dEta), std::ref(mon_cluster_dPhi),
186 std::ref(mon_cluster_log_SECOND_R), std::ref(mon_cluster_SECOND_LAMBDA), std::ref(mon_cluster_CENTER_LAMBDA),
187 std::ref(mon_calo_errors),
188 std::ref(n_tracks), std::ref(n_iso_tracks),
189 std::ref(ipSigLeadTrk), std::ref(trFlightPathSig), std::ref(massTrkSys), std::ref(dRmax), std::ref(trkAvgDist), std::ref(innerTrkAvgDist),
190 std::ref(etovPtLead), std::ref(PSSFraction), std::ref(EMPOverTrkSysP), std::ref(ChPiEMEOverCaloEME),
191 std::ref(vertex_x), std::ref(vertex_y), std::ref(vertex_z),
192 std::ref(n_all_tracks), std::ref(mon_track_pt_log), std::ref(mon_track_dEta), std::ref(mon_track_dPhi),
193 std::ref(mon_track_d0_abs_log), std::ref(mon_track_z0sinthetaTJVA_abs_log),
194 std::ref(mon_track_nPixelHitsPlusDeadSensors), std::ref(mon_track_nSCTHitsPlusDeadSensors),
195 std::ref(mon_track_errors)
196 };
197 for(auto& [key, var] : monitoredIdVariables) monVars.push_back(std::ref(var));
198 auto monitorIt = Monitored::Group(m_monTool, monVars);
199
200
201 ATH_MSG_DEBUG("Executing TrigTauRecMerged");
202
203 //===============================================================================
204 // Main TauJet object:
205 //===============================================================================
206 xAOD::TauJet* tau = nullptr;
207
208
209 //===============================================================================
210 // Retrieve RoI
211 //===============================================================================
212 SG::ReadHandle<TrigRoiDescriptorCollection> roisHandle = SG::makeHandle(m_roiInputKey, ctx);
213 if(!roisHandle.isValid()) {
214 ATH_MSG_ERROR("No RoIHandle found");
215 return StatusCode::FAILURE;
216 }
217
218 if(roisHandle->empty()) {
219 ATH_MSG_ERROR("Empty RoIHandle");
220 return StatusCode::FAILURE;
221 }
222
223 const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
224 if(roiDescriptor) {
225 ATH_MSG_DEBUG("RoI: " << *roiDescriptor);
226 } else {
227 ATH_MSG_ERROR("Failed to find TrigRoiDescriptor");
228 calo_errors.push_back(NoROIDescr);
229 return StatusCode::FAILURE;
230 }
231
232
233 //===============================================================================
234 // Prepare Output TauJet and TauTrack containers
235 //===============================================================================
236
237 // Create and register the output TauJetContainer
238 std::unique_ptr<xAOD::TauJetContainer> outputContainer = std::make_unique<xAOD::TauJetContainer>();
239 std::unique_ptr<xAOD::TauJetAuxContainer> outputAuxContainer = std::make_unique<xAOD::TauJetAuxContainer>();
240 outputContainer->setStore(outputAuxContainer.get());
241
242 SG::WriteHandle<xAOD::TauJetContainer> outputTauHandle(m_tauJetOutputKey, ctx);
243 ATH_CHECK(outputTauHandle.record(std::move(outputContainer), std::move(outputAuxContainer)));
244
245 // Create and register the output TauTrackContainer
246 std::unique_ptr<xAOD::TauTrackContainer> outputTrackContainer = std::make_unique<xAOD::TauTrackContainer>();
247 std::unique_ptr<xAOD::TauTrackAuxContainer> outputTrackAuxContainer = std::make_unique<xAOD::TauTrackAuxContainer>();
248 outputTrackContainer->setStore(outputTrackAuxContainer.get());
249
250 SG::WriteHandle<xAOD::TauTrackContainer> tauTrackHandle(m_tauTrackOutputKey, ctx);
251 ATH_CHECK(tauTrackHandle.record(std::move(outputTrackContainer), std::move(outputTrackAuxContainer)));
252
253
254 //===============================================================================
255 // Initial TauJet calo-reco / input-retrieval
256 //===============================================================================
257 // We now have two options for the TauJet reconstruction:
258 // 1) Reconstruct the TauJet from scratch, using the bare calo-clusters (1st trigger step)
259 // 2) Fetch a preceding TauJet (and dummy TauTracks), and use them to seed the current reconstruction
260
261 //-------------------------------------------------------------------------------
262 // Option 1: Calorimeter-only reconstruction from clusters (CaloMVA step)
263 //-------------------------------------------------------------------------------
265 // Retrieve Calocluster container
266 SG::ReadHandle<xAOD::CaloClusterContainer> CCContainerHandle = SG::makeHandle(m_clustersInputKey, ctx);
267 ATH_CHECK(CCContainerHandle.isValid());
268
269 const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get();
270 if(RoICaloClusterContainer) {
271 ATH_MSG_DEBUG("CaloCluster container found of size: " << RoICaloClusterContainer->size());
272
273 // If size is zero, don't stop just continue to produce empty TauJetCollection
274 if(RoICaloClusterContainer->empty()) calo_errors.push_back(NoClustCont);
275 } else {
276 ATH_MSG_ERROR("No CaloCluster container found");
277 calo_errors.push_back(NoClustCont);
278 return StatusCode::FAILURE;
279 }
280
281 // Also create the seed-jet containers
282 std::unique_ptr<xAOD::JetContainer> jetContainer{std::make_unique<xAOD::JetContainer>()};
283 std::unique_ptr<xAOD::JetAuxContainer> jetAuxContainer{std::make_unique<xAOD::JetAuxContainer>()};
284 jetContainer->setStore(jetAuxContainer.get());
285
286 SG::WriteHandle<xAOD::JetContainer> outputTauSeedJetHandle = SG::makeHandle(m_tauSeedOutputKey, ctx);
287 ATH_CHECK(outputTauSeedJetHandle.record(std::move(jetContainer), std::move(jetAuxContainer)));
288
289 // And create the seed-jet object itself
290 outputTauSeedJetHandle->push_back(std::make_unique<xAOD::Jet>());
291 xAOD::Jet *jet = outputTauSeedJetHandle->back();
292
293
294 // Build the jet, also keep track of the kinematics by hand
295 // Eventually, want to use FastJet here?
296 // We are using calibrated clusters, we need to keep track of this
298 TLorentzVector cluster_p4, barycenter;
299 for(const xAOD::CaloCluster* cluster : *RoICaloClusterContainer) {
300 ATH_MSG_DEBUG("Cluster (e, eta, phi): (" << cluster->e() << ", " << cluster->eta() << ", " << cluster->phi() << ")");
301
302 if(cluster->e() < 0) {
303 ATH_MSG_DEBUG("Negative energy cluster is rejected");
304 continue;
305 }
306
307 cluster_p4.SetPtEtaPhiE(cluster->pt(), cluster->eta(), cluster->phi(), cluster->e());
308 jet->addConstituent(cluster);
309
310 barycenter += cluster_p4;
311 }
312
313 jet->setJetP4(xAOD::JetFourMom_t(barycenter.Pt(), barycenter.Eta(), barycenter.Phi(), barycenter.M()));
314 ATH_MSG_DEBUG("Built jet with eta: " << jet->eta() << ", phi: " << jet->phi() << ", pT: " << jet->pt() << ", E: "<< jet->e() );
315
316
317 // If we're running calo-clustering, that means we just started the HLT reco,
318 // and there's no input TauJet container to this step. Create one instead!
319 outputTauHandle->push_back(std::make_unique<xAOD::TauJet>());
320 tau = outputTauHandle->back();
321 tau->setROIWord(roiDescriptor->roiWord());
322
323 // Using the new Jet collection, setup the tau candidate structure
324 tau->setJet(outputTauSeedJetHandle.ptr(), jet);
325
326 // Fix eta, phi in case the jet's energy is negative
327 if(jet->e() <= 0) {
328 ATH_MSG_DEBUG("Changing (eta, phi) back to the RoI center due to negative energy: " << jet->e());
329 tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
330 ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", tau eta: " << tau->eta() << ", tau phi: " << tau->phi() );
331 }
332 }
333
334
335 //-------------------------------------------------------------------------------
336 // Option 2: Use input TauJet (and TauTracks) as seeds (non calo-only reco)
337 //-------------------------------------------------------------------------------
338 if(!doCaloReconstruction()) {
339 // Retrieve input TauJet container
340 if(!m_tauJetInputKey.key().empty()) {
341 SG::ReadHandle<xAOD::TauJetContainer> tauInputHandle(m_tauJetInputKey, ctx);
342 const xAOD::TauJetContainer* inputTauContainer = tauInputHandle.cptr();
343 ATH_MSG_DEBUG("Input TauJet Container size: " << inputTauContainer->size());
344
345 // Copy the input TauJets to the output container
346 ATH_CHECK(deepCopy(outputTauHandle, inputTauContainer));
347 }
348
349 // Retrieve input TauTrack container
350 if(!m_tauTrackInputKey.key().empty()) {
351 SG::ReadHandle<xAOD::TauTrackContainer> tauTrackInputHandle(m_tauTrackInputKey, ctx);
352 const xAOD::TauTrackContainer* inputTauTrackContainer = tauTrackInputHandle.cptr();
353 ATH_MSG_DEBUG("Tau Track Container Size " << inputTauTrackContainer->size());
354
355 // Copy the input TauTracks to the output container
356 ATH_CHECK(deepCopy(tauTrackHandle, inputTauTrackContainer));
357 }
358
359
360 // Now retrieve the main TauJet object, if available (the recently created copy of the input TauJet)
361 if(!outputTauHandle->empty()) {
362 tau = outputTauHandle->back();
363
364 // Check if the tau has a valid jetLink
365 ATH_CHECK(tau->jetLink().isValid());
366
367 // Clear all previous TauTrack links (if any), since we will run the
368 // TauTrackFinder tool (and the associated InDet helpers) in the
369 // Presel and Precision steps, refilling the tracks
370 if(!m_tauTrackInputKey.key().empty()) tau->clearTauTrackLinks();
371 }
372 }
373
374
375 //===============================================================================
376 // Get Vertex Container (optional)
377 //===============================================================================
378 const xAOD::VertexContainer* RoIVxContainer = nullptr;
379 if(!m_vertexInputKey.key().empty()){
380 SG::ReadHandle<xAOD::VertexContainer> VertexContainerHandle = SG::makeHandle(m_vertexInputKey, ctx);
381
382 if(!VertexContainerHandle.isValid()) {
383 ATH_MSG_DEBUG("No VertexContainer retrieved for the trigger element");
384 track_errors.push_back(NoVtxCont);
385 } else {
386 RoIVxContainer = VertexContainerHandle.get();
387 ATH_MSG_DEBUG("Size of VertexContainer: " << RoIVxContainer->size());
388 }
389 }
390
391
392 ATH_MSG_DEBUG("roiDescriptor roiWord: " << roiDescriptor->roiWord() << ", saved in TauJet: " << tau->ROIWord());
393
394
395 //===============================================================================
396 // Loop over all booked tau tools:
397 //===============================================================================
398 StatusCode processStatus = StatusCode::SUCCESS;
399
400 // Sequence: VertexFinderTools -> CommonToolsBeforeTF -> TrackFinderTools -> CommonTools -> VertexVarsTools -> IDTools
401
402 for(const auto& tool : m_vertexFinderTools) {
403 ATH_MSG_DEBUG("Starting Tool: " << tool->name());
404
405 processStatus = tool->executeVertexFinder(*tau, RoIVxContainer);
406
407 if(!processStatus.isFailure()) {
408 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
409 } else {
410 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
411 break;
412 }
413 }
414
415 for(const auto& tool : m_commonToolsBeforeTF) {
416 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
417 else break;
418
419 processStatus = tool->execute(*tau);
420
421 if(!processStatus.isFailure()) {
422 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
423 } else {
424 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
425 break;
426 }
427 }
428
429 for(const auto& tool : m_trackFinderTools) {
430 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
431 else break;
432
433 processStatus = tool->executeTrackFinder(*tau, *tauTrackHandle);
434
435 if(!processStatus.isFailure()) {
436 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
437 } else {
438 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
439 break;
440 }
441 }
442
443 for(const auto& tool : m_commonTools) {
444 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
445 else break;
446
447 processStatus = tool->execute(*tau);
448
449 if(!processStatus.isFailure()) {
450 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
451 } else {
452 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
453 break;
454 }
455 }
456
457 // Dummy container passed to TauVertexVariables, not used in trigger though
458 xAOD::VertexContainer dummyVxCont;
459 for(const auto& tool : m_vertexVarsTools) {
460 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
461 else break;
462
463 processStatus = tool->executeVertexVariables(*tau, dummyVxCont);
464
465 if(!processStatus.isFailure()) {
466 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
467 } else {
468 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
469 break;
470 }
471 }
472
473 for(const auto& tool : m_idTools) {
474 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
475 else break;
476
477 processStatus = tool->execute(*tau);
478
479 if(!processStatus.isFailure()) {
480 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
481 } else {
482 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
483 break;
484 }
485 }
486
487 ATH_MSG_DEBUG("This tau has " << tau->allTracks() << " tracks linked");
488
489
490 // Cleanup in case any of the tools failed (rejected Tau)
491 if(!processStatus.isSuccess()) {
492 ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container");
493
494 xAOD::TauJet* bad_tau = outputTauHandle->back();
495 ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau");
496 tauTrackHandle->erase(tauTrackHandle->end() - bad_tau->nAllTracks(), tauTrackHandle->end());
497
498 outputTauHandle->pop_back();
499
500 ATH_MSG_DEBUG("Clean up done after jet seed");
501
502 } else {
503 // Check that the seed-jet energy is positive
504 // Otherwise, try to salvage it by replacing the tau position with the RoI's
505 float fJetEnergy = (*tau->jetLink())->e();
506 ATH_MSG_DEBUG("Seed jet E: " << fJetEnergy);
507
508 if(fJetEnergy < 0.00001) {
509 ATH_MSG_DEBUG("Changing tau's (eta,phi) to RoI ones due to negative energy (PxPyPzE flips eta and phi)");
510 ATH_MSG_DEBUG("This is probably not needed anymore, method PxPyPzE has been corrected");
511 // TODO: Do we still need this??
512
513 tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
514
515 ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", Tau eta: " << tau->eta() << ", phi: " << tau->phi() << ", pT: " << tau->pt());
516 }
517
518
519 //===============================================================================
520 // Monitor tau variables
521 //===============================================================================
522
523 pT = tau->pt()/Gaudi::Units::GeV;
524 eta = tau->eta();
525 phi = tau->phi();
526
527
528 etaRoI = roiDescriptor->eta();
529 phiRoI = roiDescriptor->phi();
530 dEta_RoI = eta - roiDescriptor->eta();
531 dPhi_RoI = phi - roiDescriptor->phi();
532 if(dPhi_RoI < -M_PI) dPhi_RoI += 2.0*M_PI;
533 if(dPhi_RoI > M_PI) dPhi_RoI -= 2.0*M_PI;
534
535
536 float pre_mEflowApprox;
537 tau->detail(xAOD::TauJetParameters::mEflowApprox, pre_mEflowApprox);
538 mEflowApprox = std::log10(std::max(pre_mEflowApprox, 140.0f));
539
540 float pre_ptRatioEflowApprox;
541 tau->detail(xAOD::TauJetParameters::ptRatioEflowApprox, pre_ptRatioEflowApprox);
542 ptRatioEflowApprox = std::min(pre_ptRatioEflowApprox, 4.0f);
543
544 pt_jetseed_log = std::log10(tau->ptJetSeed());
545 etaDetectorAxis = tau->etaDetectorAxis();
546 ptDetectorAxis = std::min(tau->ptDetectorAxis()/Gaudi::Units::GeV, 10000.0);
547 ptDetectorAxis_log = std::log10(std::min(tau->ptDetectorAxis()/Gaudi::Units::GeV, 10000.0));
548
549
554 EtHad /= Gaudi::Units::GeV;
556 EtEm /= Gaudi::Units::GeV;
557
558 float Et_raw = EtEm + EtHad;
559 if(Et_raw != 0) EMFrac = EtEm / Et_raw;
560
563
564
565 // Monitor BRT variables
566 float tmp = 0;
568 if(test) clustersMeanCenterLambda = tmp;
570 if(test) clustersMeanFirstEngDens = tmp;
572 if(test) clustersMeanEMProbability = tmp;
574 if(test) clustersMeanSecondLambda = tmp;
576 if(test) clustersMeanPresamplerFrac = tmp;
577
578
579 // Cluster variables monitoring
580 n_clusters = tau->clusters().size();
581 for(const auto& cluster : tau->clusters()) {
582 const xAOD::CaloCluster* cls = dynamic_cast<const xAOD::CaloCluster*>(cluster);
583
584 cluster_et_log.push_back(std::log10(cls->et()));
585 cluster_dEta.push_back(cls->eta() - tau->eta());
586 cluster_dPhi.push_back(cls->p4().DeltaPhi(tau->p4()));
587
588 double log_second_R = -999;
589 const bool success_SECOND_R = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R, log_second_R);
590 if(success_SECOND_R) log_second_R = std::log10(log_second_R + 0.1);
591 cluster_log_SECOND_R.push_back(log_second_R);
592
593 double second_lambda = -999;
594 const bool success_SECOND_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, second_lambda);
595 if(success_SECOND_LAMBDA) second_lambda = std::log10(second_lambda + 0.1);
596 cluster_SECOND_LAMBDA.push_back(second_lambda);
597
598 double center_lambda = -999;
599 const bool success_CENTER_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, center_lambda);
600 if(success_CENTER_LAMBDA) center_lambda = std::log10(center_lambda + 1e-6);
601 cluster_CENTER_LAMBDA.push_back(center_lambda);
602 }
603
604
605 // Tracks summary monitoring
606 n_tracks = tau->nTracks();
607 n_iso_tracks = tau->nTracksIsolation();
609 if(tau->nTracks() > 0) ipSigLeadTrk = std::abs(tau->track(0)->d0SigTJVA()); // TODO: Is this needed?
610 tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig);
612 massTrkSys /= Gaudi::Units::GeV;
615 tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist);
619 tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME);
620
621 if(tau->vertexLink().isValid() && tau->vertex() && tau->vertex()->vertexType() != xAOD::VxType::NoVtx) {
622 vertex_x = tau->vertex()->x();
623 vertex_y = tau->vertex()->y();
624 vertex_z = tau->vertex()->z();
625 }
626
627
628 // Track variables monitoring
629 n_all_tracks = tau->allTracks().size();
630 for(const xAOD::TauTrack* track : tau->allTracks()) {
631 track_pt_log.push_back(std::log10(track->pt()));
632 track_dEta.push_back(track->eta() - tau->eta());
633 track_dPhi.push_back(track->p4().DeltaPhi(tau->p4()));
634 track_d0_abs_log.push_back(std::log10(std::abs(track->track()->d0()) + 1e-6));
635 track_z0sinthetaTJVA_abs_log.push_back(track->z0sinthetaTJVA());
636
637 uint8_t pixel_hits, pixel_dead;
638 const bool success1_pixel_hits = track->track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
639 const bool success2_pixel_dead = track->track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors);
640 float nPixelHitsPlusDeadSensor = -999;
641 if(success1_pixel_hits && success2_pixel_dead) nPixelHitsPlusDeadSensor = pixel_hits + pixel_dead;
642 track_nPixelHitsPlusDeadSensors.push_back(nPixelHitsPlusDeadSensor);
643
644 uint8_t sct_hits, sct_dead;
645 const bool success1_sct_hits = track->track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
646 const bool success2_sct_dead = track->track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors);
647 float nSCTHitsPlusDeadSensors = -999;
648 if(success1_sct_hits && success2_sct_dead) nSCTHitsPlusDeadSensors = sct_hits + sct_dead;
649 track_nSCTHitsPlusDeadSensors.push_back(nSCTHitsPlusDeadSensors);
650 }
651
652
653 // TauID Score monitoring
654 for(const auto& [key, p] : m_monitoredIdAccessors) {
655 if(p.first.isAvailable(*tau)) {
656 if(tau->nTracks() == 0) {
657 monitoredIdVariables.at(key + "_TauJetScore_0p") = p.first(*tau);
658 } else if(tau->nTracks() == 1) {
659 monitoredIdVariables.at(key + "_TauJetScore_1p") = p.first(*tau);
660 } else { // MP tau
661 monitoredIdVariables.at(key + "_TauJetScore_mp") = p.first(*tau);
662 }
663 }
664
665 if(p.second.isAvailable(*tau)) {
666 if(tau->nTracks() == 0) {
667 monitoredIdVariables.at(key + "_TauJetScoreTrans_0p") = p.second(*tau);
668 } else if(tau->nTracks() == 1) {
669 monitoredIdVariables.at(key + "_TauJetScoreTrans_1p") = p.second(*tau);
670 } else { // MP tau
671 monitoredIdVariables.at(key + "_TauJetScoreTrans_mp") = p.second(*tau);
672 }
673 }
674 }
675
676
677 ++n_taus;
678
679
680 ATH_MSG_DEBUG("RoI: " << roiDescriptor->roiId()
681 << ", Tau pT (GeV): " << pT << ", Tau eta: " << eta << ", Tau phi: " << phi
682 << ", wrt RoI dEta: " << dEta_RoI << ", dPhi: " << dPhi_RoI);
683 }
684
685 //-------------------------------------------------------------------------------
686 // All done!
687 //-------------------------------------------------------------------------------
688
689 ATH_MSG_DEBUG("Output TauJetContainer size: " << outputTauHandle->size());
690 ATH_MSG_DEBUG("Output TauJetTrackContainer size: " << tauTrackHandle->size());
691
692 return StatusCode::SUCCESS;
693}
#define M_PI
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
Athena::TPCnvVers::Current TrigRoiDescriptor
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
virtual double phi() const override final
Methods to retrieve data members.
virtual double eta() const override final
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
virtual unsigned int roiWord() const override final
virtual unsigned int roiId() const override final
these quantities probably don't need to be used any more
const ToolHandleArray< ITauToolBase > m_idTools
StatusCode deepCopy(SG::WriteHandle< DataVector< V > > &writeHandle, const DataVector< V > *oldContainer) const
const ToolHandleArray< ITauToolBase > m_commonTools
const ToolHandle< GenericMonitoringTool > m_monTool
SG::WriteHandleKey< xAOD::TauJetContainer > m_tauJetOutputKey
bool doCaloReconstruction() const
SG::WriteHandleKey< xAOD::TauTrackContainer > m_tauTrackOutputKey
const ToolHandleArray< ITauToolBase > m_commonToolsBeforeTF
SG::ReadHandleKey< xAOD::TauTrackContainer > m_tauTrackInputKey
SG::WriteHandleKey< xAOD::JetContainer > m_tauSeedOutputKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexInputKey
const ToolHandleArray< ITauToolBase > m_vertexFinderTools
const ToolHandleArray< ITauToolBase > m_trackFinderTools
const ToolHandleArray< ITauToolBase > m_vertexVarsTools
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredIdScores
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roiInputKey
std::map< std::string, std::pair< SG::ConstAccessor< float >, SG::ConstAccessor< float > > > m_monitoredIdAccessors
@ SECOND_LAMBDA
Second Moment in .
@ SECOND_R
Second Moment in .
@ CENTER_LAMBDA
Shower depth at Cluster Centroid.
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition Jet_v1.cxx:54
void addConstituent(const ElementLink< IParticleContainer > &link, float weight=1.0)
Add a constituent directly in the ElementLink format.
Definition Jet_v1.cxx:111
void setJetP4(const JetFourMom_t &p4)
Definition Jet_v1.cxx:171
void setConstituentsSignalState(JetConstitScale t)
Set the state at which constituents were when this jet was found. This function is called by jet buil...
Definition Jet_v1.cxx:141
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition Jet_v1.cxx:49
virtual double e() const
The total energy of the particle.
Definition Jet_v1.cxx:63
virtual double phi() const
The azimuthal angle ( ) of the particle.
void setROIWord(unsigned int)
void clearTauTrackLinks()
Remove all tracks from the tau.
unsigned int ROIWord() const
the ROIWord, in case TauJet is used in EF trigger
double ptDetectorAxis() const
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition TauJet_v3.cxx:96
virtual double pt() const
The transverse momentum ( ) of the particle.
double etaDetectorAxis() const
const VertexLink_t & vertexLink() const
const JetLink_t & jetLink() const
void setJet(const xAOD::JetContainer *cont, const xAOD::Jet *jet)
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...
const Vertex * vertex() const
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
std::vector< const IParticle * > clusters() const
double ptJetSeed() const
size_t nTracksIsolation() const
virtual double m() const
The invariant mass of the particle.
size_t nAllTracks() const
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
float d0SigTJVA() const
float z() const
Returns the z position.
float y() const
Returns the y position.
VxType::VertexType vertexType() const
The type of the vertex.
float x() const
Returns the x position.
::StatusCode StatusCode
StatusCode definition for legacy code.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
bool pt_jetseed_log(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &, float &out)
bool ptDetectorAxis(const xAOD::TauJet &tau, float &out)
@ hadRadius
Get hadron calorimeter radius.
Definition TauDefs.h:192
@ EMRadius
Get E_T radius.
Definition TauDefs.h:190
@ etHadAtEMScale
Get Hadronic energy at EM scale.
Definition TauDefs.h:196
@ isolFrac
Get isolation fraction.
Definition TauDefs.h:198
@ trkAvgDist
Get calibrated EM transverse energy (DEPRECATED since r19)
Definition TauDefs.h:214
@ etEMAtEMScale
Get EM energy at EM scale.
Definition TauDefs.h:194
@ centFrac
Get centrality fraction.
Definition TauDefs.h:200
@ dRmax
Get maximal dR of tracks associated to calo-seeded tau.
Definition TauDefs.h:226
@ NoVtx
Dummy vertex. TrackParticle was not used in vertex fit.
Jet_v1 Jet
Definition of the current "jet version".
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
TauTrack_v1 TauTrack
Definition of the current version.
Definition TauTrack.h:16
TauJet_v3 TauJet
Definition of the current "tau version".
TauTrackContainer_v1 TauTrackContainer
Definition of the current TauTrack container version.
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ CalibratedJetConstituent
Definition JetTypes.h:22
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition JetTypes.h:17

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ initialize()

StatusCode TrigTauRecMerged::initialize ( )
overridevirtual

Definition at line 40 of file TrigTauRecMerged.cxx.

41{
42 ATH_MSG_DEBUG("Initialize");
43
44 if(m_commonTools.begin() == m_commonTools.end()) {
45 ATH_MSG_ERROR("No tools given for this algorithm");
46 return StatusCode::FAILURE;
47 }
48
49 for(const auto& tool : m_commonTools) ATH_CHECK(tool.retrieve());
50 for(const auto& tool : m_commonToolsBeforeTF) ATH_CHECK(tool.retrieve());
51 for(const auto& tool : m_vertexFinderTools) ATH_CHECK(tool.retrieve());
52 for(const auto& tool : m_trackFinderTools) ATH_CHECK(tool.retrieve());
53 for(const auto& tool : m_vertexVarsTools) ATH_CHECK(tool.retrieve());
54 for(const auto& tool : m_idTools) ATH_CHECK(tool.retrieve());
55
56 if(!m_monTool.name().empty()) ATH_CHECK(m_monTool.retrieve());
57
58 ATH_MSG_DEBUG("Initialising handle keys");
59 ATH_CHECK(m_roiInputKey.initialize());
64
66 ATH_CHECK(m_tauJetOutputKey.initialize());
67 ATH_CHECK(m_tauTrackOutputKey.initialize());
68
69 for(const auto& [key, p] : m_monitoredIdScores) {
71 key,
72 std::make_pair(SG::ConstAccessor<float>(p.first), SG::ConstAccessor<float>(p.second))
73 );
74 }
75
76
77 return StatusCode::SUCCESS;
78}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
#define ATH_MSG_WARNING(x)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_clustersInputKey

SG::ReadHandleKey<xAOD::CaloClusterContainer> TrigTauRecMerged::m_clustersInputKey {this, "InputCaloClusterContainer", "", "Caloclusters in view"}
private

Definition at line 72 of file TrigTauRecMerged.h.

72{this, "InputCaloClusterContainer", "", "Caloclusters in view"};

◆ m_commonTools

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_commonTools {this, "CommonTools", {}, "List of ITauToolBase common tools"}
private

Definition at line 58 of file TrigTauRecMerged.h.

58{this, "CommonTools", {}, "List of ITauToolBase common tools"};

◆ m_commonToolsBeforeTF

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_commonToolsBeforeTF {this, "CommonToolsBeforeTF", {}, "List of ITauToolBase common tools to execute before the Track Finder tools"}
private

Definition at line 59 of file TrigTauRecMerged.h.

59{this, "CommonToolsBeforeTF", {}, "List of ITauToolBase common tools to execute before the Track Finder tools"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_idTools

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_idTools {this, "IDTools", {}, "Vertex Variables tools"}
private

Definition at line 63 of file TrigTauRecMerged.h.

63{this, "IDTools", {}, "Vertex Variables tools"};

◆ m_monitoredIdAccessors

std::map<std::string, std::pair<SG::ConstAccessor<float>, SG::ConstAccessor<float> > > TrigTauRecMerged::m_monitoredIdAccessors
private

Definition at line 68 of file TrigTauRecMerged.h.

◆ m_monitoredIdScores

Gaudi::Property<std::map<std::string, std::pair<std::string, std::string> > > TrigTauRecMerged::m_monitoredIdScores {this, "MonitoredIDScores", {}, "Pairs of the TauID score and signal-transformed scores for each TauID algorithm to be monitored"}
private

Definition at line 67 of file TrigTauRecMerged.h.

67{this, "MonitoredIDScores", {}, "Pairs of the TauID score and signal-transformed scores for each TauID algorithm to be monitored"};

◆ m_monTool

const ToolHandle<GenericMonitoringTool> TrigTauRecMerged::m_monTool {this, "MonTool", "", "Monitoring tool"}
private

Definition at line 66 of file TrigTauRecMerged.h.

66{this, "MonTool", "", "Monitoring tool"};

◆ m_roiInputKey

SG::ReadHandleKey<TrigRoiDescriptorCollection> TrigTauRecMerged::m_roiInputKey {this, "InputRoIs", "", "Input RoI name"}
private

Definition at line 71 of file TrigTauRecMerged.h.

71{this, "InputRoIs", "", "Input RoI name"};

◆ m_tauJetInputKey

SG::ReadHandleKey<xAOD::TauJetContainer> TrigTauRecMerged::m_tauJetInputKey {this, "InputTauJetContainer", "", "Input TauJet container"}
private

Definition at line 74 of file TrigTauRecMerged.h.

74{this, "InputTauJetContainer", "", "Input TauJet container"};

◆ m_tauJetOutputKey

SG::WriteHandleKey<xAOD::TauJetContainer> TrigTauRecMerged::m_tauJetOutputKey {this, "OutputTauJetContainer", "", "Output TauJet container"}
private

Definition at line 79 of file TrigTauRecMerged.h.

79{this, "OutputTauJetContainer", "", "Output TauJet container"};

◆ m_tauSeedOutputKey

SG::WriteHandleKey<xAOD::JetContainer> TrigTauRecMerged::m_tauSeedOutputKey {this, "OutputJetSeed", "", "Output jets which are seeds for tau jets"}
private

Definition at line 78 of file TrigTauRecMerged.h.

78{this, "OutputJetSeed", "", "Output jets which are seeds for tau jets"};

◆ m_tauTrackInputKey

SG::ReadHandleKey<xAOD::TauTrackContainer> TrigTauRecMerged::m_tauTrackInputKey {this, "InputTauTrackContainer", "", "Input TauTrack container" }
private

Definition at line 75 of file TrigTauRecMerged.h.

75{this, "InputTauTrackContainer", "", "Input TauTrack container" };

◆ m_tauTrackOutputKey

SG::WriteHandleKey<xAOD::TauTrackContainer> TrigTauRecMerged::m_tauTrackOutputKey {this, "OutputTauTrackContainer", "", "Output TauTrack container"}
private

Definition at line 80 of file TrigTauRecMerged.h.

80{this, "OutputTauTrackContainer", "", "Output TauTrack container"};

◆ m_trackFinderTools

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_trackFinderTools {this, "TrackFinderTools", {}, "Track Finder tools"}
private

Definition at line 61 of file TrigTauRecMerged.h.

61{this, "TrackFinderTools", {}, "Track Finder tools"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexFinderTools

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_vertexFinderTools {this, "VertexFinderTools", {}, "Vertex Finder tools"}
private

Definition at line 60 of file TrigTauRecMerged.h.

60{this, "VertexFinderTools", {}, "Vertex Finder tools"};

◆ m_vertexInputKey

SG::ReadHandleKey<xAOD::VertexContainer> TrigTauRecMerged::m_vertexInputKey {this, "InputVertexContainer", "", "Input vertex container"}
private

Definition at line 73 of file TrigTauRecMerged.h.

73{this, "InputVertexContainer", "", "Input vertex container"};

◆ m_vertexVarsTools

const ToolHandleArray<ITauToolBase> TrigTauRecMerged::m_vertexVarsTools {this, "VertexVarsTools", {}, "Vertex Variables tools"}
private

Definition at line 62 of file TrigTauRecMerged.h.

62{this, "VertexVarsTools", {}, "Vertex Variables tools"};

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: