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  Mode { FromClusters =0 , FromTauJet =1 }
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
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"}
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredHitZRegressions {this, "MonitoredHitZRegressions", {}, "Pairs of the z and sigma regression output variables for each HitZ algorithm to be monitored"}
std::map< std::string, std::pair< SG::ConstAccessor< float >, SG::ConstAccessor< float > > > m_monitoredInferenceAccessors
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::ReadDecorHandleKeyArray< xAOD::TauJetContainerm_tauJetInputDecorKeysArray {this, "InputTauJetCopyDecorKeys", {}, "Array of input TauJet decoration keys to copy on the output TauJet"}
SG::ReadHandleKey< xAOD::TauTrackContainerm_tauTrackInputKey {this, "InputTauTrackContainer", "", "Input TauTrack container" }
SG::ReadDecorHandleKey< xAOD::TauJetContainerm_hitsInputDecorKey {this, "InputTauJetHitsKey", "", "Input TauJet hits decoration key"}
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::WriteDecorHandleKeyArray< xAOD::TauJetContainerm_tauJetOutputDecorKeysArray
SG::WriteHandleKey< xAOD::TauTrackContainerm_tauTrackOutputKey {this, "OutputTauTrackContainer", "", "Output TauTrack container"}
SG::WriteDecorHandleKey< xAOD::TauJetContainerm_hitsOutputDecorKey {this, "OutputTauJetHitsKey", "", "Output TauJet hits decoration key"}
Mode m_reco_mode = FromClusters
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 31 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

◆ Mode

enum TrigTauRecMerged::Mode
private
Enumerator
FromClusters 
FromTauJet 

Definition at line 42 of file TrigTauRecMerged.h.

42 {
43 FromClusters=0, // Calo reconstruction from calo clusters: CaloMVA step
44 FromTauJet=1, // Full tau reconstruction from existing tau jets + tracks: CaloHits and Precision steps
45 };

◆ TAUEFCALOMON

Enumerator
NoROIDescr 
NoCellCont 
EmptyCellCont 
NoClustCont 
NoClustKey 
EmptyClustCont 
NoJetAttach 
NoHLTtauAttach 
NoHLTtauDetAttach 
NoHLTtauXdetAttach 

Definition at line 48 of file TrigTauRecMerged.h.

◆ TAUEFTRKMON

Enumerator
NoTrkCont 
NoVtxCont 

Definition at line 62 of file TrigTauRecMerged.h.

Constructor & Destructor Documentation

◆ TrigTauRecMerged()

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

Definition at line 40 of file TrigTauRecMerged.cxx.

41 : AthReentrantAlgorithm(name, pSvcLocator)
42{
43
44}

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 105 of file TrigTauRecMerged.h.

105 {
106 if(!writeHandle.isValid()) {
107 ATH_MSG_FATAL("Provided with an invalid write handle");
108 return StatusCode::FAILURE;
109 }
110
111 if(oldContainer){
112 for(const V* v : *oldContainer) {
113 // Build a new object in the new container
114 writeHandle->push_back(std::make_unique<V>());
115 // Copy across the aux store
116 *writeHandle->back() = *v;
117 }
118 }
119 return StatusCode::SUCCESS;
120}
#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.

◆ 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 134 of file TrigTauRecMerged.cxx.

135{
136 //===============================================================================
137 // Initialize monitoring variables
138 //===============================================================================
139
140 // Common CaloOnly and Precision monitored variables:
141 auto n_taus = Monitored::Scalar<int>("NTauCandidates", 0);
142
143 auto pT = Monitored::Scalar<float>("Pt", 0);
144 auto eta = Monitored::Scalar<float>("Eta", -99.9);
145 auto phi = Monitored::Scalar<float>("Phi", -99.9);
146
147 auto etaRoI = Monitored::Scalar<float>("EtaRoI", -99.9);
148 auto phiRoI = Monitored::Scalar<float>("PhiRoI", -99.9);
149 auto dEta_RoI = Monitored::Scalar<float>("dEtaTau_RoI", -10);
150 auto dPhi_RoI = Monitored::Scalar<float>("dPhiTau_RoI", -10);
151
152 auto mEflowApprox = Monitored::Scalar<float>("mEflowApprox", -99.9);
153 auto ptRatioEflowApprox = Monitored::Scalar<float>("ptRatioEflowApprox", -99.9);
154 auto pt_jetseed_log = Monitored::Scalar<float>("pt_jetseed_log", -99.9);
155 auto etaDetectorAxis = Monitored::Scalar<float>("etaDetectorAxis", -99.9);
156 auto ptDetectorAxis = Monitored::Scalar<float>("ptDetectorAxis", -99.9);
157 auto ptDetectorAxis_log = Monitored::Scalar<float>("ptDetectorAxis_log", -99.9);
158
159 auto n_cells = Monitored::Scalar<int>("NCaloCells", 0);
160 auto EMRadius = Monitored::Scalar<float>("EMRadius", -0.099);
161 auto HadRadius = Monitored::Scalar<float>("HadRadius", -0.099);
162 auto EtHad = Monitored::Scalar<float>("EtHad", -10);
163 auto EtEm = Monitored::Scalar<float>("EtEm", -10);
164 auto EMFrac = Monitored::Scalar<float>("EMFrac", -10);
165 auto IsoFrac = Monitored::Scalar<float>("IsoFrac", -1);
166 auto CentFrac = Monitored::Scalar<float>("CentFrac", -10);
167
168 auto clustersMeanCenterLambda = Monitored::Scalar<float>("clustersMeanCenterLambda", 0);
169 auto clustersMeanFirstEngDens = Monitored::Scalar<float>("clustersMeanFirstEngDens", 0);
170 auto clustersMeanEMProbability = Monitored::Scalar<float>("clustersMeanEMProbability", 0);
171 auto clustersMeanSecondLambda = Monitored::Scalar<float>("clustersMeanSecondLambda", 0);
172 auto clustersMeanPresamplerFrac = Monitored::Scalar<float>("clustersMeanPresamplerFrac", 0);
173
174 auto n_clusters = Monitored::Scalar<int>("NClusters", 0);
175 std::vector<float> cluster_et_log, cluster_dEta, cluster_dPhi;
176 std::vector<float> cluster_log_SECOND_R, cluster_SECOND_LAMBDA, cluster_CENTER_LAMBDA;
177 auto mon_cluster_et_log = Monitored::Collection("cluster_et_log", cluster_et_log);
178 auto mon_cluster_dEta = Monitored::Collection("cluster_dEta", cluster_dEta);
179 auto mon_cluster_dPhi = Monitored::Collection("cluster_dPhi", cluster_dPhi);
180 auto mon_cluster_log_SECOND_R = Monitored::Collection("cluster_log_SECOND_R", cluster_log_SECOND_R);
181 auto mon_cluster_SECOND_LAMBDA = Monitored::Collection("cluster_SECOND_LAMBDA", cluster_SECOND_LAMBDA);
182 auto mon_cluster_CENTER_LAMBDA = Monitored::Collection("cluster_CENTER_LAMBDA", cluster_CENTER_LAMBDA);
183 std::vector<unsigned char> calo_errors;
184 auto mon_calo_errors = Monitored::Collection("calo_errors", calo_errors);
185
186 // Precision monitored variables
187 auto n_tracks = Monitored::Scalar<int>("NTracks", -10);
188 auto n_iso_tracks = Monitored::Scalar<int>("NIsoTracks", -10);
189
190 auto ipSigLeadTrk = Monitored::Scalar<float>("ipSigLeadTrk", -1000);
191 auto trFlightPathSig = Monitored::Scalar<float>("trFlightPathSig", -10);
192 auto massTrkSys = Monitored::Scalar<float>("massTrkSys", -10);
193 auto dRmax = Monitored::Scalar<float>("dRmax", -10);
194 auto trkAvgDist = Monitored::Scalar<float>("TrkAvgDist", -1);
195 auto innerTrkAvgDist = Monitored::Scalar<float>("innerTrkAvgDist", -1);
196 auto etovPtLead = Monitored::Scalar<float>("EtovPtLead", -10);
197 auto PSSFraction = Monitored::Scalar<float>("PSSFraction", -999.9);
198 auto EMPOverTrkSysP = Monitored::Scalar<float>("EMPOverTrkSysP", -999.9);
199 auto ChPiEMEOverCaloEME = Monitored::Scalar<float>("ChPiEMEOverCaloEME", -999.9);
200 auto vertex_x = Monitored::Scalar<float>("vertex_x", -999.9);
201 auto vertex_y = Monitored::Scalar<float>("vertex_y", -999.9);
202 auto vertex_z = Monitored::Scalar<float>("vertex_z", -999.9);
203
204 auto n_all_tracks = Monitored::Scalar<int>("NAllTracks", 0);
205 std::vector<float> track_pt_log, track_dEta, track_dPhi;
206 std::vector<float> track_d0_abs_log, track_z0sinthetaTJVA_abs_log;
207 std::vector<float> track_nPixelHitsPlusDeadSensors, track_nSCTHitsPlusDeadSensors;
208 auto mon_track_pt_log = Monitored::Collection("track_pt_log", track_pt_log);
209 auto mon_track_dEta = Monitored::Collection("track_dEta", track_dEta);
210 auto mon_track_dPhi = Monitored::Collection("track_dPhi", track_dPhi);
211 auto mon_track_d0_abs_log = Monitored::Collection("track_d0_abs_log", track_d0_abs_log);
212 auto mon_track_z0sinthetaTJVA_abs_log = Monitored::Collection("track_z0sinthetaTJVA_abs_log", track_z0sinthetaTJVA_abs_log);
213 auto mon_track_nPixelHitsPlusDeadSensors = Monitored::Collection("track_nPixelHitsPlusDeadSensors", track_nPixelHitsPlusDeadSensors);
214 auto mon_track_nSCTHitsPlusDeadSensors = Monitored::Collection("track_nSCTHitsPlusDeadSensors", track_nSCTHitsPlusDeadSensors);
215 std::vector<unsigned char> track_errors;
216 auto mon_track_errors = Monitored::Collection("track_errors", track_errors);
217
218 std::map<std::string, Monitored::Scalar<float>> monitoredIdVariables;
219 for(const auto& [key, p] : m_monitoredIdScores) {
220 monitoredIdVariables.emplace(key + "_TauJetScore_0p", Monitored::Scalar<float>(key + "_TauJetScore_0p", -1));
221 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_0p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_0p", -1));
222 monitoredIdVariables.emplace(key + "_TauJetScore_1p", Monitored::Scalar<float>(key + "_TauJetScore_1p", -1));
223 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_1p", Monitored::Scalar<float>(key + "_TauJetScoreTrans_1p", -1));
224 monitoredIdVariables.emplace(key + "_TauJetScore_mp", Monitored::Scalar<float>(key + "_TauJetScore_mp", -1));
225 monitoredIdVariables.emplace(key + "_TauJetScoreTrans_mp", Monitored::Scalar<float>(key + "_TauJetScoreTrans_mp", -1));
226 }
227
228 // CaloHits monitored variables
229 auto n_hits = Monitored::Scalar<int>("NHits", 0);
230 std::vector<float> hit_z, hit_dPhi;
231 auto mon_hit_z = Monitored::Collection("hit_z", hit_z);
232 auto mon_hit_dPhi = Monitored::Collection("hit_dPhi", hit_dPhi);
233
234 std::map<std::string, Monitored::Scalar<float>> monitoredHitZVariables;
235 for(const auto& [key, p] : m_monitoredHitZRegressions) {
236 monitoredHitZVariables.emplace(key + "_z0", Monitored::Scalar<float>(key + "_z0", -999));
237 monitoredHitZVariables.emplace(key + "_z0_sigma", Monitored::Scalar<float>(key + "_z0_sigma", -999));
238 }
239
240 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> monVars = {
241 std::ref(n_taus),
242 std::ref(pT), std::ref(eta), std::ref(phi),
243 std::ref(etaRoI), std::ref(phiRoI), std::ref(dEta_RoI), std::ref(dPhi_RoI),
244 std::ref(mEflowApprox), std::ref(ptRatioEflowApprox), std::ref(pt_jetseed_log),
245 std::ref(etaDetectorAxis), std::ref(ptDetectorAxis), std::ref(ptDetectorAxis_log),
246 std::ref(n_cells),
247 std::ref(EMRadius), std::ref(HadRadius), std::ref(EtHad), std::ref(EtEm), std::ref(EMFrac), std::ref(IsoFrac), std::ref(CentFrac),
248 std::ref(clustersMeanCenterLambda), std::ref(clustersMeanFirstEngDens), std::ref(clustersMeanEMProbability),
249 std::ref(clustersMeanSecondLambda), std::ref(clustersMeanPresamplerFrac),
250 std::ref(n_clusters), std::ref(mon_cluster_et_log), std::ref(mon_cluster_dEta), std::ref(mon_cluster_dPhi),
251 std::ref(mon_cluster_log_SECOND_R), std::ref(mon_cluster_SECOND_LAMBDA), std::ref(mon_cluster_CENTER_LAMBDA),
252 std::ref(mon_calo_errors),
253 std::ref(n_tracks), std::ref(n_iso_tracks),
254 std::ref(ipSigLeadTrk), std::ref(trFlightPathSig), std::ref(massTrkSys), std::ref(dRmax), std::ref(trkAvgDist), std::ref(innerTrkAvgDist),
255 std::ref(etovPtLead), std::ref(PSSFraction), std::ref(EMPOverTrkSysP), std::ref(ChPiEMEOverCaloEME),
256 std::ref(vertex_x), std::ref(vertex_y), std::ref(vertex_z),
257 std::ref(n_all_tracks), std::ref(mon_track_pt_log), std::ref(mon_track_dEta), std::ref(mon_track_dPhi),
258 std::ref(mon_track_d0_abs_log), std::ref(mon_track_z0sinthetaTJVA_abs_log),
259 std::ref(mon_track_nPixelHitsPlusDeadSensors), std::ref(mon_track_nSCTHitsPlusDeadSensors),
260 std::ref(mon_track_errors),
261 std::ref(n_hits), std::ref(mon_hit_z), std::ref(mon_hit_dPhi)
262 };
263 for(auto& [key, var] : monitoredIdVariables) monVars.push_back(std::ref(var));
264 for(auto& [key, var] : monitoredHitZVariables) monVars.push_back(std::ref(var));
265 auto monitorIt = Monitored::Group(m_monTool, monVars);
266
267
268 ATH_MSG_DEBUG("Executing TrigTauRecMerged");
269
270 //===============================================================================
271 // Main TauJet object and collections
272 //===============================================================================
273 xAOD::TauJet* tau = nullptr;
274
275 // We store the position of hits assigned to the tau for later monitoring
276 std::vector<ROOT::Math::XYZVector> tauHits;
277
278
279 //===============================================================================
280 // Retrieve RoI
281 //===============================================================================
282 SG::ReadHandle<TrigRoiDescriptorCollection> roisHandle = SG::makeHandle(m_roiInputKey, ctx);
283 if(!roisHandle.isValid()) {
284 ATH_MSG_ERROR("No RoIHandle found");
285 return StatusCode::FAILURE;
286 }
287
288 if(roisHandle->empty()) {
289 ATH_MSG_ERROR("Empty RoIHandle");
290 return StatusCode::FAILURE;
291 }
292
293 const TrigRoiDescriptor *roiDescriptor = roisHandle->at(0);
294 if(roiDescriptor) {
295 ATH_MSG_DEBUG("RoI: " << *roiDescriptor);
296 } else {
297 ATH_MSG_ERROR("Failed to find TrigRoiDescriptor");
298 calo_errors.push_back(NoROIDescr);
299 return StatusCode::FAILURE;
300 }
301
302
303 //===============================================================================
304 // Prepare Output TauJet and TauTrack containers
305 //===============================================================================
306
307 // Create and register the output TauJetContainer
308 std::unique_ptr<xAOD::TauJetContainer> outputContainer = std::make_unique<xAOD::TauJetContainer>();
309 std::unique_ptr<xAOD::TauJetAuxContainer> outputAuxContainer = std::make_unique<xAOD::TauJetAuxContainer>();
310 outputContainer->setStore(outputAuxContainer.get());
311
312 SG::WriteHandle<xAOD::TauJetContainer> outputTauHandle(m_tauJetOutputKey, ctx);
313 ATH_CHECK(outputTauHandle.record(std::move(outputContainer), std::move(outputAuxContainer)));
314
315 // Create and register the output TauTrackContainer
316 std::unique_ptr<xAOD::TauTrackContainer> outputTrackContainer = std::make_unique<xAOD::TauTrackContainer>();
317 std::unique_ptr<xAOD::TauTrackAuxContainer> outputTrackAuxContainer = std::make_unique<xAOD::TauTrackAuxContainer>();
318 outputTrackContainer->setStore(outputTrackAuxContainer.get());
319
320 SG::WriteHandle<xAOD::TauTrackContainer> tauTrackHandle(m_tauTrackOutputKey, ctx);
321 ATH_CHECK(tauTrackHandle.record(std::move(outputTrackContainer), std::move(outputTrackAuxContainer)));
322
323
324 //===============================================================================
325 // Initial TauJet calo-reco / input-retrieval
326 //===============================================================================
327 // We now have two options for the TauJet reconstruction:
328 // 1) Reconstruct the TauJet from scratch, using the bare calo-clusters (1st trigger step)
329 // 2) Fetch a preceding TauJet (and [dummy] TauTracks), and use them to seed the current reconstruction
330
331 //-------------------------------------------------------------------------------
332 // Option 1: Calorimeter-only reconstruction from clusters (CaloMVA step)
333 //-------------------------------------------------------------------------------
335 // Retrieve Calocluster container
336 SG::ReadHandle<xAOD::CaloClusterContainer> CCContainerHandle = SG::makeHandle(m_clustersInputKey, ctx);
337 ATH_CHECK(CCContainerHandle.isValid());
338
339 const xAOD::CaloClusterContainer *RoICaloClusterContainer = CCContainerHandle.get();
340 if(RoICaloClusterContainer) {
341 ATH_MSG_DEBUG("CaloCluster container found of size: " << RoICaloClusterContainer->size());
342
343 // If size is zero, don't stop just continue to produce empty TauJetCollection
344 if(RoICaloClusterContainer->empty()) calo_errors.push_back(NoClustCont);
345 } else {
346 ATH_MSG_ERROR("No CaloCluster container found");
347 calo_errors.push_back(NoClustCont);
348 return StatusCode::FAILURE;
349 }
350
351 // Also create the seed-jet containers
352 std::unique_ptr<xAOD::JetContainer> jetContainer{std::make_unique<xAOD::JetContainer>()};
353 std::unique_ptr<xAOD::JetAuxContainer> jetAuxContainer{std::make_unique<xAOD::JetAuxContainer>()};
354 jetContainer->setStore(jetAuxContainer.get());
355
356 SG::WriteHandle<xAOD::JetContainer> outputTauSeedJetHandle = SG::makeHandle(m_tauSeedOutputKey, ctx);
357 ATH_CHECK(outputTauSeedJetHandle.record(std::move(jetContainer), std::move(jetAuxContainer)));
358
359 // And create the seed-jet object itself
360 outputTauSeedJetHandle->push_back(std::make_unique<xAOD::Jet>());
361 xAOD::Jet *jet = outputTauSeedJetHandle->back();
362
363
364 // Build the jet, also keep track of the kinematics by hand
365 // Eventually, want to use FastJet here?
366 // We are using calibrated clusters, we need to keep track of this
368 TLorentzVector cluster_p4, barycenter;
369 for(const xAOD::CaloCluster* cluster : *RoICaloClusterContainer) {
370 ATH_MSG_DEBUG("Cluster (e, eta, phi): (" << cluster->e() << ", " << cluster->eta() << ", " << cluster->phi() << ")");
371
372 if(cluster->e() < 0) {
373 ATH_MSG_DEBUG("Negative energy cluster is rejected");
374 continue;
375 }
376
377 cluster_p4.SetPtEtaPhiE(cluster->pt(), cluster->eta(), cluster->phi(), cluster->e());
378 jet->addConstituent(cluster);
379
380 barycenter += cluster_p4;
381 }
382
383 jet->setJetP4(xAOD::JetFourMom_t(barycenter.Pt(), barycenter.Eta(), barycenter.Phi(), barycenter.M()));
384 ATH_MSG_DEBUG("Built jet with eta: " << jet->eta() << ", phi: " << jet->phi() << ", pT: " << jet->pt() << ", E: "<< jet->e() );
385
386
387 // If we're running calo-clustering, that means we just started the HLT reco,
388 // and there's no input TauJet container to this step. Create one instead!
389 outputTauHandle->push_back(std::make_unique<xAOD::TauJet>());
390 tau = outputTauHandle->back();
391 tau->setROIWord(roiDescriptor->roiWord());
392
393 // Using the new Jet collection, setup the tau candidate structure
394 tau->setJet(outputTauSeedJetHandle.ptr(), jet);
395
396 // Fix eta, phi in case the jet's energy is negative
397 if(jet->e() <= 0) {
398 ATH_MSG_DEBUG("Changing (eta, phi) back to the RoI center due to negative energy: " << jet->e());
399 tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
400 ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", tau eta: " << tau->eta() << ", tau phi: " << tau->phi() );
401 }
402 }
403
404
405 //-------------------------------------------------------------------------------
406 // Option 2: Use input TauJet (and TauTracks) as seeds (non calo-only reco)
407 //-------------------------------------------------------------------------------
408 else if(m_reco_mode == Mode::FromTauJet) {
409 // Retrieve input TauJet container
410 SG::ReadHandle<xAOD::TauJetContainer> tauInputHandle(m_tauJetInputKey, ctx);
411 const xAOD::TauJetContainer* inputTauContainer = tauInputHandle.cptr();
412 ATH_MSG_DEBUG("Input TauJet Container size: " << inputTauContainer->size());
413
414 // Copy the input TauJets to the output container
415 ATH_CHECK(deepCopy(outputTauHandle, inputTauContainer));
416
417 // Copy associated hits
418 // Store associated hits for later monitoring
419 if(!m_hitsInputDecorKey.empty()) {
420 // Initialize hits decorators
421 SG::ReadDecorHandle<xAOD::TauJetContainer, std::vector<ElementLink<xAOD::TrackMeasurementValidationContainer>>> hitsInputDecorHandle(m_hitsInputDecorKey, ctx);
422 ATH_CHECK(hitsInputDecorHandle.isValid());
423 SG::WriteDecorHandle<xAOD::TauJetContainer, std::vector<ElementLink<xAOD::TrackMeasurementValidationContainer>>> hitsOutputDecorHandle(m_hitsOutputDecorKey, ctx);
424 ATH_CHECK(hitsOutputDecorHandle.isValid());
425
426 // We use ConstAccessors instead of ReadDecorHandles to read the hit positions
427 // because hits might come from different original containers if we're including
428 // both Pixel and Strips. It is ok, because the pre-processing pipeline required to
429 // attach the hit ELs to the TauJet includes calls to HitDecoratorAlg, so the
430 // decorations will always be there, no matter how the scheduler organizes the execution.
431 static const SG::AuxElement::ConstAccessor<float> x("HitsXRelToBeamspot");
432 static const SG::AuxElement::ConstAccessor<float> y("HitsYRelToBeamspot");
433 static const SG::AuxElement::ConstAccessor<float> z("HitsZRelToBeamspot");
434
435 for(size_t i = 0; i < inputTauContainer->size(); ++i) {
436 const xAOD::TauJet* inputTau = inputTauContainer->at(i);
437 const auto& inputHits = hitsInputDecorHandle(*inputTau);
438
439 for(const ElementLink<xAOD::TrackMeasurementValidationContainer>& el : inputHits) {
440 if(el.isValid()) {
441 tauHits.push_back(ROOT::Math::XYZVector(x(**el), y(**el), z(**el)));
442 }
443 }
444
445 const xAOD::TauJet* outputTau = outputTauHandle->at(i);
446 hitsOutputDecorHandle(*outputTau) = inputHits;
447 }
448 }
449
450
451 // Copy input TauJet decorations to output TauJets
452 for(size_t i = 0; i < m_tauJetInputDecorKeysArray.size(); ++i) {
453 SG::ReadDecorHandle<xAOD::TauJetContainer, float> inputDecorHandle(m_tauJetInputDecorKeysArray[i], ctx);
454 ATH_CHECK(inputDecorHandle.isValid());
455 SG::WriteDecorHandle<xAOD::TauJetContainer, float> outputDecorHandle(m_tauJetOutputDecorKeysArray[i], ctx);
456 ATH_CHECK(outputDecorHandle.isValid());
457
458 for(size_t j = 0; j < inputTauContainer->size(); ++j) {
459 outputDecorHandle(*outputTauHandle->at(j)) = inputDecorHandle(*inputTauContainer->at(j));
460 }
461 }
462
463 // Retrieve input TauTrack container
464 if(!m_tauTrackInputKey.key().empty()) {
465 SG::ReadHandle<xAOD::TauTrackContainer> tauTrackInputHandle(m_tauTrackInputKey, ctx);
466 const xAOD::TauTrackContainer* inputTauTrackContainer = tauTrackInputHandle.cptr();
467 ATH_MSG_DEBUG("Tau Track Container Size " << inputTauTrackContainer->size());
468
469 // Copy the input TauTracks to the output container
470 ATH_CHECK(deepCopy(tauTrackHandle, inputTauTrackContainer));
471 }
472
473
474 // Now retrieve the main TauJet object, if available (the recently created copy of the input TauJet)
475 if(!outputTauHandle->empty()) {
476 tau = outputTauHandle->back();
477
478 // Check if the tau has a valid jetLink
479 ATH_CHECK(tau->jetLink().isValid());
480
481 // Clear all previous TauTrack links (if any), since we will run the
482 // TauTrackFinder tool (and the associated InDet helpers) in the
483 // Presel and Precision steps, refilling the tracks
484 if(!m_tauTrackInputKey.key().empty()) tau->clearTauTrackLinks();
485 }
486 }
487
488
489 //===============================================================================
490 // Get Vertex Container (optional)
491 //===============================================================================
492 const xAOD::VertexContainer* RoIVxContainer = nullptr;
493 if(!m_vertexInputKey.key().empty()){
494 SG::ReadHandle<xAOD::VertexContainer> VertexContainerHandle = SG::makeHandle(m_vertexInputKey, ctx);
495
496 if(!VertexContainerHandle.isValid()) {
497 ATH_MSG_DEBUG("No VertexContainer retrieved for the trigger element");
498 track_errors.push_back(NoVtxCont);
499 } else {
500 RoIVxContainer = VertexContainerHandle.get();
501 ATH_MSG_DEBUG("Size of VertexContainer: " << RoIVxContainer->size());
502 }
503 }
504
505
506 ATH_MSG_DEBUG("roiDescriptor roiWord: " << roiDescriptor->roiWord() << ", saved in TauJet: " << tau->ROIWord());
507
508
509 //===============================================================================
510 // Loop over all booked tau tools:
511 //===============================================================================
512 StatusCode processStatus = StatusCode::SUCCESS;
513
514 // Sequence: VertexFinderTools -> CommonToolsBeforeTF -> TrackFinderTools -> CommonTools -> VertexVarsTools -> IDTools
515
516 for(const auto& tool : m_vertexFinderTools) {
517 ATH_MSG_DEBUG("Starting Tool: " << tool->name());
518
519 processStatus = tool->executeVertexFinder(*tau, RoIVxContainer);
520
521 if(!processStatus.isFailure()) {
522 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
523 } else {
524 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
525 break;
526 }
527 }
528
529 for(const auto& tool : m_commonToolsBeforeTF) {
530 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
531 else break;
532
533 processStatus = tool->execute(*tau);
534
535 if(!processStatus.isFailure()) {
536 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
537 } else {
538 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
539 break;
540 }
541 }
542
543 for(const auto& tool : m_trackFinderTools) {
544 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
545 else break;
546
547 processStatus = tool->executeTrackFinder(*tau, *tauTrackHandle);
548
549 if(!processStatus.isFailure()) {
550 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
551 } else {
552 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
553 break;
554 }
555 }
556
557 for(const auto& tool : m_commonTools) {
558 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
559 else break;
560
561 processStatus = tool->execute(*tau);
562
563 if(!processStatus.isFailure()) {
564 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
565 } else {
566 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
567 break;
568 }
569 }
570
571 // Dummy container passed to TauVertexVariables, not used in trigger though
572 xAOD::VertexContainer dummyVxCont;
573 for(const auto& tool : m_vertexVarsTools) {
574 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
575 else break;
576
577 processStatus = tool->executeVertexVariables(*tau, dummyVxCont);
578
579 if(!processStatus.isFailure()) {
580 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
581 } else {
582 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
583 break;
584 }
585 }
586
587 for(const auto& tool : m_idTools) {
588 if(!processStatus.isFailure()) ATH_MSG_DEBUG("Starting Tool: " << tool->name());
589 else break;
590
591 processStatus = tool->execute(*tau);
592
593 if(!processStatus.isFailure()) {
594 ATH_MSG_DEBUG(" " << tool->name() << " executed successfully");
595 } else {
596 ATH_MSG_DEBUG(" " << tool->name() << " execution failed");
597 break;
598 }
599 }
600
601 ATH_MSG_DEBUG("This tau has " << tau->allTracks() << " tracks linked");
602
603
604 // Cleanup in case any of the tools failed (rejected Tau)
605 if(!processStatus.isSuccess()) {
606 ATH_MSG_DEBUG("The tau object has NOT been registered in the tau container");
607
608 xAOD::TauJet* bad_tau = outputTauHandle->back();
609 ATH_MSG_DEBUG("Deleting " << bad_tau->nAllTracks() << " tracks associated with tau");
610 tauTrackHandle->erase(tauTrackHandle->end() - bad_tau->nAllTracks(), tauTrackHandle->end());
611
612 outputTauHandle->pop_back();
613
614 ATH_MSG_DEBUG("Clean up done after jet seed");
615
616 } else {
617 // Check that the seed-jet energy is positive
618 // Otherwise, try to salvage it by replacing the tau position with the RoI's
619 float fJetEnergy = (*tau->jetLink())->e();
620 ATH_MSG_DEBUG("Seed jet E: " << fJetEnergy);
621
622 if(fJetEnergy < 0.00001) {
623 ATH_MSG_DEBUG("Changing tau's (eta,phi) to RoI ones due to negative energy (PxPyPzE flips eta and phi)");
624 ATH_MSG_DEBUG("This is probably not needed anymore, method PxPyPzE has been corrected");
625 // TODO: Do we still need this??
626
627 tau->setP4(tau->pt(), roiDescriptor->eta(), roiDescriptor->phi(), tau->m());
628
629 ATH_MSG_DEBUG("Roi: " << roiDescriptor->roiId() << ", Tau eta: " << tau->eta() << ", phi: " << tau->phi() << ", pT: " << tau->pt());
630 }
631
632
633 //===============================================================================
634 // Monitor tau variables
635 //===============================================================================
636
637 pT = tau->pt()/Gaudi::Units::GeV;
638 eta = tau->eta();
639 phi = tau->phi();
640
641
642 etaRoI = roiDescriptor->eta();
643 phiRoI = roiDescriptor->phi();
644 dEta_RoI = eta - roiDescriptor->eta();
645 dPhi_RoI = phi - roiDescriptor->phi();
646 if(dPhi_RoI < -M_PI) dPhi_RoI += 2.0*M_PI;
647 if(dPhi_RoI > M_PI) dPhi_RoI -= 2.0*M_PI;
648
649
650 float pre_mEflowApprox;
651 tau->detail(xAOD::TauJetParameters::mEflowApprox, pre_mEflowApprox);
652 mEflowApprox = std::log10(std::max(pre_mEflowApprox, 140.0f));
653
654 float pre_ptRatioEflowApprox;
655 tau->detail(xAOD::TauJetParameters::ptRatioEflowApprox, pre_ptRatioEflowApprox);
656 ptRatioEflowApprox = std::min(pre_ptRatioEflowApprox, 4.0f);
657
658 pt_jetseed_log = std::log10(tau->ptJetSeed());
659 etaDetectorAxis = tau->etaDetectorAxis();
660 ptDetectorAxis = std::min(tau->ptDetectorAxis()/Gaudi::Units::GeV, 10000.0);
661 ptDetectorAxis_log = std::log10(std::min(tau->ptDetectorAxis()/Gaudi::Units::GeV, 10000.0));
662
663
668 EtHad /= Gaudi::Units::GeV;
670 EtEm /= Gaudi::Units::GeV;
671
672 float Et_raw = EtEm + EtHad;
673 if(Et_raw != 0) EMFrac = EtEm / Et_raw;
674
677
678
679 // Monitor BRT variables
680 float tmp = 0;
682 if(test) clustersMeanCenterLambda = tmp;
684 if(test) clustersMeanFirstEngDens = tmp;
686 if(test) clustersMeanEMProbability = tmp;
688 if(test) clustersMeanSecondLambda = tmp;
690 if(test) clustersMeanPresamplerFrac = tmp;
691
692
693 // Cluster variables monitoring
694 n_clusters = tau->clusters().size();
695 for(const auto& cluster : tau->clusters()) {
696 const xAOD::CaloCluster* cls = dynamic_cast<const xAOD::CaloCluster*>(cluster);
697
698 cluster_et_log.push_back(std::log10(cls->et()));
699 cluster_dEta.push_back(cls->eta() - tau->eta());
700 cluster_dPhi.push_back(cls->p4().DeltaPhi(tau->p4()));
701
702 double log_second_R = -999;
703 const bool success_SECOND_R = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R, log_second_R);
704 if(success_SECOND_R) log_second_R = std::log10(log_second_R + 0.1);
705 cluster_log_SECOND_R.push_back(log_second_R);
706
707 double second_lambda = -999;
708 const bool success_SECOND_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, second_lambda);
709 if(success_SECOND_LAMBDA) second_lambda = std::log10(second_lambda + 0.1);
710 cluster_SECOND_LAMBDA.push_back(second_lambda);
711
712 double center_lambda = -999;
713 const bool success_CENTER_LAMBDA = cls->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, center_lambda);
714 if(success_CENTER_LAMBDA) center_lambda = std::log10(center_lambda + 1e-6);
715 cluster_CENTER_LAMBDA.push_back(center_lambda);
716 }
717
718
719 // Tracks summary monitoring
720 n_tracks = tau->nTracks();
721 n_iso_tracks = tau->nTracksIsolation();
723 if(tau->nTracks() > 0) ipSigLeadTrk = std::abs(tau->track(0)->d0SigTJVA()); // TODO: Is this needed?
724 tau->detail(xAOD::TauJetParameters::trFlightPathSig, trFlightPathSig);
726 massTrkSys /= Gaudi::Units::GeV;
729 tau->detail(xAOD::TauJetParameters::innerTrkAvgDist, innerTrkAvgDist);
733 tau->detail(xAOD::TauJetParameters::ChPiEMEOverCaloEME, ChPiEMEOverCaloEME);
734
735 if(tau->vertexLink().isValid() && tau->vertex() && tau->vertex()->vertexType() != xAOD::VxType::NoVtx) {
736 vertex_x = tau->vertex()->x();
737 vertex_y = tau->vertex()->y();
738 vertex_z = tau->vertex()->z();
739 }
740
741
742 // Track variables monitoring
743 n_all_tracks = tau->allTracks().size();
744 for(const xAOD::TauTrack* track : tau->allTracks()) {
745 track_pt_log.push_back(std::log10(track->pt()));
746 track_dEta.push_back(track->eta() - tau->eta());
747 track_dPhi.push_back(track->p4().DeltaPhi(tau->p4()));
748 track_d0_abs_log.push_back(std::log10(std::abs(track->track()->d0()) + 1e-6));
749 track_z0sinthetaTJVA_abs_log.push_back(track->z0sinthetaTJVA());
750
751 uint8_t pixel_hits, pixel_dead;
752 const bool success1_pixel_hits = track->track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits);
753 const bool success2_pixel_dead = track->track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors);
754 float nPixelHitsPlusDeadSensor = -999;
755 if(success1_pixel_hits && success2_pixel_dead) nPixelHitsPlusDeadSensor = pixel_hits + pixel_dead;
756 track_nPixelHitsPlusDeadSensors.push_back(nPixelHitsPlusDeadSensor);
757
758 uint8_t sct_hits, sct_dead;
759 const bool success1_sct_hits = track->track()->summaryValue(sct_hits, xAOD::numberOfSCTHits);
760 const bool success2_sct_dead = track->track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors);
761 float nSCTHitsPlusDeadSensors = -999;
762 if(success1_sct_hits && success2_sct_dead) nSCTHitsPlusDeadSensors = sct_hits + sct_dead;
763 track_nSCTHitsPlusDeadSensors.push_back(nSCTHitsPlusDeadSensors);
764 }
765
766
767 // Hits summary monitoring
768 if(!m_hitsInputDecorKey.empty()) {
769 n_hits = tauHits.size();
770 for(const ROOT::Math::XYZVector& hit : tauHits) {
771 hit_z.push_back(hit.z());
772 hit_dPhi.push_back(CxxUtils::wrapToPi(hit.phi() - tau->phi()));
773 }
774 }
775
776
777 // TauID Score monitoring
778 for(const auto& [key, p] : m_monitoredIdScores) {
779 const auto& [score, scoreTrans] = m_monitoredInferenceAccessors.at(key);
780
781 if(score.isAvailable(*tau)) {
782 if(tau->nTracks() == 0) {
783 monitoredIdVariables.at(key + "_TauJetScore_0p") = score(*tau);
784 } else if(tau->nTracks() == 1) {
785 monitoredIdVariables.at(key + "_TauJetScore_1p") = score(*tau);
786 } else { // MP tau
787 monitoredIdVariables.at(key + "_TauJetScore_mp") = score(*tau);
788 }
789 }
790
791 if(scoreTrans.isAvailable(*tau)) {
792 if(tau->nTracks() == 0) {
793 monitoredIdVariables.at(key + "_TauJetScoreTrans_0p") = scoreTrans(*tau);
794 } else if(tau->nTracks() == 1) {
795 monitoredIdVariables.at(key + "_TauJetScoreTrans_1p") = scoreTrans(*tau);
796 } else { // MP tau
797 monitoredIdVariables.at(key + "_TauJetScoreTrans_mp") = scoreTrans(*tau);
798 }
799 }
800 }
801
802
803 // HitZ inference monitoring
804 for(const auto& [key, p] : m_monitoredHitZRegressions) {
805 const auto& [z0, sigma] = m_monitoredInferenceAccessors.at(key);
806
807 if(z0.isAvailable(*tau)) {
808 monitoredHitZVariables.at(key + "_z0") = z0(*tau);
809 }
810 if(sigma.isAvailable(*tau)) {
811 monitoredHitZVariables.at(key + "_z0_sigma") = sigma(*tau);
812 }
813 }
814
815
816 ++n_taus;
817
818
819 ATH_MSG_DEBUG("RoI: " << roiDescriptor->roiId()
820 << ", Tau pT (GeV): " << pT << ", Tau eta: " << eta << ", Tau phi: " << phi
821 << ", wrt RoI dEta: " << dEta_RoI << ", dPhi: " << dPhi_RoI);
822 }
823
824 //-------------------------------------------------------------------------------
825 // All done!
826 //-------------------------------------------------------------------------------
827
828 ATH_MSG_DEBUG("Output TauJetContainer size: " << outputTauHandle->size());
829 ATH_MSG_DEBUG("Output TauJetTrackContainer size: " << tauTrackHandle->size());
830
831 return StatusCode::SUCCESS;
832}
#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
#define y
#define x
#define z
const T * at(size_type n) const
Access an element, as an rvalue.
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::WriteDecorHandleKeyArray< xAOD::TauJetContainer > m_tauJetOutputDecorKeysArray
SG::WriteHandleKey< xAOD::TauJetContainer > m_tauJetOutputKey
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredHitZRegressions
SG::WriteHandleKey< xAOD::TauTrackContainer > m_tauTrackOutputKey
const ToolHandleArray< ITauToolBase > m_commonToolsBeforeTF
std::map< std::string, std::pair< SG::ConstAccessor< float >, SG::ConstAccessor< float > > > m_monitoredInferenceAccessors
SG::ReadHandleKey< xAOD::TauTrackContainer > m_tauTrackInputKey
SG::WriteHandleKey< xAOD::JetContainer > m_tauSeedOutputKey
SG::ReadDecorHandleKey< xAOD::TauJetContainer > m_hitsInputDecorKey
SG::WriteDecorHandleKey< xAOD::TauJetContainer > m_hitsOutputDecorKey
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexInputKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clustersInputKey
SG::ReadDecorHandleKeyArray< xAOD::TauJetContainer > m_tauJetInputDecorKeysArray
const ToolHandleArray< ITauToolBase > m_vertexFinderTools
const ToolHandleArray< ITauToolBase > m_trackFinderTools
SG::ReadHandleKey< xAOD::TauJetContainer > m_tauJetInputKey
const ToolHandleArray< ITauToolBase > m_vertexVarsTools
Gaudi::Property< std::map< std::string, std::pair< std::string, std::string > > > m_monitoredIdScores
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roiInputKey
@ 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:113
void setJetP4(const JetFourMom_t &p4)
Definition Jet_v1.cxx:182
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:143
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.
T wrapToPi(T phi)
Wrap angle in radians to [-pi, pi].
Definition phihelper.h:24
::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)
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
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 47 of file TrigTauRecMerged.cxx.

48{
49 ATH_MSG_DEBUG("Initialize");
50
51 for(const auto& tool : m_commonTools) ATH_CHECK(tool.retrieve());
52 for(const auto& tool : m_commonToolsBeforeTF) ATH_CHECK(tool.retrieve());
53 for(const auto& tool : m_vertexFinderTools) ATH_CHECK(tool.retrieve());
54 for(const auto& tool : m_trackFinderTools) ATH_CHECK(tool.retrieve());
55 for(const auto& tool : m_vertexVarsTools) ATH_CHECK(tool.retrieve());
56 for(const auto& tool : m_idTools) ATH_CHECK(tool.retrieve());
57
58 if(!m_monTool.name().empty()) ATH_CHECK(m_monTool.retrieve());
59
60 ATH_MSG_DEBUG("Initialising handle keys");
61 ATH_CHECK(m_roiInputKey.initialize());
66
68 ATH_CHECK(m_tauJetOutputKey.initialize());
69 ATH_CHECK(m_tauTrackOutputKey.initialize());
70
71 // Hits decorations
72 if(!m_tauJetInputKey.empty() && !m_hitsInputDecorKey.empty()) {
73 // Initialize output decoration keys with the same names
74 // We manually copy the decorations because we want to make the scheduler aware of the hits dependencies
77 ATH_CHECK(m_hitsOutputDecorKey.initialize());
78
79 // Initialize input decorator keys
81 ATH_CHECK(m_hitsInputDecorKey.initialize());
82 }
83
84
85 // Propagate decorated quantities from the input to the output tau collection
86 if(!m_tauJetInputKey.empty() && !m_tauJetInputDecorKeysArray.empty()) {
87 for(auto& decor_key : m_tauJetInputDecorKeysArray) {
88 m_tauJetOutputDecorKeysArray.push_back(m_tauJetOutputKey.key() + "." + decor_key.key());
89 ATH_CHECK(m_tauJetOutputDecorKeysArray.back().initialize());
90
91 decor_key = m_tauJetInputKey.key() + "." + decor_key.key();
92 ATH_CHECK(decor_key.initialize());
93 }
94
95 } else if(m_tauJetInputKey.empty() && !m_tauJetInputDecorKeysArray.empty()) {
96 ATH_MSG_ERROR("Cannot specify input TauJet decoration keys without an input TauJet container key!");
97 return StatusCode::FAILURE;
98 }
99
100
101 // Determine the reconstruction mode
102 if(m_tauJetInputKey.empty() && !m_clustersInputKey.empty()) {
104 ATH_MSG_INFO("Running in Calo reconstruction mode (from clusters)");
105 } else if(!m_tauJetInputKey.empty()) {
107 ATH_MSG_INFO("Running in Full reconstruction mode (from input TauJets + TauTracks)");
108 } else {
109 ATH_MSG_ERROR("Invalid configuration!");
110 return StatusCode::FAILURE;
111 }
112
113
114 // Set up the monitoring accessors
115 for(const auto& [key, p] : m_monitoredIdScores) {
117 key,
118 std::make_pair(SG::ConstAccessor<float>(p.first), SG::ConstAccessor<float>(p.second))
119 );
120 }
121
122 for(const auto& [key, p] : m_monitoredHitZRegressions) {
124 key,
125 std::make_pair(SG::ConstAccessor<float>(p.first), SG::ConstAccessor<float>(p.second))
126 );
127 }
128
129
130 return StatusCode::SUCCESS;
131}
#define ATH_MSG_INFO(x)

◆ 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 86 of file TrigTauRecMerged.h.

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

◆ m_commonTools

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

Definition at line 70 of file TrigTauRecMerged.h.

70{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 71 of file TrigTauRecMerged.h.

71{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_hitsInputDecorKey

SG::ReadDecorHandleKey<xAOD::TauJetContainer> TrigTauRecMerged::m_hitsInputDecorKey {this, "InputTauJetHitsKey", "", "Input TauJet hits decoration key"}
private

Definition at line 91 of file TrigTauRecMerged.h.

91{this, "InputTauJetHitsKey", "", "Input TauJet hits decoration key"};

◆ m_hitsOutputDecorKey

SG::WriteDecorHandleKey<xAOD::TauJetContainer> TrigTauRecMerged::m_hitsOutputDecorKey {this, "OutputTauJetHitsKey", "", "Output TauJet hits decoration key"}
private

Definition at line 98 of file TrigTauRecMerged.h.

98{this, "OutputTauJetHitsKey", "", "Output TauJet hits decoration key"};

◆ m_idTools

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

Definition at line 75 of file TrigTauRecMerged.h.

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

◆ m_monitoredHitZRegressions

Gaudi::Property<std::map<std::string, std::pair<std::string, std::string> > > TrigTauRecMerged::m_monitoredHitZRegressions {this, "MonitoredHitZRegressions", {}, "Pairs of the z and sigma regression output variables for each HitZ algorithm to be monitored"}
private

Definition at line 80 of file TrigTauRecMerged.h.

80{this, "MonitoredHitZRegressions", {}, "Pairs of the z and sigma regression output variables for each HitZ algorithm to be monitored"};

◆ 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 79 of file TrigTauRecMerged.h.

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

◆ m_monitoredInferenceAccessors

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

Definition at line 81 of file TrigTauRecMerged.h.

◆ m_monTool

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

Definition at line 78 of file TrigTauRecMerged.h.

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

◆ m_reco_mode

Mode TrigTauRecMerged::m_reco_mode = FromClusters
private

Definition at line 101 of file TrigTauRecMerged.h.

◆ m_roiInputKey

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

Definition at line 85 of file TrigTauRecMerged.h.

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

◆ m_tauJetInputDecorKeysArray

SG::ReadDecorHandleKeyArray<xAOD::TauJetContainer> TrigTauRecMerged::m_tauJetInputDecorKeysArray {this, "InputTauJetCopyDecorKeys", {}, "Array of input TauJet decoration keys to copy on the output TauJet"}
private

Definition at line 89 of file TrigTauRecMerged.h.

89{this, "InputTauJetCopyDecorKeys", {}, "Array of input TauJet decoration keys to copy on the output TauJet"};

◆ m_tauJetInputKey

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

Definition at line 88 of file TrigTauRecMerged.h.

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

◆ m_tauJetOutputDecorKeysArray

SG::WriteDecorHandleKeyArray<xAOD::TauJetContainer> TrigTauRecMerged::m_tauJetOutputDecorKeysArray
private

Definition at line 96 of file TrigTauRecMerged.h.

◆ m_tauJetOutputKey

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

Definition at line 95 of file TrigTauRecMerged.h.

95{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 94 of file TrigTauRecMerged.h.

94{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 90 of file TrigTauRecMerged.h.

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

◆ m_tauTrackOutputKey

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

Definition at line 97 of file TrigTauRecMerged.h.

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

◆ m_trackFinderTools

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

Definition at line 73 of file TrigTauRecMerged.h.

73{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 72 of file TrigTauRecMerged.h.

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

◆ m_vertexInputKey

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

Definition at line 87 of file TrigTauRecMerged.h.

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

◆ m_vertexVarsTools

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

Definition at line 74 of file TrigTauRecMerged.h.

74{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: