19 #include "Identifier/Identifier.h"
34 return StatusCode::SUCCESS;
40 const EventContext &ctx)
const {
46 ATH_CHECK(stripClustersHandle.record(std::make_unique<xAOD::StripClusterContainer>(), std::make_unique<xAOD::StripClusterAuxContainer>()));
49 for (
unsigned int i = 0;
i <
metadata->numOfStripClusters;
i++)
52 auto stripCl = stripClustersHandle->push_back(std::make_unique<xAOD::StripCluster>());
55 Eigen::Matrix<float, 1, 1> localPosition;
56 Eigen::Matrix<float, 1, 1> localCovariance;
63 std::vector<Identifier> RDOs;
93 Eigen::Matrix<float, 3, 1> globalPosition(globalX, globalY,
globalZ);
94 stripCl->setMeasurement<1>(idHash, localPosition, localCovariance);
96 stripCl->setIdentifier(
id);
97 stripCl->setRDOlist(RDOs);
98 stripCl->globalPosition() = globalPosition;
99 stripCl->setChannelsInPhi(channelsinPhi);
102 return StatusCode::SUCCESS;
109 const size_t nClusters =
metadata->numOfStripClusters;
110 auto stripCl = std::make_unique<xAOD::StripClusterContainer>();
111 stripCl->reserve(nClusters);
114 for (std::size_t
i = 0;
i < nClusters; ++
i) {
115 stripCl->push_back(std::make_unique<xAOD::StripCluster>());
119 auto stripClAux = std::make_unique<xAOD::StripClusterAuxContainer>();
120 stripClAux->resize(stripCl->size());
121 stripCl->setStore(stripClAux.get());
129 const auto*
base = stripClusters;
143 const auto* channelsPhiPtr =
base + 12 *
N +
offset;
158 auto locPosXSpan = locPosXAcc.
getDataSpan(*stripCl);
159 auto locCovXXSpan = locCovXXAcc.
getDataSpan(*stripCl);
161 auto channelsPhiSpan = channelsPhiAcc.
getDataSpan(*stripCl);
169 for (
size_t i = 0;
i < nClusters; ++
i) {
170 idHashSpan[
i] =
static_cast<unsigned int>(idHashPtr[
i]);
171 idSpan[
i] =
static_cast<unsigned long>(identifierPtr[
i]);
174 locPosXSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(localPosXPtr[
i]));
175 locCovXXSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(localCovXXPtr[
i]));
177 gpSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(gpXPtr[
i]));
178 gpSpan[
i][1] =
static_cast<float>(std::bit_cast<double>(gpYPtr[
i]));
179 gpSpan[
i][2] =
static_cast<float>(std::bit_cast<double>(gpZPtr[
i]));
181 channelsPhiSpan[
i] =
static_cast<int>(channelsPhiPtr[
i]);
184 auto& rdoList = rdoSpan[
i];
186 for (
int r = 0;
r < 4; ++
r) {
187 if (rdoPtrs[
r][
i]) rdoList.emplace_back(rdoPtrs[
r][
i]);
194 ATH_CHECK(stripClustersHandle.record(std::move(stripCl), std::move(stripClAux)));
197 return StatusCode::SUCCESS;
205 const EventContext &ctx)
const {
212 std::make_unique<xAOD::StripClusterContainer>(),
213 std::make_unique<xAOD::StripClusterAuxContainer>()));
215 int rdoIndexCounter = 0;
217 for (
unsigned int i = 0;
i <
metadata->numOfStripClusters;
i++) {
220 stripClustersHandle->push_back(std::make_unique<xAOD::StripCluster>());
223 Eigen::Matrix<float, 1, 1> localPosition;
224 Eigen::Matrix<float, 1, 1> localCovariance;
229 Eigen::Matrix<float, 3, 1> globalPosition(
233 std::vector<Identifier> RDOs;
236 for (
unsigned int j = 0; j <
metadata->scRdoIndex[
i]; ++j) {
240 rdoIndexCounter +=
metadata->scRdoIndex[
i];
242 stripCl->setMeasurement<1>(scAux.
idHash.at(
i), localPosition,
244 stripCl->setIdentifier(scAux.
id.at(
i));
245 stripCl->setRDOlist(RDOs);
246 stripCl->globalPosition() = globalPosition;
249 return StatusCode::SUCCESS;
256 const EventContext &ctx)
const {
266 ATH_CHECK(pixelClustersHandle.record(std::make_unique<xAOD::PixelClusterContainer>(),std::make_unique<xAOD::PixelClusterAuxContainer>()));
268 ATH_CHECK(pixelClustersHandle.isValid());
270 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters;
i++)
273 auto pixelCl = pixelClustersHandle->push_back(std::make_unique<xAOD::PixelCluster>());
280 std::vector<Identifier> RDOs;
297 Eigen::Matrix<float, 2, 1> localPosition;
298 Eigen::Matrix<float, 2, 2> localCovariance;
299 localCovariance.setZero();
333 Eigen::Matrix<float, 3, 1> globalPosition(globalX, globalY,
globalZ);
335 pixelCl->setMeasurement<2>(idHash, localPosition,localCovariance);
336 pixelCl->setIdentifier(
id);
337 pixelCl->setRDOlist(RDOs);
338 pixelCl->globalPosition() = globalPosition;
339 pixelCl->setTotalToT(totalToT);
340 pixelCl->setChannelsInPhiEta(channelsInPhi, channelsInEta);
341 pixelCl->setWidthInEta(widthInEta);
343 return StatusCode::SUCCESS;
350 const size_t nClusters =
metadata->numOfPixelClusters;
351 auto pixelCl = std::make_unique<xAOD::PixelClusterContainer>();
352 pixelCl->reserve(nClusters);
355 for (std::size_t
i = 0;
i < nClusters; ++
i) {
356 pixelCl->push_back(std::make_unique<xAOD::PixelCluster>());
360 auto pixelClAux = std::make_unique<xAOD::PixelClusterAuxContainer>();
361 pixelClAux->resize(pixelCl->size());
362 pixelCl->setStore(pixelClAux.get());
370 const auto*
base = pixelClusters;
386 const auto* channelsPhiPtr =
base + 13 *
N +
offset;
387 const auto* channelsEtaPtr =
base + 14 *
N +
offset;
410 auto totalToTSpan = totalToTAcc.
getDataSpan(*pixelCl);
411 auto channelsPhiSpan = channelsPhiAcc.
getDataSpan(*pixelCl);
412 auto channelsEtaSpan = channelsEtaAcc.
getDataSpan(*pixelCl);
413 auto widthEtaSpan = widthEtaAcc.
getDataSpan(*pixelCl);
421 for (
size_t i = 0;
i < nClusters; ++
i) {
422 idHashSpan[
i] =
static_cast<unsigned int>(idHashPtr[
i]);
423 idSpan[
i] =
static_cast<unsigned long>(identifierPtr[
i]);
426 locPosSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(localXPtr[
i]));
427 locPosSpan[
i][1] =
static_cast<float>(std::bit_cast<double>(localYPtr[
i]));
428 locCovSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(covXXPtr[
i]));
429 locCovSpan[
i][3] =
static_cast<float>(std::bit_cast<double>(covYYPtr[
i]));
431 gpSpan[
i][0] =
static_cast<float>(std::bit_cast<double>(gpXPtr[
i]));
432 gpSpan[
i][1] =
static_cast<float>(std::bit_cast<double>(gpYPtr[
i]));
433 gpSpan[
i][2] =
static_cast<float>(std::bit_cast<double>(gpZPtr[
i]));
435 channelsPhiSpan[
i] =
static_cast<int>(channelsPhiPtr[
i]);
436 channelsEtaSpan[
i] =
static_cast<int>(channelsEtaPtr[
i]);
437 widthEtaSpan[
i] =
static_cast<float>(std::bit_cast<double>(widthEtaPtr[
i]));
438 totalToTSpan[
i] =
static_cast<int>(totalToTPtr[
i]);
441 auto& rdoList = rdoSpan[
i];
443 for (
int r = 0;
r < 4; ++
r) {
444 if (rdoPtrs[
r][
i]) rdoList.emplace_back(rdoPtrs[
r][
i]);
451 ATH_CHECK(pixelClustersHandle.record(std::move(pixelCl), std::move(pixelClAux)));
455 return StatusCode::SUCCESS;
463 const EventContext &ctx)
const {
473 ATH_MSG_DEBUG(
"You are running the element-wise container creation method.");
477 std::make_unique<xAOD::PixelClusterContainer>(),
478 std::make_unique<xAOD::PixelClusterAuxContainer>()));
480 ATH_CHECK(pixelClustersHandle.isValid());
483 int rdoIndexCounter = 0;
485 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters;
i++) {
487 auto pixelCl = pixelClustersHandle->push_back(
488 std::make_unique<xAOD::PixelCluster>());
490 Eigen::Matrix<float, 2, 1> localPosition(
492 Eigen::Matrix<float, 2, 2> localCovariance;
493 localCovariance.setZero();
496 Eigen::Matrix<float, 3, 1> globalPosition(
500 std::vector<Identifier> RDOs;
503 for (
unsigned int j = 0; j <
metadata->pcRdoIndex[
i]; ++j) {
507 rdoIndexCounter +=
metadata->pcRdoIndex[
i];
509 pixelCl->setMeasurement<2>(pxAux.
idHash[
i], localPosition,
511 pixelCl->setIdentifier(pxAux.
id[
i]);
512 pixelCl->setRDOlist(RDOs);
513 pixelCl->globalPosition() = globalPosition;
520 return StatusCode::SUCCESS;
527 ATH_MSG_DEBUG(
"You are running the bulk copy container creation method.");
533 auto pixelCl = std::make_unique<xAOD::PixelClusterContainer>();
534 auto pixelClAux = std::make_unique<xAOD::PixelClusterAuxContainer>();
535 pixelCl->setStore(pixelClAux.get());
539 const size_t nClusters =
metadata->numOfPixelClusters;
540 pixelClAux->resize(nClusters);
541 pixelCl->reserve(nClusters);
547 for (
size_t i = 0;
i < nClusters; ++
i) {
548 pixelCl->push_back(std::make_unique<xAOD::PixelCluster>());
555 std::vector<long unsigned int> identifierBuffer(nClusters);
556 std::vector<unsigned int> idHashBuffer(nClusters);
557 std::vector<std::array<float, 3>> gpBuffer(nClusters);
558 std::vector<float> localPosX(nClusters);
559 std::vector<float> localPosY(nClusters);
560 std::vector<float> localCovXX(nClusters);
561 std::vector<float> localCovYY(nClusters);
562 std::vector<int> totalToTBuffer(nClusters);
563 std::vector<float> widthInEtaBuffer(nClusters);
564 std::vector<int> channelsInPhiBuffer(nClusters);
565 std::vector<int> channelsInEtaBuffer(nClusters);
567 for (
size_t i = 0;
i < nClusters; ++
i) {
570 identifierBuffer[
i] = pxAux.
id[
i];
625 auto locPosXSpan = localPosXAcc.
getDataSpan(*pixelCl);
626 auto locPosYSpan = localPosYAcc.
getDataSpan(*pixelCl);
627 auto locCovXXSpan = localCovXXAcc.
getDataSpan(*pixelCl);
628 auto locCovYYSpan = localCovYYAcc.
getDataSpan(*pixelCl);
632 auto channelsInPhiSpan = channelsInPhiAcc.
getDataSpan(*pixelCl);
633 auto channelsInEtaSpan = channelsInEtaAcc.
getDataSpan(*pixelCl);
658 int rdoIndexCounter = 0;
660 for (
size_t i = 0;
i < nClusters; ++
i) {
664 std::vector<unsigned long long> &rdosForThisCluster = rdoSpan[
i];
667 rdosForThisCluster.resize(nRDOs);
670 for (
size_t j = 0; j < nRDOs; ++j) {
671 rdosForThisCluster[j] = pxAux.
rdoList[rdoIndexCounter + j];
673 rdoIndexCounter += nRDOs;
680 ATH_CHECK(pixelClustersHandle.record(std::move(pixelCl), std::move(pixelClAux)));
683 return StatusCode::SUCCESS;