57 {
59
64
68 const InDetSimDataCollection* sdos = sdoHandle.
cptr();
69
74
77 const InDetDD::SiDetectorElementCollection* stripElements = stripDetEleHandle.
cptr();
78
79
81 ATH_CHECK( decor_detectorElementID.isValid() );
82
83
84 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sdo_words(
m_sdo_words, ctx );
85 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector< std::vector<int> > > decor_sdo_depositsBarcode(
m_sdo_depositsBarcode, ctx );
86 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector< std::vector<float> > > decor_sdo_depositsEnergy(
m_sdo_depositsEnergy, ctx );
87
88
89 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_energyDeposit(
m_sihit_energyDeposit_decor_key, ctx );
90 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_meanTime(
m_sihit_meanTime_decor_key, ctx );
91 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sihit_barcode(
m_sihit_barcode_decor_key, ctx );
92 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sihit_pdgid(
m_sihit_pdgid_decor_key, ctx );
93
94 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosX(
m_sihit_startPosX_decor_key, ctx );
95 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosY(
m_sihit_startPosY_decor_key, ctx );
96 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosZ(
m_sihit_startPosZ_decor_key, ctx );
97
98 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosX(
m_sihit_endPosX_decor_key, ctx );
99 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosY(
m_sihit_endPosY_decor_key, ctx );
100 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosZ(
m_sihit_endPosZ_decor_key, ctx );
101
102
103 std::vector< std::vector< const SiHit* > > siHitsCollections(
m_StripHelper->wafer_hash_max());
104 for (const SiHit& siHit: *siHits) {
105 if ( not siHit.isSCT() ) {
107 return StatusCode::FAILURE;
108 }
109
110 Identifier wafer_id(
m_StripHelper->wafer_id(siHit.getBarrelEndcap(),
111 siHit.getLayerDisk(),
112 siHit.getPhiModule(),
113 siHit.getEtaModule(),
114 siHit.getSide()));
115 IdentifierHash wafer_hash(
m_StripHelper->wafer_hash(wafer_id));
116
120 return StatusCode::FAILURE;
121 }
122 siHitsCollections[wafer_hash].push_back(&siHit);
123 }
124
125
126 ContainerAccessor<xAOD::TrackMeasurementValidation, IdentifierHash, 1>
127 stripAccessor ( *measurements,
129 stripElements->
size());
130
131
132 const auto& allIdHashes = stripAccessor.allIdentifiers();
133 for (const auto& hashId : allIdHashes) {
134 const InDetDD::SiDetectorElement *element = stripElements->
getDetectorElement(hashId);
135 if ( not element ) {
136 ATH_MSG_FATAL(
"Invalid strip detector element for hash " << hashId);
137 return StatusCode::FAILURE;
138 }
139
140 auto [startRange, stopRange] = stripAccessor.rangesForIdentifierDirect(hashId).front();
141 const std::vector< const SiHit* >& siHitsWithCurrentHash = siHitsCollections.at(hashId);
142
143 for (auto itr = startRange; itr != stopRange; ++itr) {
145
146 const std::vector< std::uint64_t > rdoIdentifierList = measurement->
rdoIdentifierList();
147
148 std::vector< Identifier > rdos( rdoIdentifierList.size() );
149 for (std::size_t
i(0);
i < rdoIdentifierList.size(); ++
i) {
150 rdos[
i].set_literal( rdoIdentifierList[i] );
151 }
152
155
157 startPosX, startPosY, startPosZ,
159
160
161 decor_sdo_words(*measurement) = std::move(word);
162 decor_sdo_depositsBarcode(*measurement) = std::move(depositsUniqueID);
163 decor_sdo_depositsEnergy(*measurement) = std::move(depositsEnergy);
164
165
166 decor_sihit_energyDeposit(*measurement) = std::move(energyDeposit);
167 decor_sihit_meanTime(*measurement) = std::move(meanTime);
168 decor_sihit_barcode(*measurement) = std::move(uniqueID);
169 decor_sihit_pdgid(*measurement) = std::move(pdgid);
170
171 decor_sihit_startPosX(*measurement) = std::move(startPosX);
172 decor_sihit_startPosY(*measurement) = std::move(startPosY);
173 decor_sihit_startPosZ(*measurement) = std::move(startPosZ);
174
175 decor_sihit_endPosX(*measurement) = std::move(endPosX);
176 decor_sihit_endPosY(*measurement) = std::move(endPosY);
177 decor_sihit_endPosZ(*measurement) = std::move(endPosZ);
178 }
179 }
180
181 return StatusCode::SUCCESS;
182 }
#define ATH_CHECK
Evaluate an expression and check for errors.
AtlasHitsVector< SiHit > SiHitCollection
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_pdgid_decor_key
std::vector< SiHit > findAllHitsCompatibleWithCluster(const std::vector< Identifier > &rdos, const InDetDD::SiDetectorElement &element, const std::vector< const SiHit * > &sihits) const
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosX_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_meanTime_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsEnergy
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsBarcode
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosX_decor_key
const SCT_ID * m_StripHelper
SG::ReadHandleKey< SiHitCollection > m_siHitsKey
SG::ReadDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_measurement_detectorElementID
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_energyDeposit_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_words
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosZ_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosZ_decor_key
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_inputMeasurementsKey
SG::ReadHandleKey< InDetSimDataCollection > m_SDOcontainer_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_barcode_decor_key
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_stripDetEleCollKey
size_type size() const noexcept
Returns the number of elements in the collection.
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
const_pointer_type cptr()
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
const std::vector< uint64_t > & rdoIdentifierList() const
Returns the list of RDO identifiers.
std::tuple< std::vector< float >, std::vector< float >, std::vector< int >, std::vector< int >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float >, std::vector< float > > getSiHitInformation(const InDetDD::SiDetectorElement &element, const std::vector< SiHit > &matchingHits)
std::tuple< std::vector< int >, std::vector< std::vector< int > >, std::vector< std::vector< float > > > getSDOInformation(const std::vector< Identifier > &rdoList, const InDetSimDataCollection &sdoCollection)
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
TrackMeasurementValidation_v1 TrackMeasurementValidation
Reference the current persistent version:
TrackMeasurementValidationContainer_v1 TrackMeasurementValidationContainer
Definition of the current "TrackMeasurementValidation container version".