ATLAS Offline Software
MuonHitTimingTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MuonHitTimingTool.h"
8 
9 
10 namespace Muon {
11 
12  MuonHitTimingTool::MuonHitTimingTool(const std::string& t, const std::string& n, const IInterface* p):
13  AthAlgTool(t,n,p),
14  m_hitTimingTools(this)
15  {
16  declareInterface<IMuonHitTimingTool>(this);
17 
18  for( unsigned int tech = 0;tech<MuonStationIndex::TechnologyIndexMax;++tech ){
19  if( tech == static_cast<unsigned int>(MuonStationIndex::RPC) ) m_hitTimingTools.push_back(ToolHandle<IMuonHitTimingTool>("Muon::RPC_TimingTool/RPC_TimingTool"));
20  else m_hitTimingTools.push_back(ToolHandle<IMuonHitTimingTool>(""));
21  }
22 
23  }
24 
26 
27  ATH_CHECK(m_idHelperSvc.retrieve());
28 
29  // ensure that the number of tool handles corresponds to the number of technologies
30  if( m_hitTimingTools.size() != MuonStationIndex::TechnologyIndex::TechnologyIndexMax ){
31  ATH_MSG_ERROR(" The MuonHitTimingTool ToolHandleArray SHOULD contain exactly " << MuonStationIndex::TechnologyIndex::TechnologyIndexMax
32  << " ToolHandles (they can be empty). ");
33  return StatusCode::FAILURE;
34  }
35 
36  // loop over timing tool handles and check that they handle the technology they are supposed to, if not return a FAILURE
37  for( unsigned int tech = 0;tech<MuonStationIndex::TechnologyIndexMax;++tech ){
38  // get handle, accept empty handles
39  auto& toolHandle = m_hitTimingTools[tech];
41  if( toolHandle.empty() ) continue;
42  ATH_CHECK(toolHandle.retrieve());
43  ATH_MSG_INFO(" retrieved " << toolHandle );
44  // if not empty get list of handles technolgies and check that the current tech is handled
45  std::set<MuonStationIndex::TechnologyIndex> acceptedTechnologies = toolHandle->acceptedTechnologies();
46  if( !acceptedTechnologies.count(static_cast<MuonStationIndex::TechnologyIndex>(tech)) ) return StatusCode::FAILURE;
48  }
49  return StatusCode::SUCCESS;
50  }
51 
52  IMuonHitTimingTool::TimingResult MuonHitTimingTool::calculateTimingResult( const std::vector<const MuonClusterOnTrack*>& hits ) const {
53 
54  // treat case of no hits and the case the first pointer is zero (should not happen)
55  if( hits.empty() || !hits.front() ) return {};
56 
57  // for now assume that all hits are of the same technolgy
58  Identifier id = hits.front()->identify();
59  MuonStationIndex::TechnologyIndex tech = m_idHelperSvc->technologyIndex(id);
60  if( !m_acceptedTechnologies.count(tech) ) return {};
61 
62  // get handle and use it if it is not empty
63  const ToolHandle<IMuonHitTimingTool>& toolHandle = m_hitTimingTools[tech];
64  if( toolHandle.empty() ) {
65  ATH_MSG_WARNING("Unable to fill timing, timing tool missing. Tech = " << MuonStationIndex::technologyName(tech) );
66  return {};
67  }
68  return toolHandle->calculateTimingResult(hits);
69  }
70 
71 
72 }
Muon::MuonHitTimingTool::calculateTimingResult
TimingResult calculateTimingResult(const std::vector< const MuonClusterOnTrack * > &hits) const
Calculate the time offset of a given set of hits wrt to the current bunch.
Definition: MuonHitTimingTool.cxx:52
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CompetingMuonClustersOnTrack.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Muon::MuonHitTimingTool::m_acceptedTechnologies
std::set< MuonStationIndex::TechnologyIndex > m_acceptedTechnologies
Definition: MuonHitTimingTool.h:46
RpcClusterOnTrack.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
beamspotman.n
n
Definition: beamspotman.py:731
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
Muon::MuonHitTimingTool::m_hitTimingTools
ToolHandleArray< IMuonHitTimingTool > m_hitTimingTools
Definition: MuonHitTimingTool.h:45
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonHitTimingTool.h
Muon::IMuonHitTimingTool::TimingResult
simple struct holding the result of the tool
Definition: IMuonHitTimingTool.h:39
Muon::MuonHitTimingTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonHitTimingTool.h:44
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Muon::MuonHitTimingTool::acceptedTechnologies
std::set< MuonStationIndex::TechnologyIndex > acceptedTechnologies() const
return a set of technologies accepted by the tool
Definition: MuonHitTimingTool.h:41
Muon::MuonStationIndex::TechnologyIndexMax
@ TechnologyIndexMax
Definition: MuonStationIndex.h:57
Muon::MuonStationIndex::RPC
@ RPC
Definition: MuonStationIndex.h:56
AthAlgTool
Definition: AthAlgTool.h:26
Muon::MuonStationIndex::TechnologyIndex
TechnologyIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:54
Muon::MuonHitTimingTool::MuonHitTimingTool
MuonHitTimingTool(const std::string &, const std::string &, const IInterface *)
Definition: MuonHitTimingTool.cxx:12
Muon::MuonHitTimingTool::initialize
virtual StatusCode initialize()
standard initialization method
Definition: MuonHitTimingTool.cxx:25
Muon::MuonStationIndex::technologyName
static const std::string & technologyName(TechnologyIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:209