Make the pixel cluster container.
102 ATH_MSG_DEBUG(
"You are running the element-wise container creation method.");
106 std::make_unique<xAOD::PixelClusterContainer>(),
107 std::make_unique<xAOD::PixelClusterAuxContainer>()));
109 ATH_CHECK(pixelClustersHandle.isValid());
112 int rdoIndex_counter = 0;
114 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters;
i++) {
116 auto pixelCl = pixelClustersHandle->push_back(
117 std::make_unique<xAOD::PixelCluster>());
119 Eigen::Matrix<float, 2, 1> localPosition(
121 Eigen::Matrix<float, 2, 2> localCovariance;
122 localCovariance.setZero();
125 Eigen::Matrix<float, 3, 1> globalPosition(
129 std::vector<Identifier> RDOs;
132 for (
unsigned int j = 0; j <
metadata->pcRdoIndex[
i]; ++j) {
136 rdoIndex_counter +=
metadata->pcRdoIndex[
i];
138 pixelCl->setMeasurement<2>(pxAux.
idHash[
i], localPosition,
140 pixelCl->setIdentifier(pxAux.
id[
i]);
141 pixelCl->setRDOlist(RDOs);
142 pixelCl->globalPosition() = globalPosition;
149 return StatusCode::SUCCESS;
156 ATH_MSG_DEBUG(
"You are running the bulk copy container creation method.");
162 auto pixelCl = std::make_unique<xAOD::PixelClusterContainer>();
163 auto pixelClAux = std::make_unique<xAOD::PixelClusterAuxContainer>();
164 pixelCl->setStore(pixelClAux.get());
168 const size_t nClusters =
metadata->numOfPixelClusters;
169 pixelClAux->resize(nClusters);
170 pixelCl->reserve(nClusters);
176 for (
size_t i = 0;
i < nClusters; ++
i) {
177 pixelCl->push_back(std::make_unique<xAOD::PixelCluster>());
184 std::vector<long unsigned int> identifierBuffer(nClusters);
185 std::vector<unsigned int> idHashBuffer(nClusters);
186 std::vector<std::array<float, 3>> gpBuffer(nClusters);
187 std::vector<float> localPosX(nClusters);
188 std::vector<float> localPosY(nClusters);
189 std::vector<float> localCovXX(nClusters);
190 std::vector<float> localCovYY(nClusters);
191 std::vector<int> totalToTBuffer(nClusters);
192 std::vector<float> widthInEtaBuffer(nClusters);
193 std::vector<float> omegaXBuffer(nClusters);
194 std::vector<float> omegaYBuffer(nClusters);
195 std::vector<int> channelsInPhiBuffer(nClusters);
196 std::vector<int> channelsInEtaBuffer(nClusters);
198 for (
size_t i = 0;
i < nClusters; ++
i) {
201 identifierBuffer[
i] = pxAux.
id[
i];
260 auto idSpan = idAcc.getDataSpan(*pixelCl);
261 auto idHashSpan = idHashAcc.getDataSpan(*pixelCl);
262 auto locPosXSpan = localPosXAcc.getDataSpan(*pixelCl);
263 auto locPosYSpan = localPosYAcc.getDataSpan(*pixelCl);
264 auto locCovXXSpan = localCovXXAcc.getDataSpan(*pixelCl);
265 auto locCovYYSpan = localCovYYAcc.getDataSpan(*pixelCl);
266 auto totSpan = totAcc.getDataSpan(*pixelCl);
267 auto wEtaSpan = widthEtaAcc.getDataSpan(*pixelCl);
268 auto omegaXSpan = omegaXAcc.getDataSpan(*pixelCl);
269 auto omegaYSpan = omegaYAcc.getDataSpan(*pixelCl);
270 auto gpSpan = globalPosAcc.getDataSpan(*pixelCl);
271 auto channelsInPhiSpan = channelsInPhiAcc.getDataSpan(*pixelCl);
272 auto channelsInEtaSpan = channelsInEtaAcc.getDataSpan(*pixelCl);
297 auto rdoSpan = rdoListAcc.getDataSpan(*pixelCl);
299 int rdoIndex_counter = 0;
301 for (
size_t i = 0;
i < nClusters; ++
i) {
305 std::vector<unsigned long long> &rdosForThisCluster = rdoSpan[
i];
308 rdosForThisCluster.resize(nRDOs);
311 for (
size_t j = 0; j < nRDOs; ++j) {
312 rdosForThisCluster[j] = pxAux.
rdoList[rdoIndex_counter + j];
314 rdoIndex_counter += nRDOs;
322 pixelClustersHandle.record(std::move(pixelCl), std::move(pixelClAux)));
325 return StatusCode::SUCCESS;