58 {
60
65
69 const InDetSimDataCollection* sdos = sdoHandle.
cptr();
70
75
78 const InDetDD::SiDetectorElementCollection* pixElements = pixelDetEleHandle.
cptr();
79
80
82 ATH_CHECK( decor_detectorElementID.isValid() );
83
84
85 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sdo_words(
m_sdo_words, ctx );
86 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector< std::vector<int> > > decor_sdo_depositsBarcode(
m_sdo_depositsBarcode, ctx );
87 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector< std::vector<float> > > decor_sdo_depositsEnergy(
m_sdo_depositsEnergy, ctx );
88
89
90 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_energyDeposit(
m_sihit_energyDeposit_decor_key, ctx );
91 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_meanTime(
m_sihit_meanTime_decor_key, ctx );
92 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sihit_barcode(
m_sihit_barcode_decor_key, ctx );
93 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<int> > decor_sihit_pdgid(
m_sihit_pdgid_decor_key, ctx );
94
95 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosX(
m_sihit_startPosX_decor_key, ctx );
96 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosY(
m_sihit_startPosY_decor_key, ctx );
97 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_startPosZ(
m_sihit_startPosZ_decor_key, ctx );
98
99 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosX(
m_sihit_endPosX_decor_key, ctx );
100 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosY(
m_sihit_endPosY_decor_key, ctx );
101 SG::WriteDecorHandle< xAOD::TrackMeasurementValidationContainer, std::vector<float> > decor_sihit_endPosZ(
m_sihit_endPosZ_decor_key, ctx );
102
103
104 std::vector< std::vector< const SiHit* > > siHitsCollections(
m_PixelHelper->wafer_hash_max());
105 for (const SiHit& siHit: *siHits) {
106 if (!siHit.isPixel()) {
108 return StatusCode::FAILURE;
109 }
110
111 Identifier wafer_id(
m_PixelHelper->wafer_id(siHit.getBarrelEndcap(),
112 siHit.getLayerDisk(),
113 siHit.getPhiModule(),
114 siHit.getEtaModule()));
115 IdentifierHash wafer_hash(
m_PixelHelper->wafer_hash(wafer_id));
116
120 return StatusCode::FAILURE;
121 }
122 siHitsCollections[wafer_hash].push_back(&siHit);
123 }
124
125 ContainerAccessor<xAOD::TrackMeasurementValidation, IdentifierHash, 1>
126 pixelAccessor ( *measurements,
128 pixElements->
size());
129
130
131 const auto& allIdHashes = pixelAccessor.allIdentifiers();
132 for (const auto& hashId : allIdHashes) {
134 if ( not element ) {
135 ATH_MSG_FATAL(
"Invalid pixel detector element for hash " << hashId);
136 return StatusCode::FAILURE;
137 }
138
139 auto [startRange, stopRange] = pixelAccessor.rangesForIdentifierDirect(hashId).front();
140 const std::vector< const SiHit* >& siHitsWithCurrentHash = siHitsCollections.at(hashId);
141
142 for (auto itr = startRange; itr != stopRange; ++itr) {
144
145 const std::vector< std::uint64_t > rdoIdentifierList = measurement->
rdoIdentifierList();
146
147 std::vector< Identifier > rdos( rdoIdentifierList.size() );
148 for (std::size_t
i(0);
i < rdoIdentifierList.size(); ++
i) {
149 rdos[
i].set_literal( rdoIdentifierList[i] );
150 }
151
154
156 startPosX, startPosY, startPosZ,
158
159
160 decor_sdo_words(*measurement) = std::move(word);
161 decor_sdo_depositsBarcode(*measurement) = std::move(depositsUniqueID);
162 decor_sdo_depositsEnergy(*measurement) = std::move(depositsEnergy);
163
164
165 decor_sihit_energyDeposit(*measurement) = std::move(energyDeposit);
166 decor_sihit_meanTime(*measurement) = std::move(meanTime);
167 decor_sihit_barcode(*measurement) = std::move(uniqueID);
168 decor_sihit_pdgid(*measurement) = std::move(pdgid);
169
170 decor_sihit_startPosX(*measurement) = std::move(startPosX);
171 decor_sihit_startPosY(*measurement) = std::move(startPosY);
172 decor_sihit_startPosZ(*measurement) = std::move(startPosZ);
173
174 decor_sihit_endPosX(*measurement) = std::move(endPosX);
175 decor_sihit_endPosY(*measurement) = std::move(endPosY);
176 decor_sihit_endPosZ(*measurement) = std::move(endPosZ);
177 }
178 }
179
180 return StatusCode::SUCCESS;
181 }
#define ATH_CHECK
Evaluate an expression and check for errors.
AtlasHitsVector< SiHit > SiHitCollection
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_meanTime_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_barcode_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosY_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosZ_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_energyDeposit_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsEnergy
SG::ReadHandleKey< SiHitCollection > m_siHitsKey
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_pdgid_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosX_decor_key
SG::ReadHandleKey< InDetSimDataCollection > m_SDOcontainer_key
SG::ReadDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_measurement_detectorElementID
std::vector< SiHit > findAllHitsCompatibleWithCluster(const std::vector< Identifier > &rdos, const InDetDD::SiDetectorElement &element, const std::vector< const SiHit * > &sihits, const std::vector< std::vector< int > > &sdoTracks) const
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_endPosZ_decor_key
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_words
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_pixelDetEleCollKey
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_inputMeasurementsKey
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sihit_startPosX_decor_key
const PixelID * m_PixelHelper
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_sdo_depositsBarcode
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".