ATLAS Offline Software
Loading...
Searching...
No Matches
TgcL0RootOutputAlg.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef L0MUONS1TGCVALIDATION_TGCL0ROOTOUTPUTALG_H
5#define L0MUONS1TGCVALIDATION_TGCL0ROOTOUTPUTALG_H
6
11
12#include <cstdint>
13
14namespace L0Muon {
15
23 public:
25
26 virtual StatusCode initialize() override;
27 virtual StatusCode execute(const EventContext& ctx) override;
28 virtual StatusCode finalize() override;
29
30 private:
31 void copyToBranches(const TgcL0ValidationEvent& input);
32
34 this, "InputKey", "L0MuonTGCValidationEvent",
35 "Calculated event-local truth-validation data"};
36 Gaudi::Property<bool> m_failOnInvalidData{
37 this, "FailOnInvalidData", true,
38 "Fail instead of skipping structurally inconsistent validation data"};
39
40 MuonVal::MuonTesterTree m_tree{"truthValidation", "L0MUONTGCVALID"};
41
43 m_tree.newScalar<std::uint32_t>("runNumber")};
45 m_tree.newScalar<std::uint64_t>("eventNumber")};
47 m_tree.newScalar<std::uint32_t>("lumiBlock")};
49 m_tree.newScalar<std::uint32_t>("bcid")};
50
51#define TGCL0_VECTOR_BRANCH(TYPE, MEMBER, NAME) \
52 MuonVal::VectorBranch<TYPE>& MEMBER{m_tree.newVector<TYPE>(NAME)}
53
54 TGCL0_VECTOR_BRANCH(int, m_truthPdgId, "truthPdgId");
55 TGCL0_VECTOR_BRANCH(int, m_truthBarcode, "truthBarcode");
56 TGCL0_VECTOR_BRANCH(float, m_truthPt, "truthPt");
57 TGCL0_VECTOR_BRANCH(float, m_truthEta, "truthEta");
58 TGCL0_VECTOR_BRANCH(float, m_truthPhi, "truthPhi");
59 TGCL0_VECTOR_BRANCH(float, m_truthCharge, "truthCharge");
60 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthExtrapolatedStationMask,
61 "truthExtrapolatedStationMask");
62 TGCL0_VECTOR_BRANCH(float, m_truthM1Eta, "truthM1Eta");
63 TGCL0_VECTOR_BRANCH(float, m_truthM1Phi, "truthM1Phi");
64 TGCL0_VECTOR_BRANCH(float, m_truthM2Eta, "truthM2Eta");
65 TGCL0_VECTOR_BRANCH(float, m_truthM2Phi, "truthM2Phi");
66 TGCL0_VECTOR_BRANCH(float, m_truthM3Eta, "truthM3Eta");
67 TGCL0_VECTOR_BRANCH(float, m_truthM3Phi, "truthM3Phi");
68 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthMatched, "truthMatched");
69 TGCL0_VECTOR_BRANCH(int, m_truthMatchedCandidateIndex,
70 "truthMatchedCandidateIndex");
71 TGCL0_VECTOR_BRANCH(float, m_truthMatchMeanDeltaR,
72 "truthMatchMeanDeltaR");
73 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthUnmatchedReason,
74 "truthUnmatchedReason");
75 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthFinalCandidateMatched,
76 "truthFinalCandidateMatched");
77 TGCL0_VECTOR_BRANCH(int, m_truthMatchedFinalCandidateIndex,
78 "truthMatchedFinalCandidateIndex");
79 TGCL0_VECTOR_BRANCH(float, m_truthFinalCandidateMatchDeltaR,
80 "truthFinalCandidateMatchDeltaR");
81 TGCL0_VECTOR_BRANCH(std::uint8_t,
82 m_truthFinalCandidateUnmatchedReason,
83 "truthFinalCandidateUnmatchedReason");
84 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthWireSegmentMatched,
85 "truthWireSegmentMatched");
86 TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthStripSegmentMatched,
87 "truthStripSegmentMatched");
88 TGCL0_VECTOR_BRANCH(int, m_truthMatchedWireSegmentIndex,
89 "truthMatchedWireSegmentIndex");
90 TGCL0_VECTOR_BRANCH(int, m_truthMatchedStripSegmentIndex,
91 "truthMatchedStripSegmentIndex");
92 TGCL0_VECTOR_BRANCH(float, m_truthWireSegmentMatchResidual,
93 "truthWireSegmentMatchResidual");
94 TGCL0_VECTOR_BRANCH(float, m_truthStripSegmentMatchResidual,
95 "truthStripSegmentMatchResidual");
96
97 TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentSubdetectorId,
98 "segmentSubdetectorId");
99 TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentTriggerSector,
100 "segmentTriggerSector");
101 TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentBcTag, "segmentBcTag");
102 TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentProjection,
103 "segmentProjection");
104 TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentStationMask,
105 "segmentStationMask");
106 TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentSummedQuality,
107 "segmentSummedQuality");
108 TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentNStations,
109 "segmentNStations");
110 TGCL0_VECTOR_BRANCH(float, m_segmentEta, "segmentEta");
111 TGCL0_VECTOR_BRANCH(float, m_segmentPhi, "segmentPhi");
112 TGCL0_VECTOR_BRANCH(float, m_segmentResidual, "segmentResidual");
113 TGCL0_VECTOR_BRANCH(float, m_segmentOutputResidual,
114 "segmentOutputResidual");
115 TGCL0_VECTOR_BRANCH(float, m_segmentConsistency, "segmentConsistency");
116 TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentPivotChannel,
117 "segmentPivotChannel");
118 TGCL0_VECTOR_BRANCH(int, m_segmentTruthIndex, "segmentTruthIndex");
119 TGCL0_VECTOR_BRANCH(float, m_segmentTruthMatchResidual,
120 "segmentTruthMatchResidual");
121
122 TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateSubdetectorId,
123 "candidateSubdetectorId");
124 TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateTriggerSector,
125 "candidateTriggerSector");
126 TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateReadoutSector,
127 "candidateReadoutSector");
128 TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateBcTag, "candidateBcTag");
129 TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateStationMask,
130 "candidateStationMask");
131 TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateWireStationMask,
132 "candidateWireStationMask");
133 TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateStripStationMask,
134 "candidateStripStationMask");
135 TGCL0_VECTOR_BRANCH(float, m_candidateEta, "candidateEta");
136 TGCL0_VECTOR_BRANCH(float, m_candidatePhi, "candidatePhi");
137 TGCL0_VECTOR_BRANCH(float, m_candidateDeltaTheta, "candidateDeltaTheta");
138 TGCL0_VECTOR_BRANCH(float, m_candidateDeltaPhi, "candidateDeltaPhi");
139 TGCL0_VECTOR_BRANCH(float, m_candidatePt, "candidatePt");
140 TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateThreshold,
141 "candidateThreshold");
142 TGCL0_VECTOR_BRANCH(std::int8_t, m_candidateCharge, "candidateCharge");
143 TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateGoodMagneticField,
144 "candidateGoodMagneticField");
145 TGCL0_VECTOR_BRANCH(int, m_candidateTruthIndex, "candidateTruthIndex");
146
147 TGCL0_VECTOR_BRANCH(int, m_finalCandidateSourceCandidateIndex,
148 "finalCandidateSourceCandidateIndex");
149 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateReferenceStation,
150 "finalCandidateReferenceStation");
151 TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateSubdetectorId,
152 "finalCandidateSubdetectorId");
153 TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateTriggerSector,
154 "finalCandidateTriggerSector");
155 TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateBcTag,
156 "finalCandidateBcTag");
157 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateTcId,
158 "finalCandidateTcId");
159 TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateRawEta,
160 "finalCandidateRawEta");
161 TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateRawPhi,
162 "finalCandidateRawPhi");
163 TGCL0_VECTOR_BRANCH(float, m_finalCandidateEta, "finalCandidateEta");
164 TGCL0_VECTOR_BRANCH(float, m_finalCandidatePhi, "finalCandidatePhi");
165 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidatePtCode,
166 "finalCandidatePtCode");
167 TGCL0_VECTOR_BRANCH(float, m_finalCandidatePt, "finalCandidatePt");
168 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateThreshold,
169 "finalCandidateThreshold");
170 TGCL0_VECTOR_BRANCH(std::int8_t, m_finalCandidateCharge,
171 "finalCandidateCharge");
172 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateInnerCoincidence,
173 "finalCandidateInnerCoincidence");
174 TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateGoodMagneticField,
175 "finalCandidateGoodMagneticField");
176 TGCL0_VECTOR_BRANCH(int, m_finalCandidateTruthIndex,
177 "finalCandidateTruthIndex");
178 TGCL0_VECTOR_BRANCH(float, m_finalCandidateTruthMatchDeltaR,
179 "finalCandidateTruthMatchDeltaR");
180
181 TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicInputCandidateIndex,
182 "sectorLogicInputCandidateIndex");
183 TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicCandWord,
184 "sectorLogicCandWord");
185 TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicCandExtraWord,
186 "sectorLogicCandExtraWord");
187 TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicBoardId,
188 "sectorLogicBoardId");
189 TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicFiberId,
190 "sectorLogicFiberId");
191 TGCL0_VECTOR_BRANCH(int, m_sectorLogicBcidOffset,
192 "sectorLogicBcidOffset");
193 TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicVeto,
194 "sectorLogicVeto");
195
196#undef TGCL0_VECTOR_BRANCH
197};
198
199} // namespace L0Muon
200
201#endif
Property holding a SG store/key/clid from which a ReadHandle is made.
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
MuonTester backend for event-level TGC truth-validation data.
TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateBcTag, "candidateBcTag")
TGCL0_VECTOR_BRANCH(float, m_segmentResidual, "segmentResidual")
TGCL0_VECTOR_BRANCH(int, m_truthMatchedStripSegmentIndex, "truthMatchedStripSegmentIndex")
TGCL0_VECTOR_BRANCH(float, m_truthMatchMeanDeltaR, "truthMatchMeanDeltaR")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateWireStationMask, "candidateWireStationMask")
MuonVal::ScalarBranch< std::uint32_t > & m_bcid
TGCL0_VECTOR_BRANCH(float, m_segmentTruthMatchResidual, "segmentTruthMatchResidual")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthWireSegmentMatched, "truthWireSegmentMatched")
TGCL0_VECTOR_BRANCH(float, m_truthCharge, "truthCharge")
TGCL0_VECTOR_BRANCH(int, m_truthMatchedWireSegmentIndex, "truthMatchedWireSegmentIndex")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateSubdetectorId, "finalCandidateSubdetectorId")
TGCL0_VECTOR_BRANCH(int, m_truthBarcode, "truthBarcode")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateStripStationMask, "candidateStripStationMask")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateStationMask, "candidateStationMask")
TGCL0_VECTOR_BRANCH(float, m_truthStripSegmentMatchResidual, "truthStripSegmentMatchResidual")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateRawEta, "finalCandidateRawEta")
TGCL0_VECTOR_BRANCH(float, m_finalCandidateEta, "finalCandidateEta")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateRawPhi, "finalCandidateRawPhi")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateGoodMagneticField, "finalCandidateGoodMagneticField")
TGCL0_VECTOR_BRANCH(float, m_segmentOutputResidual, "segmentOutputResidual")
virtual StatusCode initialize() override
TGCL0_VECTOR_BRANCH(float, m_finalCandidateTruthMatchDeltaR, "finalCandidateTruthMatchDeltaR")
TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicCandWord, "sectorLogicCandWord")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthFinalCandidateMatched, "truthFinalCandidateMatched")
TGCL0_VECTOR_BRANCH(int, m_truthMatchedCandidateIndex, "truthMatchedCandidateIndex")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateTriggerSector, "candidateTriggerSector")
TGCL0_VECTOR_BRANCH(float, m_truthPhi, "truthPhi")
TGCL0_VECTOR_BRANCH(int, m_finalCandidateSourceCandidateIndex, "finalCandidateSourceCandidateIndex")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentTriggerSector, "segmentTriggerSector")
MuonVal::ScalarBranch< std::uint32_t > & m_runNumber
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateReferenceStation, "finalCandidateReferenceStation")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthExtrapolatedStationMask, "truthExtrapolatedStationMask")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentNStations, "segmentNStations")
TGCL0_VECTOR_BRANCH(float, m_truthM3Phi, "truthM3Phi")
TGCL0_VECTOR_BRANCH(int, m_finalCandidateTruthIndex, "finalCandidateTruthIndex")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateGoodMagneticField, "candidateGoodMagneticField")
TGCL0_VECTOR_BRANCH(float, m_finalCandidatePhi, "finalCandidatePhi")
TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicCandExtraWord, "sectorLogicCandExtraWord")
MuonVal::ScalarBranch< std::uint32_t > & m_lumiBlock
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateInnerCoincidence, "finalCandidateInnerCoincidence")
TGCL0_VECTOR_BRANCH(int, m_sectorLogicBcidOffset, "sectorLogicBcidOffset")
TGCL0_VECTOR_BRANCH(float, m_truthPt, "truthPt")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthUnmatchedReason, "truthUnmatchedReason")
TGCL0_VECTOR_BRANCH(int, m_truthPdgId, "truthPdgId")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthFinalCandidateUnmatchedReason, "truthFinalCandidateUnmatchedReason")
TGCL0_VECTOR_BRANCH(float, m_segmentPhi, "segmentPhi")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicBoardId, "sectorLogicBoardId")
TGCL0_VECTOR_BRANCH(float, m_candidatePt, "candidatePt")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicVeto, "sectorLogicVeto")
TGCL0_VECTOR_BRANCH(int, m_truthMatchedFinalCandidateIndex, "truthMatchedFinalCandidateIndex")
TGCL0_VECTOR_BRANCH(float, m_truthM1Phi, "truthM1Phi")
Gaudi::Property< bool > m_failOnInvalidData
TGCL0_VECTOR_BRANCH(float, m_truthWireSegmentMatchResidual, "truthWireSegmentMatchResidual")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateBcTag, "finalCandidateBcTag")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_finalCandidateTriggerSector, "finalCandidateTriggerSector")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidatePtCode, "finalCandidatePtCode")
TGCL0_VECTOR_BRANCH(std::int8_t, m_candidateCharge, "candidateCharge")
TGCL0_VECTOR_BRANCH(float, m_truthM1Eta, "truthM1Eta")
TGCL0_VECTOR_BRANCH(float, m_truthM3Eta, "truthM3Eta")
TGCL0_VECTOR_BRANCH(int, m_candidateTruthIndex, "candidateTruthIndex")
TGCL0_VECTOR_BRANCH(float, m_segmentEta, "segmentEta")
TGCL0_VECTOR_BRANCH(std::uint32_t, m_sectorLogicInputCandidateIndex, "sectorLogicInputCandidateIndex")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthStripSegmentMatched, "truthStripSegmentMatched")
MuonVal::MuonTesterTree m_tree
MuonVal::ScalarBranch< std::uint64_t > & m_eventNumber
TGCL0_VECTOR_BRANCH(float, m_truthEta, "truthEta")
TGCL0_VECTOR_BRANCH(float, m_finalCandidatePt, "finalCandidatePt")
SG::ReadHandleKey< TgcL0ValidationEvent > m_inputKey
TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentSummedQuality, "segmentSummedQuality")
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
TGCL0_VECTOR_BRANCH(std::int8_t, m_finalCandidateCharge, "finalCandidateCharge")
TGCL0_VECTOR_BRANCH(float, m_truthM2Phi, "truthM2Phi")
TGCL0_VECTOR_BRANCH(float, m_truthFinalCandidateMatchDeltaR, "truthFinalCandidateMatchDeltaR")
TGCL0_VECTOR_BRANCH(float, m_truthM2Eta, "truthM2Eta")
TGCL0_VECTOR_BRANCH(float, m_candidateDeltaPhi, "candidateDeltaPhi")
AthHistogramAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateSubdetectorId, "candidateSubdetectorId")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_sectorLogicFiberId, "sectorLogicFiberId")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_truthMatched, "truthMatched")
virtual StatusCode finalize() override
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateThreshold, "finalCandidateThreshold")
TGCL0_VECTOR_BRANCH(int, m_segmentTruthIndex, "segmentTruthIndex")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_finalCandidateTcId, "finalCandidateTcId")
TGCL0_VECTOR_BRANCH(float, m_segmentConsistency, "segmentConsistency")
TGCL0_VECTOR_BRANCH(float, m_candidateEta, "candidateEta")
TGCL0_VECTOR_BRANCH(float, m_candidatePhi, "candidatePhi")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_candidateReadoutSector, "candidateReadoutSector")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentBcTag, "segmentBcTag")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_candidateThreshold, "candidateThreshold")
TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentStationMask, "segmentStationMask")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentSubdetectorId, "segmentSubdetectorId")
TGCL0_VECTOR_BRANCH(std::uint16_t, m_segmentPivotChannel, "segmentPivotChannel")
TGCL0_VECTOR_BRANCH(float, m_candidateDeltaTheta, "candidateDeltaTheta")
void copyToBranches(const TgcL0ValidationEvent &input)
TGCL0_VECTOR_BRANCH(std::uint8_t, m_segmentProjection, "segmentProjection")
Property holding a SG store/key/clid from which a ReadHandle is made.
ROOT-independent validation data for one event.