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;
110 auto stripCl = std::make_unique<xAOD::StripClusterContainer>();
111 auto stripClAux = std::make_unique<xAOD::StripClusterAuxContainer>();
112 stripCl->setStore(stripClAux.get());
116 const size_t nClusters =
metadata->numOfStripClusters;
117 stripClAux->resize(nClusters);
118 stripCl->reserve(nClusters);
124 for (
size_t i = 0;
i < nClusters; ++
i) {
125 stripCl->push_back(std::make_unique<xAOD::StripCluster>());
136 std::vector<unsigned int> idHashBuffer(nClusters);
137 std::vector<long unsigned int> identifierBuffer(nClusters);
138 std::vector<std::array<float, 1>> localPosX(nClusters);
139 std::vector<std::array<float, 1>> localCovXX(nClusters);
140 std::vector<std::array<float, 3>> gpBuffer(nClusters);
141 std::vector<int> channelsInPhiBuffer(nClusters);
148 const auto*
base = stripClusters;
164 const auto* channelsPhiPtr =
base + 12 *
N +
offset;
167 for (
size_t i = 0;
i < nClusters; ++
i) {
168 idHashBuffer[
i] =
static_cast<unsigned int>(idHashPtr[
i]);
169 identifierBuffer[
i] =
static_cast<unsigned long>(identifierPtr[
i]);
172 std::vector<unsigned long long>& rdoList = rdoSpan[
i];
173 for (
int r = 0;
r < 4; ++
r) {
174 if (!rdoPtrs[
r][
i])
continue;
175 unsigned long long rdo =
static_cast<unsigned long long>(rdoPtrs[
r][
i]);
176 rdoList.push_back(rdo);
179 localPosX[
i][0] =
static_cast<float>(std::bit_cast<double>(localPosXPtr[
i]));
180 localCovXX[
i][0] =
static_cast<float>(std::bit_cast<double>(localCovXXPtr[
i]));
182 gpBuffer[
i][0] =
static_cast<float>(std::bit_cast<double>(gpXPtr[
i]));
183 gpBuffer[
i][1] =
static_cast<float>(std::bit_cast<double>(gpYPtr[
i]));
184 gpBuffer[
i][2] =
static_cast<float>(std::bit_cast<double>(gpZPtr[
i]));
186 channelsInPhiBuffer[
i] =
static_cast<int>(channelsPhiPtr[
i]);
208 auto locPosXSpan = localPosXAcc.
getDataSpan(*stripCl);
209 auto locCovXXSpan = localCovXXAcc.
getDataSpan(*stripCl);
210 auto channelsInPhiSpan = channelsInPhiAcc.
getDataSpan(*stripCl);
222 ATH_CHECK(stripClustersHandle.record(std::move(stripCl), std::move(stripClAux)));
224 return StatusCode::SUCCESS;
232 const EventContext &ctx)
const {
239 std::make_unique<xAOD::StripClusterContainer>(),
240 std::make_unique<xAOD::StripClusterAuxContainer>()));
242 int rdoIndex_counter = 0;
244 for (
unsigned int i = 0;
i <
metadata->numOfStripClusters;
i++) {
247 stripClustersHandle->push_back(std::make_unique<xAOD::StripCluster>());
250 Eigen::Matrix<float, 1, 1> localPosition;
251 Eigen::Matrix<float, 1, 1> localCovariance;
256 Eigen::Matrix<float, 3, 1> globalPosition(
260 std::vector<Identifier> RDOs;
263 for (
unsigned int j = 0; j <
metadata->scRdoIndex[
i]; ++j) {
267 rdoIndex_counter +=
metadata->scRdoIndex[
i];
269 stripCl->setMeasurement<1>(scAux.
idHash.at(
i), localPosition,
271 stripCl->setIdentifier(scAux.
id.at(
i));
272 stripCl->setRDOlist(RDOs);
273 stripCl->globalPosition() = globalPosition;
276 return StatusCode::SUCCESS;
283 const EventContext &ctx)
const {
295 ATH_CHECK(pixelClustersHandle.record(std::make_unique<xAOD::PixelClusterContainer>(),std::make_unique<xAOD::PixelClusterAuxContainer>()));
297 ATH_CHECK(pixelClustersHandle.isValid());
299 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters;
i++)
302 auto pixelCl = pixelClustersHandle->push_back(std::make_unique<xAOD::PixelCluster>());
309 std::vector<Identifier> RDOs;
326 Eigen::Matrix<float, 2, 1> localPosition;
327 Eigen::Matrix<float, 2, 2> localCovariance;
328 localCovariance.setZero();
362 Eigen::Matrix<float, 3, 1> globalPosition(globalX, globalY,
globalZ);
364 pixelCl->setMeasurement<2>(idHash, localPosition,localCovariance);
365 pixelCl->setIdentifier(
id);
366 pixelCl->setRDOlist(RDOs);
367 pixelCl->globalPosition() = globalPosition;
368 pixelCl->setTotalToT(totalToT);
369 pixelCl->setChannelsInPhiEta(channelsInPhi, channelsInEta);
370 pixelCl->setWidthInEta(widthInEta);
372 return StatusCode::SUCCESS;
380 auto pixelCl = std::make_unique<xAOD::PixelClusterContainer>();
381 auto pixelClAux = std::make_unique<xAOD::PixelClusterAuxContainer>();
382 pixelCl->setStore(pixelClAux.get());
386 const size_t nClusters =
metadata->numOfPixelClusters;
387 pixelClAux->resize(nClusters);
388 pixelCl->reserve(nClusters);
394 for (
size_t i = 0;
i < nClusters; ++
i) {
395 pixelCl->push_back(std::make_unique<xAOD::PixelCluster>());
409 const auto*
base = pixelClusters;
427 const auto* channelsPhiPtr =
base + 13 *
N +
offset;
428 const auto* channelsEtaPtr =
base + 14 *
N +
offset;
433 std::vector<long unsigned int> identifierBuffer(nClusters);
434 std::vector<unsigned int> idHashBuffer(nClusters);
435 std::vector<std::array<float, 3>> gpBuffer(nClusters);
436 std::vector<std::array<float, 2>> localPositionBuffer(nClusters);
437 std::vector<std::array<float, 4>> localCovarianceBuffer(nClusters);
438 std::vector<int> totalToTBuffer(nClusters);
439 std::vector<float> widthInEtaBuffer(nClusters);
440 std::vector<int> channelsInPhiBuffer(nClusters);
441 std::vector<int> channelsInEtaBuffer(nClusters);
443 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters; ++
i) {
446 idHashBuffer[
i] =
static_cast<unsigned int>(idHashPtr[
i]);
447 identifierBuffer[
i] =
static_cast<unsigned long>(identifierPtr[
i]);
450 std::vector<unsigned long long>& rdoList = rdoSpan[
i];
451 for (
int r = 0;
r < 4; ++
r) {
452 if (!rdoPtrs[
r][
i])
continue;
453 unsigned long long rdo =
static_cast<unsigned long long>(rdoPtrs[
r][
i]);
454 rdoList.push_back(rdo);
457 localPositionBuffer[
i][0] =
static_cast<float>(std::bit_cast<double>(localXPtr[
i]));
458 localCovarianceBuffer[
i][0] =
static_cast<float>(std::bit_cast<double>(covXXPtr[
i]));
460 localPositionBuffer[
i][1] =
static_cast<float>(std::bit_cast<double>(localYPtr[
i]));
461 localCovarianceBuffer[
i][3] =
static_cast<float>(std::bit_cast<double>(covYYPtr[
i]));
463 gpBuffer[
i][0] =
static_cast<float>(std::bit_cast<double>(gpXPtr[
i]));
464 gpBuffer[
i][1] =
static_cast<float>(std::bit_cast<double>(gpYPtr[
i]));
465 gpBuffer[
i][2] =
static_cast<float>(std::bit_cast<double>(gpZPtr[
i]));
468 channelsInPhiBuffer[
i] =
static_cast<int>(channelsPhiPtr[
i]);
469 channelsInEtaBuffer[
i] =
static_cast<int>(channelsEtaPtr[
i]);
470 widthInEtaBuffer[
i] =
static_cast<float>(std::bit_cast<double>(widthEtaPtr[
i]));
471 totalToTBuffer[
i] =
static_cast<int>(totalToTPtr[
i]);
496 auto locPosSpan = localPosAcc.
getDataSpan(*pixelCl);
497 auto locCovSpan = localCovAcc.
getDataSpan(*pixelCl);
498 auto totalToTSpan = totalToTAcc.
getDataSpan(*pixelCl);
499 auto channelsInPhiSpan = channelsInPhiAcc.
getDataSpan(*pixelCl);
500 auto channelsInEtaSpan = channelsInEtaAcc.
getDataSpan(*pixelCl);
501 auto widthInEtaSpan = widthInEtaAcc.
getDataSpan(*pixelCl);
514 ATH_CHECK(pixelClustersHandle.record(std::move(pixelCl), std::move(pixelClAux)));
517 return StatusCode::SUCCESS;
525 const EventContext &ctx)
const {
535 ATH_MSG_DEBUG(
"You are running the element-wise container creation method.");
539 std::make_unique<xAOD::PixelClusterContainer>(),
540 std::make_unique<xAOD::PixelClusterAuxContainer>()));
542 ATH_CHECK(pixelClustersHandle.isValid());
545 int rdoIndex_counter = 0;
547 for (
unsigned int i = 0;
i <
metadata->numOfPixelClusters;
i++) {
549 auto pixelCl = pixelClustersHandle->push_back(
550 std::make_unique<xAOD::PixelCluster>());
552 Eigen::Matrix<float, 2, 1> localPosition(
554 Eigen::Matrix<float, 2, 2> localCovariance;
555 localCovariance.setZero();
558 Eigen::Matrix<float, 3, 1> globalPosition(
562 std::vector<Identifier> RDOs;
565 for (
unsigned int j = 0; j <
metadata->pcRdoIndex[
i]; ++j) {
569 rdoIndex_counter +=
metadata->pcRdoIndex[
i];
571 pixelCl->setMeasurement<2>(pxAux.
idHash[
i], localPosition,
573 pixelCl->setIdentifier(pxAux.
id[
i]);
574 pixelCl->setRDOlist(RDOs);
575 pixelCl->globalPosition() = globalPosition;
582 return StatusCode::SUCCESS;
589 ATH_MSG_DEBUG(
"You are running the bulk copy container creation method.");
595 auto pixelCl = std::make_unique<xAOD::PixelClusterContainer>();
596 auto pixelClAux = std::make_unique<xAOD::PixelClusterAuxContainer>();
597 pixelCl->setStore(pixelClAux.get());
601 const size_t nClusters =
metadata->numOfPixelClusters;
602 pixelClAux->resize(nClusters);
603 pixelCl->reserve(nClusters);
609 for (
size_t i = 0;
i < nClusters; ++
i) {
610 pixelCl->push_back(std::make_unique<xAOD::PixelCluster>());
617 std::vector<long unsigned int> identifierBuffer(nClusters);
618 std::vector<unsigned int> idHashBuffer(nClusters);
619 std::vector<std::array<float, 3>> gpBuffer(nClusters);
620 std::vector<float> localPosX(nClusters);
621 std::vector<float> localPosY(nClusters);
622 std::vector<float> localCovXX(nClusters);
623 std::vector<float> localCovYY(nClusters);
624 std::vector<int> totalToTBuffer(nClusters);
625 std::vector<float> widthInEtaBuffer(nClusters);
626 std::vector<int> channelsInPhiBuffer(nClusters);
627 std::vector<int> channelsInEtaBuffer(nClusters);
629 for (
size_t i = 0;
i < nClusters; ++
i) {
632 identifierBuffer[
i] = pxAux.
id[
i];
687 auto locPosXSpan = localPosXAcc.
getDataSpan(*pixelCl);
688 auto locPosYSpan = localPosYAcc.
getDataSpan(*pixelCl);
689 auto locCovXXSpan = localCovXXAcc.
getDataSpan(*pixelCl);
690 auto locCovYYSpan = localCovYYAcc.
getDataSpan(*pixelCl);
694 auto channelsInPhiSpan = channelsInPhiAcc.
getDataSpan(*pixelCl);
695 auto channelsInEtaSpan = channelsInEtaAcc.
getDataSpan(*pixelCl);
720 int rdoIndex_counter = 0;
722 for (
size_t i = 0;
i < nClusters; ++
i) {
726 std::vector<unsigned long long> &rdosForThisCluster = rdoSpan[
i];
729 rdosForThisCluster.resize(nRDOs);
732 for (
size_t j = 0; j < nRDOs; ++j) {
733 rdosForThisCluster[j] = pxAux.
rdoList[rdoIndex_counter + j];
735 rdoIndex_counter += nRDOs;
743 pixelClustersHandle.record(std::move(pixelCl), std::move(pixelClAux)));
746 return StatusCode::SUCCESS;