ATLAS Offline Software
Loading...
Searching...
No Matches
MuonHoughTransformTester.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef MUONVALR4_MuonHoughTransformTester_H
6#define MUONVALR4_MuonHoughTransformTester_H
7
8// Framework includes
10
13
14// EDM includes
17
20
21// muon includes
23
29
30
34
35
36namespace MuonValR4{
37
39 public:
41 virtual ~MuonHoughTransformTester() = default;
42
43 virtual StatusCode initialize() override;
44 virtual StatusCode execute(const EventContext& ctx) override;
45 virtual StatusCode finalize() override;
46
47 using TruthHitCol = std::unordered_set<const xAOD::MuonSimHit*>;
48
55 std::vector<const xAOD::MuonSegment*> matchedSegments;
57 std::vector<const MuonR4::SegmentSeed*> matchedSeeds;
58 std::vector<char> matchedSeedFoundSegment;
59 };
60
61 private:
62 std::vector<ObjectMatching> matchWithTruth(const MuonR4::SegmentSeedContainer& seedContainer,
63 const xAOD::MuonSegmentContainer& segmentContainer,
64 const xAOD::MuonSegmentContainer* truthSegments) const;
69 unsigned int countOnSameSide(const xAOD::MuonSegment& truthSeg,
70 const xAOD::MuonSegment& recoSeg) const;
71
79 const xAOD::MuonSegment* truthSegment);
81 void fillBucketInfo(const MuonR4::SpacePointBucket& bucket);
82
85 void fillSeedInfo(const ObjectMatching& obj);
88 void fillSegmentInfo(const ObjectMatching& obj);
89
90
91 void fillRecoSummary(const xAOD::MuonSegment& recoSegment);
92 void fillTruthSummary(const xAOD::MuonSegment& recoSegment);
93
94 // // output tree - allows to compare the sim and fast-digitised hits
95 MuonVal::MuonTesterTree m_tree{"MuonEtaHoughTest","MuonEtaHoughTransformTest"};
96
98 SG::ReadHandleKey<xAOD::MuonSegmentContainer> m_truthSegmentKey {this, "TruthSegmentKey","MuonTruthSegments", "truth segment container"};
102 Gaudi::Property<std::vector<std::string>> m_truthLinks{this, "TruthSegLinks", {"simHitLinks", "truthParticleLink"}};
104 SG::ReadHandleKey<xAOD::MuonSegmentContainer> m_recoSegKey{this, "SegmentKey", "MuonSegmentsFromR4"};
106 Gaudi::Property<std::vector<std::string>> m_recoSegLinks{this, "RecoSegLinks", {"truthSegmentLink", "truthParticleLink"}};
108 SG::ReadHandleKeyArray<MuonR4::SegmentSeedContainer> m_patternSeedKeys{this, "SegmentSeedKeys", {"MuonHoughStationSegmentSeeds"}};
110 SG::ReadHandleKeyArray<MuonR4::SpacePointContainer> m_spKeys{this, "SpacePointKeys", {"MuonSpacePoints"}};
112 ActsTrk::GeoContextReadKey_t m_geoCtxKey{this, "AlignmentKey", "ActsAlignment", "cond handle key"};
113
114 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
115
116
117 Gaudi::Property<bool> m_isMC{this, "isMC", false, "Toggle whether the job is ran on MC or not"};
118
119 Gaudi::Property<bool> m_writeSpacePoints{this, "writeSpacePoints", false,
120 "Toggle whether the particular space poitns shall be written"};
121
123
125 MuonVal::ScalarBranch<int>& m_out_chamberIndex{m_tree.newScalar<int>("chamberIndex")};
127 MuonVal::ScalarBranch<short>& m_out_stationSide{m_tree.newScalar<short>("stationSide")};
129 MuonVal::ScalarBranch<int>& m_out_stationPhi{m_tree.newScalar<int>("stationPhi")};
130
131 MuonVal::ScalarBranch<float>& m_out_bucketStart{m_tree.newScalar<float>("bucket_start", 1)};
132 MuonVal::ScalarBranch<float>& m_out_bucketEnd{m_tree.newScalar<float>("bucket_end", -1)};
133 MuonVal::ScalarBranch<float>& m_out_bucketEtaHitGap{m_tree.newScalar<float>("bucket_etaHitGap", 0.)};
134
136 std::shared_ptr<SpacePointTesterModule> m_spTester{};
138 MuonVal::MatrixBranch<unsigned char>& m_spMatchedToPattern{m_tree.newMatrix<unsigned char>("seed_matchedSpacPoins")};
140 MuonVal::MatrixBranch<unsigned char>& m_spMatchedToSegment{m_tree.newMatrix<unsigned char>("segment_matchedSpacePoints")};
141
143 MuonVal::ScalarBranch<unsigned char>& m_out_nSpacePoints{m_tree.newScalar<unsigned char>("bucket_nHits",0)};
145 MuonVal::ScalarBranch<unsigned char>& m_out_nPrecSpacePoints{m_tree.newScalar<unsigned char>("bucket_nPrecMeas",0)};
147 MuonVal::ScalarBranch<unsigned char>& m_out_nPhiSpacePoints{m_tree.newScalar<unsigned char>("bucket_nPhiMeass",0)};
148
150 MuonVal::ScalarBranch<unsigned char>& m_out_nTrueSpacePoints{m_tree.newScalar<unsigned char>("bucket_nTrueMeas",0)};
152 MuonVal::ScalarBranch<unsigned char>& m_out_nTruePrecSpacePoints{m_tree.newScalar<unsigned char>("bucket_nTruePrecMeas",0)};
154 MuonVal::ScalarBranch<unsigned char>& m_out_nTruePhiSpacePoints{m_tree.newScalar<unsigned char>("bucket_nTruePhiMeass",0)};
155
157
159 MuonVal::ScalarBranch<char> & m_out_hasTruth{m_tree.newScalar<char>("gen_exists",false)};
160
162 MuonVal::ScalarBranch<float>& m_out_gen_Eta{m_tree.newScalar<float>("gen_eta",-10.)};
163 MuonVal::ScalarBranch<float>& m_out_gen_Phi{m_tree.newScalar<float>("gen_phi",-10.)};
164 MuonVal::ScalarBranch<float>& m_out_gen_Pt{m_tree.newScalar<float>("gen_pt",-10.)};
165 MuonVal::ScalarBranch<short>& m_out_gen_Q{m_tree.newScalar<short>("gen_q", 0)};
167 MuonVal::ScalarBranch<float>& m_out_gen_y0{m_tree.newScalar<float>("gen_y0", 0.0)};
168 MuonVal::ScalarBranch<float>& m_out_gen_tanbeta{m_tree.newScalar<float>("gen_tanBeta", 0.0)};
169 MuonVal::ScalarBranch<float>& m_out_gen_tanalpha{m_tree.newScalar<float>("gen_tanAlpha", 0.0)};
170 MuonVal::ScalarBranch<float>& m_out_gen_x0{m_tree.newScalar<float>("gen_x0", 0.0)};
171 MuonVal::ScalarBranch<float>& m_out_gen_time{m_tree.newScalar<float>("gen_time", 0.0)};
172
173 MuonVal::ScalarBranch<int>& m_out_gen_truthOrigin{m_tree.newScalar<int>("gen_origin", -1)};
174 MuonVal::ScalarBranch<int>& m_out_gen_truthType{m_tree.newScalar<int>("gen_type", -1)};
175 MuonVal::ScalarBranch<float>& m_out_gen_truthBeta{m_tree.newScalar<float>("gen_beta", -1)};
177
179 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nPrecHits{m_tree.newScalar<unsigned short>("gen_nPrecHits",0)};
180 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nTrigEtaHits{m_tree.newScalar<unsigned short>("gen_nTrigEtaHits",0)};
181 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nTrigPhiHits{m_tree.newScalar<unsigned short>("gen_nTrigPhiHits",0)};
182 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nMmEtaHits{m_tree.newScalar<unsigned short>("gen_nMmEtaHits",0)};
183 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nMmStereoHits{m_tree.newScalar<unsigned short>("gen_nMmStereoHits",0)};
184 MuonVal::ScalarBranch<unsigned short>& m_out_gen_nStgcHits{m_tree.newScalar<unsigned short>("gen_nStgcHits",0)};
185
186
187 // truth segment size in the y direction
188 MuonVal::ScalarBranch<float>& m_out_gen_minYhit{m_tree.newScalar<float>("gen_hitMinY0", 1.0)};
189 MuonVal::ScalarBranch<float>& m_out_gen_maxYhit{m_tree.newScalar<float>("gen_hitMaxY0", -1.0)};
190
193 MuonVal::ScalarBranch<unsigned>& m_out_seed_n{m_tree.newScalar<unsigned>("nSeeds", 0)};
194 // the following are filled with one entry per seed
195
196 // does the seed have a phi-extension?
197 MuonVal::VectorBranch<unsigned short>& m_out_seed_hasPhiExtension{m_tree.newVector<unsigned short>("seed_hasPhiExtension", false)};
198 // parameters of the seed
199 MuonVal::VectorBranch<float>& m_out_seed_y0{m_tree.newVector<float>("seed_y0", 0.0)};
200 MuonVal::VectorBranch<float>& m_out_seed_x0{m_tree.newVector<float>("seed_x0", 0.0)};
201 MuonVal::VectorBranch<float>& m_out_seed_tanbeta{m_tree.newVector<float>("seed_tanBeta", 0.0)};
202 MuonVal::VectorBranch<float>& m_out_seed_tanalpha{m_tree.newVector<float>("seed_tanAlpha", 0.0)};
203
204 // seed size in the y direction
205 MuonVal::VectorBranch<float>& m_out_seed_minYhit{m_tree.newVector<float>("seed_hitMinY0", 1.0)};
206 MuonVal::VectorBranch<float>& m_out_seed_maxYhit{m_tree.newVector<float>("seed_hitMaxY0", -1.0)};
207 // hit counts on the seed
208 MuonVal::VectorBranch<unsigned short>& m_out_seed_nPrecHits{m_tree.newVector<unsigned short>("seed_nPrecHits", 0)};
209 MuonVal::VectorBranch<unsigned short>& m_out_seed_nEtaHits{m_tree.newVector<unsigned short>("seed_nTrigEtaHits", 0)};
210 MuonVal::VectorBranch<unsigned short>& m_out_seed_nPhiHits{m_tree.newVector<unsigned short>("seed_nTrigPhiHits", 0)};
211
212 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTruePrecHits{m_tree.newVector<unsigned short>("seed_nTruePrecHits", 0)};
213 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTrueEtaHits{m_tree.newVector<unsigned short>("seed_nTrueTrigEtaHits", 0)};
214 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTruePhiHits{m_tree.newVector<unsigned short>("seed_nTrueTrigPhiHits", 0)};
215
216 MuonVal::VectorBranch<unsigned short>& m_out_seed_nMmEtaHits{m_tree.newVector<unsigned short>("seed_nMmEtaHits", 0)};
217 MuonVal::VectorBranch<unsigned short>& m_out_seed_nMmStereoHits{m_tree.newVector<unsigned short>("seed_nMmStereoHits", 0)};
218
219 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTrueMmEtaHits{m_tree.newVector<unsigned short>("seed_nMmTrueEtaHits", 0)};
220 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTrueMmStereoHits{m_tree.newVector<unsigned short>("seed_nMmTrueStereoHits", 0)};
221
222 MuonVal::VectorBranch<unsigned short>& m_out_seed_nsTgcStripHits{m_tree.newVector<unsigned short>("seed_nStgcStripHits", 0)};
223 MuonVal::VectorBranch<unsigned short>& m_out_seed_nsTgcWireHits{m_tree.newVector<unsigned short>("seed_nStgcWireHits", 0)};
224 MuonVal::VectorBranch<unsigned short>& m_out_seed_nsTgcPadHits{m_tree.newVector<unsigned short>("seed_nStgcPadHits", 0)};
225
226 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTruesTgcStripHits{m_tree.newVector<unsigned short>("seed_nStgcTrueStripHits", 0)};
227 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTruesTgcWireHits{m_tree.newVector<unsigned short>("seed_nStgcTrueWireHits", 0)};
228 MuonVal::VectorBranch<unsigned short>& m_out_seed_nTruesTgcPadHits{m_tree.newVector<unsigned short>("seed_nStgcTruePadHits", 0)};
229
230 MuonVal::VectorBranch<unsigned char> & m_out_seed_ledToSegment{m_tree.newVector<unsigned char>("seed_becameSegment",false)};
231
233
234 // count of segments
235 MuonVal::ScalarBranch<unsigned>& m_out_segment_n{m_tree.newScalar<unsigned>("nSegments", 0)};
236 // the following are filled with one entry per segment
237
238 // fit metrics
239 MuonVal::VectorBranch<float>& m_out_segment_chi2{m_tree.newVector<float>("segment_chi2", -1.)};
240 MuonVal::VectorBranch<uint16_t>& m_out_segment_nDoF{m_tree.newVector<uint16_t>("segment_nDoF", 0)};
241 MuonVal::VectorBranch<char>& m_out_segment_hasTimeFit {m_tree.newVector<char>("segment_hasTimeFit", false)};
242 MuonVal::VectorBranch<uint16_t>& m_out_segment_fitIter {m_tree.newVector<uint16_t>("segment_nIter", 0)};
243
244 // segment parameters
245 MuonVal::VectorBranch<float>& m_out_segment_y0{m_tree.newVector<float>("segment_y0", 0.)};
246 MuonVal::VectorBranch<float>& m_out_segment_x0{m_tree.newVector<float>("segment_x0", 0.)};
247 MuonVal::VectorBranch<float>& m_out_segment_theta{m_tree.newVector<float>("segment_theta", 0.)};
248 MuonVal::VectorBranch<float>& m_out_segment_phi{m_tree.newVector<float>("segment_phi", 0.)};
249 MuonVal::VectorBranch<float>& m_out_segment_time{m_tree.newVector<float>("segment_t0", 0.)};
250 // segment covariance
251 using FloatVecBrPtr_t = std::shared_ptr<MuonVal::VectorBranch<float>>;
252 std::array<FloatVecBrPtr_t, Acts::sumUpToN(Acts::toUnderlying(MuonR4::SegmentFit::ParamDefs::nPars))> m_segmentCov{};
253
255 MuonVal::VectorBranch<unsigned short>& m_out_segment_nPrecHits{m_tree.newVector<unsigned short>("segment_nPrecHits", 0)};
256 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigEtaHits{m_tree.newVector<unsigned short>("segment_nTrigEtaHits", 0)};
257 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigPhiHits{m_tree.newVector<unsigned short>("segment_nTrigPhiHits", 0)};
258
259 MuonVal::VectorBranch<unsigned short>& m_out_segment_nPrecOutliers{m_tree.newVector<unsigned short>("segment_nPrecOutliers", 0)};
260 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigEtaOutliers{m_tree.newVector<unsigned short>("segment_nTrigEtaOutliers", 0)};
261 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigPhiOutliers{m_tree.newVector<unsigned short>("segment_nTrigPhiOutliers", 0)};
262
263 MuonVal::VectorBranch<unsigned short>& m_out_segment_nPrecHoles{m_tree.newVector<unsigned short>("segment_nPrecHoles", 0)};
264 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigEtaHoles{m_tree.newVector<unsigned short>("segment_nTrigEtaHoles", 0)};
265 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrigPhiHoles{m_tree.newVector<unsigned short>("segment_nTrigPhiHoles", 0)};
267 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTruePrecHits{m_tree.newVector<unsigned short>("segment_nTruePrecHits", 0)};
268 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrueTrigEtaHits{m_tree.newVector<unsigned short>("segment_nTrueTrigEtaHits", 0)};
269 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrueTrigPhiHits{m_tree.newVector<unsigned short>("segment_nTrueTrigPhiHits", 0)};
270
271 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTruePrecOutliers{m_tree.newVector<unsigned short>("segment_nTruePrecOutliers", 0)};
272 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrueTrigEtaOutliers{m_tree.newVector<unsigned short>("segment_nTrueTrigEtaOutliers", 0)};
273 MuonVal::VectorBranch<unsigned short>& m_out_segment_nTrueTrigPhiOutliers{m_tree.newVector<unsigned short>("segment_nTrueTrigPhiOutliers", 0)};
274
276 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmEtaHits{m_tree.newVector<unsigned short>("segment_nMmEtaHits", 0)};
277 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmStereoHits{m_tree.newVector<unsigned short>("segment_nMmStereoHits", 0)};
278 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcStripHits{m_tree.newVector<unsigned short>("segment_nStgcStripHits", 0)};
279 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcWireHits{m_tree.newVector<unsigned short>("segment_nStgcWireHits", 0)};
280 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcPadHits{m_tree.newVector<unsigned short>("segment_nStgcPadHits", 0)};
281
282 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmTrueEtaHits{m_tree.newVector<unsigned short>("segment_nMmTrueEtaHits", 0)};
283 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmTrueStereoHits{m_tree.newVector<unsigned short>("segment_nMmTrueStereoHits", 0)};
284 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTrueStripHits{m_tree.newVector<unsigned short>("segment_nStgcTrueStripHits", 0)};
285 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTrueWireHits{m_tree.newVector<unsigned short>("segment_nStgcTrueWireHits", 0)};
286 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTruePadHits{m_tree.newVector<unsigned short>("segment_nStgcTruePadHits", 0)};
287
288 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmEtaOutliers{m_tree.newVector<unsigned short>("segment_nMmEtaOutliers", 0)};
289 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmStereoOutliers{m_tree.newVector<unsigned short>("segment_nMmStereoOutliers", 0)};
290 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcStripOutliers{m_tree.newVector<unsigned short>("segment_nStgcStripOutliers", 0)};
291 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcWireOutliers{m_tree.newVector<unsigned short>("segment_nStgcWireOutliers", 0)};
292 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcPadOutliers{m_tree.newVector<unsigned short>("segment_nStgcPadOutliers", 0)};
293
294 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmTrueEtaOutliers{m_tree.newVector<unsigned short>("segment_nMmTrueEtaOutliers", 0)};
295 MuonVal::VectorBranch<unsigned short>& m_out_segment_nMmTrueStereoOutliers{m_tree.newVector<unsigned short>("segment_nMmTrueStereoOutliers", 0)};
296 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTrueStripOutliers{m_tree.newVector<unsigned short>("segment_nStgcTrueStripOutliers", 0)};
297 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTrueWireOutliers{m_tree.newVector<unsigned short>("segment_nStgcTrueWireOutliers", 0)};
298 MuonVal::VectorBranch<unsigned short>& m_out_segment_nSTgcTruePadOutliers{m_tree.newVector<unsigned short>("segment_nStgcTruePadOutliers", 0)};
299
300 // segment size in the y direction
301 MuonVal::VectorBranch<float>& m_out_segment_minYhit{m_tree.newVector<float>("segment_hitMinY0", 1.0)};
302 MuonVal::VectorBranch<float>& m_out_segment_maxYhit{m_tree.newVector<float>("segment_hitMinY0", -1.0)};
303 MuonVal::VectorBranch<float>& m_out_segment_minTrueYhit{m_tree.newVector<float>("segment_trueHitMinY0", 1.0)};
304 MuonVal::VectorBranch<float>& m_out_segment_maxTrueYhit{m_tree.newVector<float>("segment_trueHitMaxY0", -1.0)};
305
307 ToolHandle<MuonValR4::IPatternVisualizationTool> m_visionTool{this, "VisualizationTool", ""};
308
310
311 };
312}
313
314#endif // MUONFASTDIGITEST_MUONVALR4_MuonHoughTransformTester_H
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
A spectrometer sector forms the envelope of all chambers that are placed in the same MS sector & laye...
: The muon space point bucket represents a collection of points that will bre processed together in t...
MuonVal::ScalarBranch< float > & m_out_gen_tanalpha
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmStereoHits
MuonVal::ScalarBranch< float > & m_out_gen_Pt
MuonVal::ScalarBranch< unsigned char > & m_out_nTruePhiSpacePoints
Number of phi hits in the bucket.
MuonVal::VectorBranch< float > & m_out_seed_maxYhit
MuonVal::ScalarBranch< float > & m_out_gen_truthBeta
ToolHandle< MuonValR4::IPatternVisualizationTool > m_visionTool
Pattern visualization tool.
MuonVal::ScalarBranch< unsigned > & m_out_segment_n
========== Segment block: Filled when we have one or multiple segments =============
void fillRecoSummary(const xAOD::MuonSegment &recoSegment)
std::shared_ptr< MuonVal::VectorBranch< float > > FloatVecBrPtr_t
MuonVal::VectorBranch< unsigned char > & m_out_seed_ledToSegment
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigPhiOutliers
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTrueEtaHits
const MuonGMR4::MuonDetectorManager * m_detMgr
MuonVal::VectorBranch< char > & m_out_segment_hasTimeFit
void fillTruthInfo(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment *truthSegment)
Fill the associated truth information into the tree.
std::array< FloatVecBrPtr_t, Acts::sumUpToN(Acts::toUnderlying(MuonR4::SegmentFit::ParamDefs::nPars))> m_segmentCov
virtual ~MuonHoughTransformTester()=default
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadHandleKeyArray< MuonR4::SpacePointContainer > m_spKeys
List of the space point containers in the event legacy + NSW containers.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTrueMmStereoHits
MuonVal::VectorBranch< unsigned short > & m_out_seed_nMmEtaHits
MuonVal::VectorBranch< float > & m_out_seed_x0
std::vector< ObjectMatching > matchWithTruth(const MuonR4::SegmentSeedContainer &seedContainer, const xAOD::MuonSegmentContainer &segmentContainer, const xAOD::MuonSegmentContainer *truthSegments) const
MuonVal::ScalarBranch< float > & m_out_bucketEtaHitGap
SG::ReadHandleKey< xAOD::MuonSegmentContainer > m_recoSegKey
Key to the xAOD::MuonSegment container.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigPhiHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTruePadHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTruePrecOutliers
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTruePrecHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcPadOutliers
SG::ReadHandleKeyArray< MuonR4::SegmentSeedContainer > m_patternSeedKeys
List of the two segment seed containers from which the segments are buiit (Complets the pattern findi...
MuonVal::VectorBranch< float > & m_out_segment_maxTrueYhit
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTrueStripHits
MuonVal::VectorBranch< float > & m_out_seed_y0
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nStgcHits
MuonVal::ScalarBranch< unsigned char > & m_out_nPhiSpacePoints
Number of phi hits in the bucket.
MuonVal::ScalarBranch< char > & m_out_hasTruth
======= Truth block: Filled if we have a truth match. ============
MuonVal::VectorBranch< unsigned short > & m_out_seed_hasPhiExtension
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nMmEtaHits
MuonVal::MatrixBranch< unsigned char > & m_spMatchedToPattern
Branch indicating which space points in the tree are associated to the i-th pattern.
MuonVal::ScalarBranch< int > & m_out_gen_truthType
MuonVal::ScalarBranch< int > & m_out_gen_truthPdgId
void fillSegmentInfo(const ObjectMatching &obj)
Fill the info assciated to the segment.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nsTgcStripHits
MuonVal::ScalarBranch< int > & m_out_stationPhi
phi index of the station
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTruePadOutliers
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTruePrecHits
True matched hit counters.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTrueWireHits
MuonVal::ScalarBranch< float > & m_out_bucketEnd
MuonVal::ScalarBranch< unsigned char > & m_out_nTrueSpacePoints
Number of all space points in the bucket.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nEtaHits
void fillChamberInfo(const MuonGMR4::SpectrometerSector *chamber)
Fill the current chamber info into the output.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigPhiHoles
MuonVal::VectorBranch< float > & m_out_segment_time
void fillBucketInfo(const MuonR4::SpacePointBucket &bucket)
Fill the hit summary info of the associated bucket.
MuonVal::ScalarBranch< short > & m_out_gen_Q
MuonVal::MatrixBranch< unsigned char > & m_spMatchedToSegment
Branch indicating which space points in the tree are associated to the i-th segment.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTrueStripOutliers
MuonVal::VectorBranch< unsigned short > & m_out_segment_nPrecOutliers
void fillTruthSummary(const xAOD::MuonSegment &recoSegment)
MuonVal::ScalarBranch< float > & m_out_gen_y0
Truth - segment parameters.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmStereoOutliers
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigEtaHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcStripOutliers
MuonVal::ScalarBranch< unsigned char > & m_out_nPrecSpacePoints
Number of precision hits in the bucket.
MuonVal::ScalarBranch< unsigned char > & m_out_nTruePrecSpacePoints
Number of precision hits in the bucket.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTruesTgcPadHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigEtaHoles
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcWireOutliers
SG::ReadDecorHandleKeyArray< xAOD::MuonSegmentContainer > m_truthSegLinkKeys
Declare the dependencies on the decorations.
MuonVal::ScalarBranch< unsigned > & m_out_seed_n
========== Seed block: Filled when we have one or multiple seeds ============= seed count
MuonVal::VectorBranch< float > & m_out_segment_chi2
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmTrueEtaOutliers
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTruePhiHits
SG::ReadHandleKey< xAOD::MuonSegmentContainer > m_truthSegmentKey
Key to the truth segment.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nMmStereoHits
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nMmStereoHits
MuonVal::ScalarBranch< float > & m_out_gen_Phi
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrueTrigEtaHits
MuonVal::VectorBranch< unsigned short > & m_out_seed_nsTgcWireHits
MuonVal::VectorBranch< float > & m_out_seed_minYhit
ActsTrk::GeoContextReadKey_t m_geoCtxKey
Tracking geometry context.
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTrueMmEtaHits
MuonVal::ScalarBranch< int > & m_out_gen_truthOrigin
MuonVal::VectorBranch< float > & m_out_seed_tanbeta
MuonVal::VectorBranch< float > & m_out_segment_phi
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrueTrigPhiOutliers
MuonVal::VectorBranch< unsigned short > & m_out_seed_nPrecHits
MuonVal::ScalarBranch< float > & m_out_gen_maxYhit
MuonVal::ScalarBranch< float > & m_out_gen_minYhit
Gaudi::Property< std::vector< std::string > > m_truthLinks
Name of the decorations for the truth segment.
MuonVal::VectorBranch< float > & m_out_seed_tanalpha
MuonVal::VectorBranch< unsigned short > & m_out_seed_nsTgcPadHits
MuonVal::VectorBranch< float > & m_out_segment_theta
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmTrueStereoHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrigEtaOutliers
MuonVal::ScalarBranch< int > & m_out_chamberIndex
====== Common block: Filled for all entries ===========
MuonVal::ScalarBranch< unsigned char > & m_out_nSpacePoints
Number of all space points in the bucket.
std::unordered_set< const xAOD::MuonSimHit * > TruthHitCol
Gaudi::Property< std::vector< std::string > > m_recoSegLinks
name of the truth link decorations for the reco segment container
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
MuonVal::VectorBranch< float > & m_out_segment_minYhit
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmEtaOutliers
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nPrecHits
Truth - hit count summary.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmTrueStereoOutliers
void fillSeedInfo(const ObjectMatching &obj)
Fill the info associated to the seed.
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
MuonVal::VectorBranch< float > & m_out_segment_x0
MuonVal::ScalarBranch< float > & m_out_gen_Eta
global particle properties
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcPadHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmEtaHits
NSW hit counters.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrueTrigPhiHits
MuonVal::VectorBranch< float > & m_out_segment_maxYhit
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcTrueWireOutliers
MuonVal::ScalarBranch< float > & m_out_bucketStart
MuonVal::VectorBranch< float > & m_out_segment_minTrueYhit
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcWireHits
MuonVal::VectorBranch< unsigned short > & m_out_seed_nPhiHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nPrecHits
Hit counts on segment.
MuonVal::ScalarBranch< float > & m_out_gen_time
MuonVal::ScalarBranch< float > & m_out_gen_x0
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTruesTgcWireHits
unsigned int countOnSameSide(const xAOD::MuonSegment &truthSeg, const xAOD::MuonSegment &recoSeg) const
Calculates how many measurements from the segment fit have the same drift sign as when evaluated with...
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nTrigEtaHits
MuonVal::ScalarBranch< short > & m_out_stationSide
+1 for A-, -1 of C-side
MuonVal::VectorBranch< unsigned short > & m_out_segment_nMmTrueEtaHits
MuonVal::ScalarBranch< float > & m_out_gen_tanbeta
MuonVal::VectorBranch< uint16_t > & m_out_segment_nDoF
MuonVal::VectorBranch< uint16_t > & m_out_segment_fitIter
MuonVal::VectorBranch< float > & m_out_segment_y0
MuonVal::ScalarBranch< unsigned short > & m_out_gen_nTrigPhiHits
std::shared_ptr< SpacePointTesterModule > m_spTester
Branch dumping all the space points from the difference buckets.
MuonVal::VectorBranch< unsigned short > & m_out_segment_nTrueTrigEtaOutliers
MuonVal::VectorBranch< unsigned short > & m_out_seed_nTruesTgcStripHits
MuonVal::VectorBranch< unsigned short > & m_out_segment_nPrecHoles
MuonVal::VectorBranch< unsigned short > & m_out_segment_nSTgcStripHits
Property holding a SG store/key/clid from which a ReadHandle is made.
SG::ReadHandleKey< GeometryContext > GeoContextReadKey_t
Abrivate the ReadHandleKey to declare the data dependency on the Geometry context.
DataVector< SegmentSeed > SegmentSeedContainer
Lightweight algorithm to read xAOD MDT sim hits and (fast-digitised) drift circles from SG and fill a...
DecorHandleKeyArray< ReadDecorHandle< T, S >, ReadDecorHandleKey< T >, Gaudi::DataHandle::Reader > ReadDecorHandleKeyArray
HandleKeyArray< ReadHandle< T >, ReadHandleKey< T >, Gaudi::DataHandle::Reader > ReadHandleKeyArray
MuonSegmentContainer_v1 MuonSegmentContainer
Definition of the current "MuonSegment container version".
MuonSegment_v1 MuonSegment
Reference the current persistent version:
std::vector< const xAOD::MuonSegment * > matchedSegments
All segments matched to this object.
const xAOD::MuonSegment * truthSegment
Truth segment for reference.
const MuonGMR4::SpectrometerSector * chamber
Associated chamber.
std::vector< const MuonR4::SegmentSeed * > matchedSeeds
All seeds matched to this object.