ATLAS Offline Software
Loading...
Searching...
No Matches
MuonSegmentReader.h
Go to the documentation of this file.
1/*
2Copyright (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
31namespace Trk {
33 class RIO_OnTrack;
34} // namespace Trk
35
36namespace MuonCalib {
37using 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
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
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
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")};
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")};
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
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
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
Property holding a SG store/key/clid from which a ReadHandle is made.
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
VectorBranch< unsigned int > & m_rawRpc_id
ServiceHandle< Muon::IMuonIdHelperSvc > m_MuonIdHelper
VectorBranch< float > & m_trkHit_triggerTime
VectorBranch< float > & m_trk_d0
VectorBranch< int > & m_trkHit_tdc
VectorBranch< float > & m_trkHit_error
ScalarBranch< int > & m_trkTriggerHit_nHits
ScalarBranch< int > & m_lumiBlock
ScalarBranch< float > & m_pt
VectorBranch< float > & m_trk_qOverP
SG::ReadHandleKey< Muon::TgcPrepDataContainer > m_TgcPrepDataKey
ScalarBranch< int > & m_trk_nTracks
VectorBranch< int > & m_trk_ndof
virtual StatusCode initialize() override
VectorBranch< unsigned int > & m_trkTriggerHit_id
void storeHole(const Trk::TrackStateOnSurface *trk_state, unsigned int itrk)
ThreeVectorBranch m_trkHit_closestApproach
PublicToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
VectorBranch< float > & m_trk_theta
VectorBranch< int > & m_trkHit_trackIndex
VectorBranch< float > & m_rawRpc_time
SG::ReadHandleKey< xAOD::EventInfo > m_evtKey
VectorBranch< float > & m_trk_phi
unsigned int cardinality() const override final
VectorBranch< int > & m_trkHit_type
VectorBranch< float > & m_trk_chi2
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_MdtPrepDataKey
ThreeVectorBranch m_trkHit_gClosestApproach
void storeMeasurement(const EventContext &ctx, const MuonGM::MuonDetectorManager *MuonDetMgr, unsigned int itrk, const Trk::TrackStateOnSurface *trk_state, const Trk::MeasurementBase *measurement)
VectorBranch< int > & m_trkHole_type
VectorBranch< int > & m_trkTriggerHit_trackIndex
ThreeVectorBranch m_trkTriggerHit_gPos
ScalarBranch< int > & m_runNumber
VectorBranch< float > & m_trkHit_rTrk
ScalarBranch< int > & m_trkHit_nMdtHits
VectorBranch< float > & m_trkHit_driftRadius
VectorBranch< unsigned int > & m_trkHit_id
VectorBranch< int > & m_trk_nRpcEtaHits
VectorBranch< float > & m_trkHit_tubeT0
VectorBranch< int > & m_trk_nOutliersHits
VectorBranch< float > & m_trk_z0
VectorBranch< float > & m_trkHit_lorTime
VectorBranch< int > & m_trk_nMdtHoles
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
MuonDetectorManager from the conditions store.
VectorBranch< int > & m_trk_nRpcPhiHits
VectorBranch< unsigned int > & m_trkHole_id
VectorBranch< int > & m_trkHole_trackIndex
ScalarBranch< int > & m_eventNumber
VectorBranch< float > & m_trkHit_tof
VectorBranch< float > & m_trkHit_tubeMeanAdc
VectorBranch< float > & m_trkHit_localAngle
ScalarBranch< int > & m_trkHole_nHoles
ScalarBranch< int > & m_rawTgc_nRTgc
VectorBranch< int > & m_rawMdt_adc
VectorBranch< float > & m_trkHit_pull
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_RpcPrepDataKey
VectorBranch< int > & m_trk_nTgcPhiHits
VectorBranch< float > & m_trk_eta
VectorBranch< int > & m_trkHit_calibStatus
VectorBranch< float > & m_trkHit_slewTime
ToolHandle< IMdtCalibrationTool > m_calibrationTool
pointer to MdtCalibSvc
VectorBranch< unsigned int > & m_rawTgc_id
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idToFixedIdTool
VectorBranch< int > & m_trkTriggerHit_type
VectorBranch< float > & m_trkTriggerHit_time
VectorBranch< float > & m_trkHit_bkgTime
virtual StatusCode finalize() override
VectorBranch< float > & m_trk_pt
VectorBranch< int > & m_trk_author
VectorBranch< int > & m_trk_nMdtHits
VectorBranch< int > & m_rawTgc_bcBitMap
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
VectorBranch< unsigned int > & m_rawMdt_id
VectorBranch< float > & m_trkHit_tempTime
ScalarBranch< int > & m_rawMdt_nRMdt
ScalarBranch< int > & m_timeStamp
ScalarBranch< int > & m_bcId
VectorBranch< float > & m_trkHit_driftTime
SG::ReadHandleKey< TrackCollection > m_TrkKey
virtual StatusCode execute() override
ScalarBranch< int > & m_rawRpc_nRRpc
VectorBranch< float > & m_trkHit_propTime
VectorBranch< int > & m_trk_nTgcEtaHits
VectorBranch< float > & m_trkHole_driftRadius
VectorBranch< float > & m_trkHit_distRO
VectorBranch< int > & m_trkHit_adc
VectorBranch< int > & m_rawMdt_tdc
VectorBranch< float > & m_trkHit_resi
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Property holding a SG store/key/clid from which a ReadHandle is made.
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
This class is the pure abstract base class for all fittable tracking measurements.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition RIO_OnTrack.h:70
represents the track state (measurement, material, fit parameters and quality) at a surface.
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Ensure that the ATLAS eigen extensions are properly loaded.