ATLAS Offline Software
MuonSegmentReader.h
Go to the documentation of this file.
1 /*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /*
6 @ author Zhen Yan (zhen.yan@cern.ch)
7 */
8 
9 #ifndef MUONCALIB_MUONSEGMENTREADER_H
10 #define MUONCALIB_MUONSEGMENTREADER_H
13 
17 
18 #include "GaudiKernel/ServiceHandle.h"
19 #include "GaudiKernel/ToolHandle.h"
24 #include "MuonTesterTree/MuonTesterTree.h" //for MuonVal::MuonTesterTree
28 
31 namespace Trk {
33  class RIO_OnTrack;
34 } // namespace Trk
35 
36 namespace MuonCalib {
37 using namespace MuonVal ;
38 
40  {
41  public:
43 
44  //virtual StatusCode initialize() override;
45  virtual StatusCode initialize() override;
46  // virtual StatusCode execute (const EventContext& ctx) const override;
47  virtual StatusCode execute () override;
48  virtual StatusCode finalize () override;
49 
50  unsigned int cardinality() const override final { return 1; } ;
51 
52  private:
53 
54  SG::ReadHandleKey<xAOD::EventInfo> m_evtKey{this, "EventInfoKey", "EventInfo", "xAOD::EventInfo ReadHandleKey"};
55 
56  // Loop for track_coll = ["MuonSpectrometerTracks","ExtrapolatedMuonTracks", "CombinedMuonTracks", "MSOnlyExtrapolatedTracks"] if input data type is ESD
57  SG::ReadHandleKey<TrackCollection> m_TrkKey {this, "MuonTrackLocations", "MuonSpectrometerTracks"};
58 
59  SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_MdtPrepDataKey {this, "MdtPrepData", "MDT_DriftCircles","MDT DriftCircles"};
60  SG::ReadHandleKey<Muon::RpcPrepDataContainer> m_RpcPrepDataKey {this,"RpcPrdCollection","RPC_Measurements","RPC PRD Container"};
61  SG::ReadHandleKey<Muon::TgcPrepDataContainer> m_TgcPrepDataKey{this,"TgcPrdCollection","TGC_Measurements","TGC PRD Container"};
62 
63  // /** MuonDetectorManager from the conditions store */
64  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_DetectorManagerKey{this, "DetectorManagerKey", "MuonDetectorManager",
65  "Key of input MuonDetectorManager condition data"};
66 
67  ServiceHandle<Muon::IMuonIdHelperSvc> m_MuonIdHelper{this, "MuonIdHelper", "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
68  "Handle to the MuonIdHelperSvc"};
69 
71  ToolHandle<IMdtCalibrationTool> m_calibrationTool{this, "CalibrationTool", "MdtCalibrationTool"};
72 
73  PublicToolHandle<Trk::IResidualPullCalculator> m_pullCalculator{this, "PullCalculator",
74  "Trk::ResidualPullCalculator/ResidualPullCalculator"};
75 
76  ToolHandle<MuonCalib::IIdToFixedIdTool> m_idToFixedIdTool{this, "IdToFixedIdTool", "MuonCalib::IdToFixedIdTool/MuonCalib_IdToFixedIdTool"};
77 
78  PublicToolHandle<Muon::MuonEDMPrinterTool> m_printer{this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
79 
80  MuonTesterTree m_tree{"Segments", "CALIBNTUPLESTREAM"};
81  // book event_x branches
82  ScalarBranch<int>& m_runNumber{m_tree.newScalar<int>("event_runNumber")};
83  ScalarBranch<int>& m_eventNumber{m_tree.newScalar<int>("event_eventNumber")};
84  ScalarBranch<int>& m_lumiBlock{m_tree.newScalar<int>("event_lumiBlock")};
85  ScalarBranch<int>& m_bcId{m_tree.newScalar<int>("event_bcId")};
86  ScalarBranch<int>& m_timeStamp{m_tree.newScalar<int>("event_timeStamp")};
87  ScalarBranch<float>& m_pt{m_tree.newScalar<float>("event_LVL2Pt")};
88  //ScalarBranch<unsigned int>& m_eventTag{m_tree.newScalar<unsigned int>("event_eventTag")};
89  //ScalarBranch<int>& m_nEvent{m_tree.newScalar<int>("event_nEvent")};
90 
91  // rawMDT hit branches
92  ScalarBranch<int>& m_rawMdt_nRMdt{m_tree.newScalar<int>("rawMdt_nRMdt")}; //total number of MDT hits in the event
93  VectorBranch<unsigned int>& m_rawMdt_id{m_tree.newVector<unsigned int>("rawMdt_id")}; //identifier of the raw MDT hit (given by MuonFixedId)
94  VectorBranch<int>& m_rawMdt_tdc{m_tree.newVector<int>("rawMdt_tdc")}; //tdc counts of the raw MDT hit
95  VectorBranch<int>& m_rawMdt_adc{m_tree.newVector<int>("rawMdt_adc")}; //adc counts of the raw MDT hit
96  ThreeVectorBranch m_rawMdt_gPos{m_tree,"rawMdt_gPos"};
97 
98  // rawRPC hit branches
99  ScalarBranch<int>& m_rawRpc_nRRpc{m_tree.newScalar<int>("rawRpc_nRRpc")}; //total number of MDT hits in the event
100  VectorBranch<unsigned int>& m_rawRpc_id{m_tree.newVector<unsigned int>("rawRpc_id")}; //identifier of the raw MDT hit (given by MuonFixedId)
101  VectorBranch<float>& m_rawRpc_time{m_tree.newVector<float>("rawRpc_time")}; //times of the raw RPC hit
102  ThreeVectorBranch m_rawRpc_gPos{m_tree,"rawRpc_gPos"};
103 
104  // rawRPC hit branches
105  ScalarBranch<int>& m_rawTgc_nRTgc{m_tree.newScalar<int>("rawTgc_nRTgc")}; //total number of MDT hits in the event
106  VectorBranch<unsigned int>& m_rawTgc_id{m_tree.newVector<unsigned int>("rawTgc_id")}; //identifier of the raw MDT hit (given by MuonFixedId)
107  VectorBranch<int>& m_rawTgc_bcBitMap{m_tree.newVector<int>("rawTgc_bcBitMap")}; //times of the raw MDT hit
108  ThreeVectorBranch m_rawTgc_gPos{m_tree,"rawTgc_gPos"};
109 
110  // Muon Track branches
111  ScalarBranch<int>& m_trk_nTracks{m_tree.newScalar<int>("trk_nTracks")};
112  VectorBranch<float>& m_trk_d0{m_tree.newVector<float>("trk_d0")};
113  VectorBranch<float>& m_trk_z0{m_tree.newVector<float>("trk_z0")};
114  VectorBranch<float>& m_trk_phi{m_tree.newVector<float>("trk_phi")};
115  VectorBranch<float>& m_trk_theta{m_tree.newVector<float>("trk_theta")};
116  VectorBranch<float>& m_trk_eta{m_tree.newVector<float>("trk_eta")};
117  VectorBranch<float>& m_trk_qOverP{m_tree.newVector<float>("trk_qOverP")};
118  VectorBranch<float>& m_trk_pt{m_tree.newVector<float>("trk_pt")};
119  VectorBranch<float>& m_trk_chi2{m_tree.newVector<float>("trk_chi2")};
120  VectorBranch<int>& m_trk_ndof{m_tree.newVector<int>("trk_ndof")};
121  VectorBranch<int>& m_trk_author{m_tree.newVector<int>("trk_author")};
122  ThreeVectorBranch m_trk_perigee{m_tree,"trk_perigee"} ;
123 
124  VectorBranch<int>& m_trk_nMdtHits{m_tree.newVector<int>("trk_nMdtHits")};
125  VectorBranch<int>& m_trk_nMdtHoles{m_tree.newVector<int>("trk_nMdtHoles")};
126  VectorBranch<int>& m_trk_nOutliersHits{m_tree.newVector<int>("trk_nOutliersHits")};
127  VectorBranch<int>& m_trk_nRpcPhiHits{m_tree.newVector<int>("trk_nRpcPhiHits")};
128  VectorBranch<int>& m_trk_nRpcEtaHits{m_tree.newVector<int>("trk_nRpcEtaHits")};
129  VectorBranch<int>& m_trk_nTgcPhiHits{m_tree.newVector<int>("trk_nTgcPhiHits")};
130  VectorBranch<int>& m_trk_nTgcEtaHits{m_tree.newVector<int>("trk_nTgcEtaHits")};
131 
132  // Muon Track Hit branches (MDT)
133  ScalarBranch<int>& m_trkHit_nMdtHits{m_tree.newScalar<int>("trkHit_nMdtHits")}; // total MDT track hits
134  VectorBranch<int>& m_trkHit_trackIndex{m_tree.newVector<int>("trkHit_trackIndex")};
135  ThreeVectorBranch m_trkHit_gPos{m_tree,"trkHit_gPos"} ;
136  ThreeVectorBranch m_trkHit_pos{m_tree,"trkHit_pos"} ;
137  ThreeVectorBranch m_trkHit_closestApproach{m_tree,"trkHit_closestApproach"} ;
138  ThreeVectorBranch m_trkHit_gClosestApproach{m_tree,"trkHit_gClosestApproach"} ;
139  ThreeVectorBranch m_trkHit_center{m_tree,"trkHit_center"};
140 
141  VectorBranch<int>& m_trkHit_adc{m_tree.newVector<int>("trkHit_adc")};
142  VectorBranch<int>& m_trkHit_type{m_tree.newVector<int>("trkHit_type")}; // 1 hits, 4 outliers
143  VectorBranch<int>& m_trkHit_tdc{m_tree.newVector<int>("trkHit_tdc")};
144  VectorBranch<float>& m_trkHit_resi{m_tree.newVector<float>("trkHit_resi")};
145  VectorBranch<float>& m_trkHit_pull{m_tree.newVector<float>("trkHit_pull")};
146  VectorBranch<unsigned int>& m_trkHit_id{m_tree.newVector<unsigned int>("trkHit_id")};
147  VectorBranch<float>& m_trkHit_driftRadius{m_tree.newVector<float>("trkHit_driftRadius")};
148  VectorBranch<float>& m_trkHit_error{m_tree.newVector<float>("trkHit_error")};
149  VectorBranch<float>& m_trkHit_rTrk{m_tree.newVector<float>("trkHit_rTrk")};
150  VectorBranch<float>& m_trkHit_driftTime{m_tree.newVector<float>("trkHit_driftTime")};
151  VectorBranch<float>& m_trkHit_distRO{m_tree.newVector<float>("trkHit_distRO")};
152  VectorBranch<float>& m_trkHit_localAngle{m_tree.newVector<float>("trkHit_localAngle")};
153 
154  // branches with driftTime corrections
155  VectorBranch<float>& m_trkHit_tubeT0{m_tree.newVector<float>("trkHit_tubeT0")};
156  VectorBranch<float>& m_trkHit_triggerTime{m_tree.newVector<float>("trkHit_triggerTime")};
157  VectorBranch<float>& m_trkHit_tubeMeanAdc{m_tree.newVector<float>("trkHit_tubeMeanAdc")};
158  VectorBranch<float>& m_trkHit_slewTime{m_tree.newVector<float>("trkHit_slewTime")};
159  VectorBranch<float>& m_trkHit_lorTime{m_tree.newVector<float>("trkHit_lorTime")};
160  VectorBranch<float>& m_trkHit_propTime{m_tree.newVector<float>("trkHit_propTime")};
161  VectorBranch<float>& m_trkHit_tempTime{m_tree.newVector<float>("trkHit_tempTime")};
162  VectorBranch<float>& m_trkHit_bkgTime{m_tree.newVector<float>("trkHit_bkgTime")};
163  VectorBranch<float>& m_trkHit_tof{m_tree.newVector<float>("trkHit_tof")};
164  VectorBranch<int>& m_trkHit_calibStatus{m_tree.newVector<int>("trkHit_calibStatus")};
165 
166  // Muon Track Hole branches (MDT)
167  ScalarBranch<int>& m_trkHole_nHoles{m_tree.newScalar<int>("trkHole_nHoles")}; // total holes
168  VectorBranch<int>& m_trkHole_trackIndex{m_tree.newVector<int>("trkHole_trackIndex")};
169  VectorBranch<int>& m_trkHole_type{m_tree.newVector<int>("trkHole_type")}; // 1 MDT, 2 RPC, 3 TGC
170  ThreeVectorBranch m_trkHole_gPos{m_tree,"trkHole_gPos"} ;
171  VectorBranch<unsigned int>& m_trkHole_id{m_tree.newVector<unsigned int>("trkHole_id")};
172  VectorBranch<float>& m_trkHole_driftRadius{m_tree.newVector<float>("trkHole_driftRadius")};
173 
174  // Muon Track trigger hit branches (RPC & TGC)
175  ScalarBranch<int>& m_trkTriggerHit_nHits{m_tree.newScalar<int>("trkTriggerHit_nHits")}; // total trigger hits
176  VectorBranch<int>& m_trkTriggerHit_trackIndex{m_tree.newVector<int>("trkTriggerHit_trackIndex")};
177  VectorBranch<int>& m_trkTriggerHit_type{m_tree.newVector<int>("trkTriggerHit_type")}; // 0 unknown, 1 RPC rot, 2 RPC crot, 3 TGC rot, 4 TGC strip, 5 TGC wire
178  ThreeVectorBranch m_trkTriggerHit_gPos{m_tree,"trkTriggerHit_gPos"} ;
179  VectorBranch<unsigned int>& m_trkTriggerHit_id{m_tree.newVector<unsigned int>("trkTriggerHit_id")};
180  VectorBranch<float>& m_trkTriggerHit_time{m_tree.newVector<float>("trkTriggerHit_time")}; // time for RPC and bcBitMap for TGC
181 
182  // store functions
183  void storeMeasurement(const EventContext& ctx, const MuonGM::MuonDetectorManager* MuonDetMgr, unsigned int itrk, const Trk::TrackStateOnSurface* trk_state, const Trk::MeasurementBase* measurement);
184  void storeHole(const Trk::TrackStateOnSurface * trk_state, unsigned int itrk) ;
185 
186  };
187 
188  } // namespace MuonCalib
189 #endif
ReadHandleKey.h
Property holding a SG store/key/clid from which a ReadHandle is made.
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:50
AthHistogramAlgorithm::AthHistogramAlgorithm
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Definition: AthHistogramAlgorithm.cxx:31
MuonEDMPrinterTool.h
initialize
void initialize()
Definition: run_EoverP.cxx:894
IMdtCalibrationTool.h
IExtrapolator.h
MuonVal::VectorBranch< unsigned int >
MuonTesterTree.h
MuonCalib::MuonSegmentReader::cardinality
unsigned int cardinality() const override final
Definition: MuonSegmentReader.h:50
ThreeVectorBranch.h
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
SG::ReadHandleKey< xAOD::EventInfo >
MuonVal::ThreeVectorBranch
Definition: ThreeVectorBranch.h:19
AthHistogramAlgorithm.h
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
MuonCalib::MuonSegmentReader
Definition: MuonSegmentReader.h:40
MuonVal::MuonTesterTree
Definition: MuonTesterTree.h:30
Trk::MeasurementBaseType::CompetingRIOsOnTrack
@ CompetingRIOsOnTrack
Definition: MeasurementBase.h:50
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TrackCollection.h
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
AthHistogramAlgorithm
Definition: AthHistogramAlgorithm.h:32
Trk::MeasurementBase
Definition: MeasurementBase.h:58
MuonVal
Class to store array like branches into the n-tuples.
Definition: HitValAlg.cxx:19
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
MuonVal::ScalarBranch< int >
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
Trk::MeasurementBaseType::RIO_OnTrack
@ RIO_OnTrack
Definition: MeasurementBase.h:49
MuonDetectorManager.h
EventInfo.h
IResidualPullCalculator.h
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager >
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:51
IMuonIdHelperSvc.h
IIdToFixedIdTool.h
ServiceHandle< Muon::IMuonIdHelperSvc >