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 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
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
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"}
Gaudi::Property< std::map< std::string, std::string > > m_shiftToDetectorCoordinates {this, "ShiftToDetectorCoordinates", {}, "Map of HitZ regression z variable to the corresponding shifted variable to be filled in the monitoring"}
SG::ReadDecorHandleKeyArray< xAOD::TauJetContainerm_shiftToDetectorCoordinatesInDecorKeysArray {this, "ShiftToDetectorCoordinatesInDecorKeys", m_tauJetOutputKey, {}}
SG::WriteDecorHandleKeyArray< xAOD::TauJetContainerm_shiftToDetectorCoordinatesOutDecorKeysArray {this, "ShiftToDetectorCoordinatesOutDecorKeys", m_tauJetOutputKey, {}}
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "Key for BeamSpot condition data"}
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 34 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 45 of file TrigTauRecMerged.h.

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

◆ TAUEFCALOMON

Enumerator
NoROIDescr 
NoCellCont 
EmptyCellCont 
NoClustCont 
NoClustKey 
EmptyClustCont 
NoJetAttach 
NoHLTtauAttach 
NoHLTtauDetAttach 
NoHLTtauXdetAttach 

Definition at line 51 of file TrigTauRecMerged.h.

◆ TAUEFTRKMON

Enumerator
NoTrkCont 
NoVtxCont 

Definition at line 65 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

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

115 {
116 if(!writeHandle.isValid()) {
117 ATH_MSG_FATAL("Provided with an invalid write handle");
118 return StatusCode::FAILURE;
119 }
120
121 if(oldContainer){
122 for(const V* v : *oldContainer) {
123 // Build a new object in the new container
124 writeHandle->push_back(std::make_unique<V>());
125 // Copy across the aux store
126 *writeHandle->back() = *v;
127 }
128 }
129 return StatusCode::SUCCESS;
130}
#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 145 of file TrigTauRecMerged.cxx.

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

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ filterPassed()

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

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }
virtual bool filterPassed(const EventContext &ctx) const
Get filter decision:

◆ 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 // Setup coordinate transformation for HitZ inferences
115 ATH_CHECK(m_beamSpotKey.initialize());
116 for(const auto& [in_key, out_key] : m_shiftToDetectorCoordinates) {
119
122 }
123
124
125 // Set up the monitoring accessors
126 for(const auto& [key, p] : m_monitoredIdScores) {
128 key,
129 std::make_pair(SG::ConstAccessor<float>(p.first), SG::ConstAccessor<float>(p.second))
130 );
131 }
132
133 for(const auto& [key, p] : m_monitoredHitZRegressions) {
135 key,
136 std::make_pair(SG::ConstAccessor<float>(p.first), SG::ConstAccessor<float>(p.second))
137 );
138 }
139
140
141 return StatusCode::SUCCESS;
142}
#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()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ 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 AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Set filter decision:

Reimplemented in AthFilterAlgorithm.

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Set filter decision:

◆ sysExecute()

StatusCode AthCommonAlgorithm< 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.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< 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 AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
#define ATH_MSG_WARNING(x)
virtual StatusCode sysInitialize() override
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_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> TrigTauRecMerged::m_beamSpotKey {this, "BeamSpotKey", "BeamSpotData", "Key for BeamSpot condition data"}
private

Definition at line 107 of file TrigTauRecMerged.h.

107{this, "BeamSpotKey", "BeamSpotData", "Key for BeamSpot condition data"};

◆ m_clustersInputKey

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

Definition at line 89 of file TrigTauRecMerged.h.

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

◆ m_commonTools

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

Definition at line 73 of file TrigTauRecMerged.h.

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

74{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 AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

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

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.h.

◆ m_hitsInputDecorKey

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

Definition at line 94 of file TrigTauRecMerged.h.

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

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

◆ m_idTools

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

Definition at line 78 of file TrigTauRecMerged.h.

78{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 83 of file TrigTauRecMerged.h.

83{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 82 of file TrigTauRecMerged.h.

82{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 84 of file TrigTauRecMerged.h.

◆ m_monTool

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

Definition at line 81 of file TrigTauRecMerged.h.

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

◆ m_reco_mode

Mode TrigTauRecMerged::m_reco_mode = FromClusters
private

Definition at line 111 of file TrigTauRecMerged.h.

◆ m_roiInputKey

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

Definition at line 88 of file TrigTauRecMerged.h.

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

◆ m_shiftToDetectorCoordinates

Gaudi::Property<std::map<std::string, std::string> > TrigTauRecMerged::m_shiftToDetectorCoordinates {this, "ShiftToDetectorCoordinates", {}, "Map of HitZ regression z variable to the corresponding shifted variable to be filled in the monitoring"}
private

Definition at line 104 of file TrigTauRecMerged.h.

104{this, "ShiftToDetectorCoordinates", {}, "Map of HitZ regression z variable to the corresponding shifted variable to be filled in the monitoring"};

◆ m_shiftToDetectorCoordinatesInDecorKeysArray

SG::ReadDecorHandleKeyArray<xAOD::TauJetContainer> TrigTauRecMerged::m_shiftToDetectorCoordinatesInDecorKeysArray {this, "ShiftToDetectorCoordinatesInDecorKeys", m_tauJetOutputKey, {}}
private

Definition at line 105 of file TrigTauRecMerged.h.

105{this, "ShiftToDetectorCoordinatesInDecorKeys", m_tauJetOutputKey, {}};

◆ m_shiftToDetectorCoordinatesOutDecorKeysArray

SG::WriteDecorHandleKeyArray<xAOD::TauJetContainer> TrigTauRecMerged::m_shiftToDetectorCoordinatesOutDecorKeysArray {this, "ShiftToDetectorCoordinatesOutDecorKeys", m_tauJetOutputKey, {}}
private

Definition at line 106 of file TrigTauRecMerged.h.

106{this, "ShiftToDetectorCoordinatesOutDecorKeys", m_tauJetOutputKey, {}};

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

92{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 91 of file TrigTauRecMerged.h.

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

◆ m_tauJetOutputDecorKeysArray

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

Definition at line 99 of file TrigTauRecMerged.h.

◆ m_tauJetOutputKey

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

Definition at line 98 of file TrigTauRecMerged.h.

98{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 97 of file TrigTauRecMerged.h.

97{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 93 of file TrigTauRecMerged.h.

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

◆ m_tauTrackOutputKey

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

Definition at line 100 of file TrigTauRecMerged.h.

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

◆ m_trackFinderTools

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

Definition at line 76 of file TrigTauRecMerged.h.

76{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 75 of file TrigTauRecMerged.h.

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

◆ m_vertexInputKey

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

Definition at line 90 of file TrigTauRecMerged.h.

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

◆ m_vertexVarsTools

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

Definition at line 77 of file TrigTauRecMerged.h.

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