Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Private Attributes | List of all members
PassThroughTool Class Reference

#include <PassThroughTool.h>

Inheritance diagram for PassThroughTool:
Collaboration diagram for PassThroughTool:

Public Member Functions

StatusCode initialize () override
 
StatusCode runPassThrough (EFTrackingTransient::StripClusterAuxInput &scAux, EFTrackingTransient::PixelClusterAuxInput &pxAux, EFTrackingTransient::SpacePointAuxInput &stripSpAux, EFTrackingTransient::SpacePointAuxInput &pixelSpAux, EFTrackingTransient::Metadata *metadata, const EventContext &ctx) const
 Call this function at the DataPreparationPipeline to run the pass-through kernels. More...
 
StatusCode getInputClusterData (const xAOD::StripClusterContainer *sc, std::vector< EFTrackingTransient::StripCluster > &ef_sc, unsigned long N) const
 Convert the strip cluster from xAOD container to simple std::vector of EFTrackingTransient::StripCluster. More...
 
StatusCode getInputClusterData (const xAOD::PixelClusterContainer *pc, std::vector< EFTrackingTransient::PixelCluster > &ef_pc, unsigned long N) const
 Convert the pixel cluster from xAOD container to simple std::vector of EFTrackingTransient::PixelCluster. More...
 
StatusCode getInputSpacePointData (const xAOD::SpacePointContainer *sp, std::vector< EFTrackingTransient::SpacePoint > &ef_sp, std::vector< std::vector< const xAOD::UncalibratedMeasurement * >> &sp_meas, unsigned long N, bool isStrip) const
 Convert the space point from xAOD container to simple std::vector of EFTrackingTransient::SpacePoint. More...
 
StatusCode passThroughSW (const std::vector< EFTrackingTransient::StripCluster > &inputSC, EFTrackingTransient::StripClusterOutput &ef_scOutput, const std::vector< EFTrackingTransient::PixelCluster > &inputPC, EFTrackingTransient::PixelClusterOutput &ef_pcOutput, const std::vector< EFTrackingTransient::SpacePoint > &inputSSP, EFTrackingTransient::SpacePointOutput &ef_sspOutput, const std::vector< EFTrackingTransient::SpacePoint > &inputPSP, EFTrackingTransient::SpacePointOutput &ef_pspOutput, EFTrackingTransient::Metadata *metadata) const
 Software version of the pass-through kernel. More...
 
StatusCode passThroughSW_clusterOnly (const std::vector< EFTrackingTransient::StripCluster > &inputSC, EFTrackingTransient::StripClusterOutput &ef_scOutput, const std::vector< EFTrackingTransient::PixelCluster > &inputPC, EFTrackingTransient::PixelClusterOutput &ef_pcOutput, EFTrackingTransient::Metadata *metadata) const
 This is a cluster-only version (sw) of the pass-through kernel This is used for cluter level studies. More...
 
bool runSW () const
 A getter for the m_runSW property. More...
 

Private Attributes

Gaudi::Property< bool > m_runSW {this, "RunSW", true, "Run software mode"}
 Software mode, not running on the FPGA. More...
 
Gaudi::Property< bool > m_doSpacepoints {this, "DoSpacepoints", false, "Do spacepoints"}
 Temporary flag before spacepoints are ready. More...
 
Gaudi::Property< bool > m_clusterOnlyPassThrough
 Use the cluster-only pass through tool
More...
 
Gaudi::Property< unsigned int > m_maxClusterNum
 
Gaudi::Property< unsigned int > m_maxSpacePointNum
 
SG::ReadHandleKey< xAOD::StripClusterContainerm_stripClustersKey
 
SG::ReadHandleKey< xAOD::PixelClusterContainerm_pixelClustersKey
 
SG::ReadHandleKey< xAOD::SpacePointContainerm_spacePointsKey
 

Detailed Description

Definition at line 23 of file PassThroughTool.h.

Member Function Documentation

◆ getInputClusterData() [1/2]

StatusCode PassThroughTool::getInputClusterData ( const xAOD::PixelClusterContainer pc,
std::vector< EFTrackingTransient::PixelCluster > &  ef_pc,
unsigned long  N 
) const

Convert the pixel cluster from xAOD container to simple std::vector of EFTrackingTransient::PixelCluster.

This is needed for the kernel input.

Definition at line 501 of file PassThroughTool.cxx.

505 {
506  if (N > pc->size())
507  {
508  ATH_MSG_ERROR("You want to get the "
509  << N << "th pixel cluster, but there are only " << pc->size()
510  << " pixel clusters in the container.");
511  return StatusCode::FAILURE;
512  }
513  ATH_MSG_DEBUG("Making vector of pixel clusters...");
514  for (unsigned long i = 0; i < N; i++)
515  {
517  // Get the data from the input xAOD::PixelClusterContainer and set it to the
518  // cache
519  cache.id = pc->at(i)->identifier();
520  cache.idHash = pc->at(i)->identifierHash();
521  cache.localPosition[0] = pc->at(i)->localPosition<2>()(0, 0);
522  cache.localPosition[1] = pc->at(i)->localPosition<2>()(1, 0);
523  cache.localCovariance[0] = pc->at(i)->localCovariance<2>()(0, 0);
524  cache.localCovariance[1] = pc->at(i)->localCovariance<2>()(1, 1);
525  cache.globalPosition[0] = pc->at(i)->globalPosition()[0];
526  cache.globalPosition[1] = pc->at(i)->globalPosition()[1];
527  cache.globalPosition[2] = pc->at(i)->globalPosition()[2];
528 
529  for (long unsigned int j = 0; j < pc->at(i)->rdoList().size(); j++)
530  {
531  cache.rdoList[j] = pc->at(i)->rdoList().at(j).get_compact();
532  }
533 
534  cache.channelsInPhi = pc->at(i)->channelsInPhi();
535  cache.channelsInEta = pc->at(i)->channelsInEta();
536  cache.widthInEta = pc->at(i)->widthInEta();
537  cache.omegaX = pc->at(i)->omegaX();
538  cache.omegaY = pc->at(i)->omegaY();
539 
540  for (long unsigned int j = 0; j < pc->at(i)->totList().size(); j++)
541  {
542  cache.totList[j] = pc->at(i)->totList().at(j);
543  }
544 
545  cache.totalToT = pc->at(i)->totalToT();
546 
547  for (long unsigned int j = 0; j < pc->at(i)->chargeList().size(); j++)
548  {
549  cache.chargeList[j] = pc->at(i)->chargeList().at(j);
550  }
551 
552  cache.totalCharge = pc->at(i)->totalCharge();
553  cache.energyLoss = pc->at(i)->energyLoss();
554  cache.isSplit = pc->at(i)->isSplit();
555  cache.splitProbability1 = pc->at(i)->splitProbability1();
556  cache.splitProbability2 = pc->at(i)->splitProbability2();
557  cache.lvl1a = pc->at(i)->lvl1a();
558  cache.sizeOfRDOList = pc->at(i)->rdoList().size();
559  cache.sizeOfTotList = pc->at(i)->totList().size();
560  cache.sizeOfChargeList = pc->at(i)->chargeList().size();
561 
562  ef_pc.push_back(cache);
563  }
564 
565  ATH_MSG_DEBUG("Made " << ef_pc.size() << " pixel clusters in the vector");
566  return StatusCode::SUCCESS;
567 }

◆ getInputClusterData() [2/2]

StatusCode PassThroughTool::getInputClusterData ( const xAOD::StripClusterContainer sc,
std::vector< EFTrackingTransient::StripCluster > &  ef_sc,
unsigned long  N 
) const

Convert the strip cluster from xAOD container to simple std::vector of EFTrackingTransient::StripCluster.

This is needed for the kernel input.

Definition at line 460 of file PassThroughTool.cxx.

464 {
465  if (N > sc->size())
466  {
467  ATH_MSG_ERROR("You want to get the "
468  << N << "th strip cluster, but there are only " << sc->size()
469  << " strip clusters in the container.");
470  return StatusCode::FAILURE;
471  }
472  ATH_MSG_DEBUG("Making vector of strip clusters...");
473  for (unsigned long i = 0; i < N; i++)
474  {
476  // Get the data from the input xAOD::StripClusterContainer and set it to the
477  // cache
478  cache.localPosition = sc->at(i)->localPosition<1>()(0, 0);
479  cache.localCovariance = sc->at(i)->localCovariance<1>()(0, 0);
480  cache.idHash = sc->at(i)->identifierHash();
481  cache.id = sc->at(i)->identifier();
482  cache.globalPosition[0] = sc->at(i)->globalPosition()[0];
483  cache.globalPosition[1] = sc->at(i)->globalPosition()[1];
484  cache.globalPosition[2] = sc->at(i)->globalPosition()[2];
485 
486  for (unsigned long j = 0; j < sc->at(i)->rdoList().size(); j++)
487  {
488  cache.rdoList[j] = sc->at(i)->rdoList().at(j).get_compact();
489  }
490 
491  cache.channelsInPhi = sc->at(i)->channelsInPhi();
492  cache.sizeOfRDOList = sc->at(i)->rdoList().size();
493 
494  ef_sc.push_back(cache);
495  }
496 
497  ATH_MSG_DEBUG("Made " << ef_sc.size() << " strip clusters in the vector");
498  return StatusCode::SUCCESS;
499 }

◆ getInputSpacePointData()

StatusCode PassThroughTool::getInputSpacePointData ( const xAOD::SpacePointContainer sp,
std::vector< EFTrackingTransient::SpacePoint > &  ef_sp,
std::vector< std::vector< const xAOD::UncalibratedMeasurement * >> &  sp_meas,
unsigned long  N,
bool  isStrip 
) const

Convert the space point from xAOD container to simple std::vector of EFTrackingTransient::SpacePoint.

This is needed for the kernel input.

Definition at line 569 of file PassThroughTool.cxx.

574 {
575  if (N > sp->size())
576  {
577  ATH_MSG_ERROR("You want to get the "
578  << N << "th space point, but there are only " << sp->size()
579  << " SpacePoint in the container.");
580  return StatusCode::FAILURE;
581  }
582  ATH_MSG_DEBUG("Making vector of space point...");
583  for (unsigned long i = 0; i < N; i++)
584  {
586  // Get the data from the input xAOD::SpacePointContainer and set it to the
587  // cache
588  cache.idHash[0] = sp->at(i)->elementIdList()[0];
589  cache.globalPosition[0] = sp->at(i)->x();
590  cache.globalPosition[1] = sp->at(i)->y();
591  cache.globalPosition[2] = sp->at(i)->z();
592  cache.radius = sp->at(i)->radius();
593  cache.cov_r = sp->at(i)->varianceR();
594  cache.cov_z = sp->at(i)->varianceZ();
595 
596  // Pass the uncalibrated measurement for later stage of xAOD container
597  // creation for spacepoint
598  std::vector<const xAOD::UncalibratedMeasurement *> temp_vec(
599  sp->at(i)->measurements().size());
600  std::copy(sp->at(i)->measurements().begin(),
601  sp->at(i)->measurements().end(), temp_vec.begin());
602 
603  sp_meas.push_back(temp_vec);
604 
605  if (isStrip)
606  {
607  cache.idHash[1] = sp->at(i)->elementIdList()[1];
608  cache.topHalfStripLength = sp->at(i)->topHalfStripLength();
609  cache.bottomHalfStripLength = sp->at(i)->bottomHalfStripLength();
610  std::copy(sp->at(i)->topStripDirection().data(),
611  sp->at(i)->topStripDirection().data() +
612  sp->at(i)->topStripDirection().size(),
613  cache.topStripDirection);
614  std::copy(sp->at(i)->bottomStripDirection().data(),
615  sp->at(i)->bottomStripDirection().data() +
616  sp->at(i)->bottomStripDirection().size(),
617  cache.bottomStripDirection);
618  std::copy(sp->at(i)->stripCenterDistance().data(),
619  sp->at(i)->stripCenterDistance().data() +
620  sp->at(i)->stripCenterDistance().size(),
621  cache.stripCenterDistance);
622  std::copy(sp->at(i)->topStripCenter().data(),
623  sp->at(i)->topStripCenter().data() +
624  sp->at(i)->topStripCenter().size(),
625  cache.topStripCenter);
626  }
627  ef_sp.push_back(cache);
628  }
629 
630  ATH_MSG_DEBUG("Made " << ef_sp.size() << " space points in the vector");
631  return StatusCode::SUCCESS;
632 }

◆ initialize()

StatusCode PassThroughTool::initialize ( )
override

Definition at line 13 of file PassThroughTool.cxx.

14 {
15  ATH_MSG_INFO("Initializing PassThroughTool tool");
18  ATH_CHECK(m_spacePointsKey.initialize());
19 
20  return StatusCode::SUCCESS;
21 }

◆ passThroughSW()

StatusCode PassThroughTool::passThroughSW ( const std::vector< EFTrackingTransient::StripCluster > &  inputSC,
EFTrackingTransient::StripClusterOutput ef_scOutput,
const std::vector< EFTrackingTransient::PixelCluster > &  inputPC,
EFTrackingTransient::PixelClusterOutput ef_pcOutput,
const std::vector< EFTrackingTransient::SpacePoint > &  inputSSP,
EFTrackingTransient::SpacePointOutput ef_sspOutput,
const std::vector< EFTrackingTransient::SpacePoint > &  inputPSP,
EFTrackingTransient::SpacePointOutput ef_pspOutput,
EFTrackingTransient::Metadata metadata 
) const

Software version of the pass-through kernel.

The purse of this function is to mimic the FPGA output at software level.

It takes the EFTrackingTransient::StripCluster EFTrackingTransient::PixelCluster, and EFTrackingDataFormat::SpacePoints as input arguments and mimic the transfer kernel by giving array output.

Definition at line 636 of file PassThroughTool.cxx.

649 {
650  // Add error checking at the beginning of the passThroughSW method
651  if (inputSC.empty()) {
652  ATH_MSG_DEBUG("No strip clusters found.");
653  // Set strip-related metadata to 0
654  metadata->numOfStripClusters = 0;
655  metadata->numOfStripSpacePoints = 0;
656  return StatusCode::SUCCESS;
657  }
658 
659  if (inputPC.empty()) {
660  ATH_MSG_DEBUG("No pixel clusters found.");
661  // Set pixel-related metadata to 0
662  metadata->numOfPixelClusters = 0;
663  metadata->numOfPixelSpacePoints = 0;
664  return StatusCode::SUCCESS;
665  }
666 
667  int rdoIndex_counter = 0;
668 
669  unsigned int inputscRdoIndexSize = 0;
670  unsigned int inputpcRdoIndexSize = 0;
671 
672  // transfer inputStripClusters
673  ATH_MSG_DEBUG("Transfering strip clusters...");
674  for (size_t i = 0; i < inputSC.size(); i++)
675  {
676  ef_scOutput.scLocalPosition[i] = inputSC[i].localPosition;
677  ef_scOutput.scLocalCovariance[i] = inputSC[i].localCovariance;
678  ef_scOutput.scIdHash[i] = inputSC[i].idHash;
679  ef_scOutput.scId[i] = inputSC[i].id;
680  ef_scOutput.scGlobalPosition[i * 3] = inputSC[i].globalPosition[0];
681  ef_scOutput.scGlobalPosition[i * 3 + 1] = inputSC[i].globalPosition[1];
682  ef_scOutput.scGlobalPosition[i * 3 + 2] = inputSC[i].globalPosition[2];
683 
684  inputscRdoIndexSize += inputSC[i].sizeOfRDOList;
685 
686  for (int j = 0; j < inputSC[i].sizeOfRDOList; j++)
687  {
688  ef_scOutput.scRdoList[rdoIndex_counter + j] = inputSC[i].rdoList[j];
689  }
690  // update the index counter
691  ef_scOutput.scChannelsInPhi[i] = inputSC[i].channelsInPhi;
692  rdoIndex_counter += inputSC[i].sizeOfRDOList;
693  metadata[0].scRdoIndex[i] = inputSC[i].sizeOfRDOList;
694  }
695 
696  // transfer inputPC
697  rdoIndex_counter = 0;
698  int totIndex_counter = 0;
699  int chargeIndex_counter = 0;
700 
701  unsigned int inputpcTotListsize = 0;
702  unsigned int inputpcChargeListsize = 0;
703 
704  // trasnsfer_pc:
705  for (size_t i = 0; i < inputPC.size(); i++)
706  {
707  ef_pcOutput.pcLocalPosition[i * 2] = inputPC[i].localPosition[0];
708  ef_pcOutput.pcLocalPosition[i * 2 + 1] = inputPC[i].localPosition[1];
709  ef_pcOutput.pcLocalCovariance[i * 2] = inputPC[i].localCovariance[0];
710  ef_pcOutput.pcLocalCovariance[i * 2 + 1] = inputPC[i].localCovariance[1];
711  ef_pcOutput.pcIdHash[i] = inputPC[i].idHash;
712  ef_pcOutput.pcId[i] = inputPC[i].id;
713  ef_pcOutput.pcGlobalPosition[i * 3] = inputPC[i].globalPosition[0];
714  ef_pcOutput.pcGlobalPosition[i * 3 + 1] = inputPC[i].globalPosition[1];
715  ef_pcOutput.pcGlobalPosition[i * 3 + 2] = inputPC[i].globalPosition[2];
716 
717  inputpcRdoIndexSize += inputPC[i].sizeOfRDOList;
718 
719  for (int j = 0; j < inputPC[i].sizeOfRDOList; j++)
720  {
721  ef_pcOutput.pcRdoList[rdoIndex_counter + j] = inputPC[i].rdoList[j];
722  }
723  ef_pcOutput.pcChannelsInPhi[i] = inputPC[i].channelsInPhi;
724  ef_pcOutput.pcChannelsInEta[i] = inputPC[i].channelsInEta;
725  ef_pcOutput.pcWidthInEta[i] = inputPC[i].widthInEta;
726  ef_pcOutput.pcOmegaX[i] = inputPC[i].omegaX;
727  ef_pcOutput.pcOmegaY[i] = inputPC[i].omegaY;
728 
729  inputpcTotListsize += inputPC[i].sizeOfTotList;
730 
731  for (int j = 0; j < inputPC[i].sizeOfTotList; j++)
732  {
733  ef_pcOutput.pcTotList[totIndex_counter + j] = inputPC[i].totList[j];
734  }
735  ef_pcOutput.pcTotalToT[i] = inputPC[i].totalToT;
736 
737  inputpcChargeListsize += inputPC[i].sizeOfChargeList;
738 
739  for (int j = 0; j < inputPC[i].sizeOfChargeList; j++)
740  {
741  ef_pcOutput.pcChargeList[chargeIndex_counter + j] =
742  inputPC[i].chargeList[j];
743  }
744  ef_pcOutput.pcTotalCharge[i] = inputPC[i].totalCharge;
745  ef_pcOutput.pcEnergyLoss[i] = inputPC[i].energyLoss;
746  ef_pcOutput.pcIsSplit[i] = inputPC[i].isSplit;
747  ef_pcOutput.pcSplitProbability1[i] = inputPC[i].splitProbability1;
748  ef_pcOutput.pcSplitProbability2[i] = inputPC[i].splitProbability2;
749  ef_pcOutput.pcLvl1a[i] = inputPC[i].lvl1a;
750 
751  // update the index counter
752  rdoIndex_counter += inputPC[i].sizeOfRDOList;
753  totIndex_counter += inputPC[i].sizeOfTotList;
754  chargeIndex_counter += inputPC[i].sizeOfChargeList;
755  metadata[0].pcRdoIndex[i] = inputPC[i].sizeOfRDOList;
756  metadata[0].pcTotIndex[i] = inputPC[i].sizeOfTotList;
757  metadata[0].pcChargeIndex[i] = inputPC[i].sizeOfChargeList;
758  }
759 
760  // transfer metadata for clusters
761  metadata[0].numOfStripClusters = inputSC.size();
762  metadata[0].numOfPixelClusters = inputPC.size();
763  metadata[0].scRdoIndexSize = inputscRdoIndexSize;
764  metadata[0].pcRdoIndexSize = inputpcRdoIndexSize;
765  metadata[0].pcTotIndexSize = inputpcTotListsize;
766  metadata[0].pcChargeIndexSize = inputpcChargeListsize;
767 
768  // Now handle space points if not in cluster-only mode
770  // Process pixel space points
771  ATH_MSG_DEBUG("Processing " << inputPSP.size() << " pixel space points");
772 
773  // loop over the pixel space points and transfer the data to the output
774  for (size_t i = 0; i < inputPSP.size(); i++) {
775  ef_pspOutput.spElementIdList[i] = inputPSP[i].idHash[0];
776  ef_pspOutput.spGlobalPosition[i * 3] = inputPSP[i].globalPosition[0];
777  ef_pspOutput.spGlobalPosition[i * 3 + 1] = inputPSP[i].globalPosition[1];
778  ef_pspOutput.spGlobalPosition[i * 3 + 2] = inputPSP[i].globalPosition[2];
779  ef_pspOutput.spVarianceR[i] = inputPSP[i].cov_r;
780  ef_pspOutput.spVarianceZ[i] = inputPSP[i].cov_z;
781  ef_pspOutput.spMeasurementIndexes[i] = i; // Index for linking
782  }
783 
784  // Process strip space points
785  ATH_MSG_DEBUG("Processing " << inputSSP.size() << " strip space points");
786 
787  // loop over the strip space points and transfer the data to the output
788  for (size_t i = 0; i < inputSSP.size(); i++) {
789  // For strip space points, we need two element IDs per space point
790  ef_sspOutput.spElementIdList[i * 2] = inputSSP[i].idHash[0];
791  ef_sspOutput.spElementIdList[i * 2 + 1] = inputSSP[i].idHash[1];
792 
793  // Position (x,y,z for each point)
794  ef_sspOutput.spGlobalPosition[i * 3] = inputSSP[i].globalPosition[0];
795  ef_sspOutput.spGlobalPosition[i * 3 + 1] = inputSSP[i].globalPosition[1];
796  ef_sspOutput.spGlobalPosition[i * 3 + 2] = inputSSP[i].globalPosition[2];
797 
798  // Two measurement indexes for strip space points
799  // placeholder values
800  ef_sspOutput.spMeasurementIndexes[i * 2] = i * 2;
801  ef_sspOutput.spMeasurementIndexes[i * 2 + 1] = i * 2 + 1;
802 
803  // Variance values
804  ef_sspOutput.spVarianceR[i] = inputSSP[i].cov_r;
805  ef_sspOutput.spVarianceZ[i] = inputSSP[i].cov_z;
806  }
807 
808  // Update metadata for space points
809  metadata[0].numOfPixelSpacePoints = inputPSP.size();
810  metadata[0].numOfStripSpacePoints = inputSSP.size();
811  } else {
812  // If we're processing clusters only, ensure space point counts are zero
813  metadata[0].numOfPixelSpacePoints = 0;
814  metadata[0].numOfStripSpacePoints = 0;
815  }
816 
817  ATH_MSG_DEBUG("Metadata: ");
818  ATH_MSG_DEBUG("numOfStripClusters: " << metadata[0].numOfStripClusters);
819  ATH_MSG_DEBUG("numOfPixelClusters: " << metadata[0].numOfPixelClusters);
820  ATH_MSG_DEBUG("numOfStripSpacePoints: " << metadata[0].numOfStripSpacePoints);
821  ATH_MSG_DEBUG("numOfPixelSpacePoints: " << metadata[0].numOfPixelSpacePoints);
822 
823  if (msgLvl(MSG::DEBUG)) {
824  // Print pixel space points
825  // add guard to prevent out of bounds access
826  // in instances of not having any/enough pixel space points
827  const int maxToPrintPixelSp = std::min<int>(3,
828  static_cast<int>(inputPSP.size()));
829  ATH_MSG_DEBUG("Printing first few pixel space points:");
830  for (int i = 0; i < maxToPrintPixelSp; i++) {
831  ATH_MSG_DEBUG("PixelSpacePoint[" << i << "]: "
832  << "position=(" << inputPSP[i].globalPosition[0] << ", "
833  << inputPSP[i].globalPosition[1] << ", "
834  << inputPSP[i].globalPosition[2] << ")"
835  << ", varianceR=" << inputPSP[i].cov_r
836  << ", varianceZ=" << inputPSP[i].cov_z);
837  }
838 
839  // Print strip space points
840  // add guard to prevent out of bounds access
841  // in instances of not having any/enough strip space points
842  const int maxToPrintStripSp = std::min<int>(3,
843  static_cast<int>(inputSSP.size()));
844  ATH_MSG_DEBUG("Printing first few strip space points:");
845  for (int i = 0; i < maxToPrintStripSp; i++) {
846  ATH_MSG_DEBUG("StripSpacePoint[" << i << "]: "
847  << "position=(" << inputSSP[i].globalPosition[0] << ", "
848  << inputSSP[i].globalPosition[1] << ", "
849  << inputSSP[i].globalPosition[2] << ")"
850  << ", varianceR=" << inputSSP[i].cov_r
851  << ", varianceZ=" << inputSSP[i].cov_z);
852  }
853  }
854 
855  return StatusCode::SUCCESS;
856 }

◆ passThroughSW_clusterOnly()

StatusCode PassThroughTool::passThroughSW_clusterOnly ( const std::vector< EFTrackingTransient::StripCluster > &  inputSC,
EFTrackingTransient::StripClusterOutput ef_scOutput,
const std::vector< EFTrackingTransient::PixelCluster > &  inputPC,
EFTrackingTransient::PixelClusterOutput ef_pcOutput,
EFTrackingTransient::Metadata metadata 
) const

This is a cluster-only version (sw) of the pass-through kernel This is used for cluter level studies.

Definition at line 859 of file PassThroughTool.cxx.

868 {
869  int rdoIndex_counter = 0;
870 
871  unsigned int inputscRdoIndexSize = 0;
872 
873  // transfer inputStripClusters
874  ATH_MSG_DEBUG("Transfering strip clusters...");
875  for (size_t i = 0; i < inputSC.size(); i++)
876  {
877  ef_scOutput.scLocalPosition[i] = inputSC[i].localPosition;
878  ef_scOutput.scLocalCovariance[i] = inputSC[i].localCovariance;
879  ef_scOutput.scIdHash[i] = inputSC[i].idHash;
880  ef_scOutput.scId[i] = inputSC[i].id;
881  ef_scOutput.scGlobalPosition[i * 3] = inputSC[i].globalPosition[0];
882  ef_scOutput.scGlobalPosition[i * 3 + 1] = inputSC[i].globalPosition[1];
883  ef_scOutput.scGlobalPosition[i * 3 + 2] = inputSC[i].globalPosition[2];
884 
885  inputscRdoIndexSize += inputSC[i].sizeOfRDOList;
886 
887  for (int j = 0; j < inputSC[i].sizeOfRDOList; j++)
888  {
889  ef_scOutput.scRdoList[rdoIndex_counter + j] = inputSC[i].rdoList[j];
890  }
891  // update the index counter
892  ef_scOutput.scChannelsInPhi[i] = inputSC[i].channelsInPhi;
893  rdoIndex_counter += inputSC[i].sizeOfRDOList;
894  metadata[0].scRdoIndex[i] = inputSC[i].sizeOfRDOList;
895  }
896 
897  // transfer inputPC
898  rdoIndex_counter = 0;
899  int totIndex_counter = 0;
900  int chargeIndex_counter = 0;
901 
902  unsigned int inputpcRdoIndexSize = 0;
903  unsigned int inputpcTotListsize = 0;
904  unsigned int inputpcChargeListsize = 0;
905 
906  // trasnsfer_pc:
907  ATH_MSG_DEBUG("Transfering pixel clusters...");
908  for (size_t i = 0; i < inputPC.size(); i++)
909  {
910  ef_pcOutput.pcLocalPosition[i * 2] = inputPC[i].localPosition[0];
911  ef_pcOutput.pcLocalPosition[i * 2 + 1] = inputPC[i].localPosition[1];
912  ef_pcOutput.pcLocalCovariance[i * 2] = inputPC[i].localCovariance[0];
913  ef_pcOutput.pcLocalCovariance[i * 2 + 1] = inputPC[i].localCovariance[1];
914  ef_pcOutput.pcIdHash[i] = inputPC[i].idHash;
915  ef_pcOutput.pcId[i] = inputPC[i].id;
916  ef_pcOutput.pcGlobalPosition[i * 3] = inputPC[i].globalPosition[0];
917  ef_pcOutput.pcGlobalPosition[i * 3 + 1] = inputPC[i].globalPosition[1];
918  ef_pcOutput.pcGlobalPosition[i * 3 + 2] = inputPC[i].globalPosition[2];
919 
920  inputpcRdoIndexSize += inputPC[i].sizeOfRDOList;
921 
922  for (int j = 0; j < inputPC[i].sizeOfRDOList; j++)
923  {
924  ef_pcOutput.pcRdoList[rdoIndex_counter + j] = inputPC[i].rdoList[j];
925  }
926  ef_pcOutput.pcChannelsInPhi[i] = inputPC[i].channelsInPhi;
927  ef_pcOutput.pcChannelsInEta[i] = inputPC[i].channelsInEta;
928  ef_pcOutput.pcWidthInEta[i] = inputPC[i].widthInEta;
929  ef_pcOutput.pcOmegaX[i] = inputPC[i].omegaX;
930  ef_pcOutput.pcOmegaY[i] = inputPC[i].omegaY;
931 
932  inputpcTotListsize += inputPC[i].sizeOfTotList;
933 
934  for (int j = 0; j < inputPC[i].sizeOfTotList; j++)
935  {
936  ef_pcOutput.pcTotList[totIndex_counter + j] = inputPC[i].totList[j];
937  }
938  ef_pcOutput.pcTotalToT[i] = inputPC[i].totalToT;
939 
940  inputpcChargeListsize += inputPC[i].sizeOfChargeList;
941 
942  for (int j = 0; j < inputPC[i].sizeOfChargeList; j++)
943  {
944  ef_pcOutput.pcChargeList[chargeIndex_counter + j] =
945  inputPC[i].chargeList[j];
946  }
947  ef_pcOutput.pcTotalCharge[i] = inputPC[i].totalCharge;
948  ef_pcOutput.pcEnergyLoss[i] = inputPC[i].energyLoss;
949  ef_pcOutput.pcIsSplit[i] = inputPC[i].isSplit;
950  ef_pcOutput.pcSplitProbability1[i] = inputPC[i].splitProbability1;
951  ef_pcOutput.pcSplitProbability2[i] = inputPC[i].splitProbability2;
952  ef_pcOutput.pcLvl1a[i] = inputPC[i].lvl1a;
953 
954  // update the index counter
955  rdoIndex_counter += inputPC[i].sizeOfRDOList;
956  totIndex_counter += inputPC[i].sizeOfTotList;
957  chargeIndex_counter += inputPC[i].sizeOfChargeList;
958  metadata[0].pcRdoIndex[i] = inputPC[i].sizeOfRDOList;
959  metadata[0].pcTotIndex[i] = inputPC[i].sizeOfTotList;
960  metadata[0].pcChargeIndex[i] = inputPC[i].sizeOfChargeList;
961  }
962  // transfer metadata
963  metadata[0].numOfStripClusters = inputSC.size();
964  metadata[0].numOfPixelClusters = inputPC.size();
965  metadata[0].scRdoIndexSize = inputscRdoIndexSize;
966  metadata[0].pcRdoIndexSize = inputpcRdoIndexSize;
967  metadata[0].pcTotIndexSize = inputpcTotListsize;
968  metadata[0].pcChargeIndexSize = inputpcChargeListsize;
969 
970  ATH_MSG_DEBUG("Metadata: ");
971  ATH_MSG_DEBUG("numOfStripClusters: " << metadata[0].numOfStripClusters);
972  ATH_MSG_DEBUG("numOfPixelClusters: " << metadata[0].numOfPixelClusters);
973  ATH_MSG_DEBUG("numOfStripSpacePoints: " << metadata[0].numOfStripSpacePoints);
974  ATH_MSG_DEBUG("numOfPixelSpacePoints: " << metadata[0].numOfPixelSpacePoints);
975 
976  // If we're processing clusters, we should also set up space point metadata
977  // This ensures downstream code knows there are no space points yet
978  metadata[0].numOfPixelSpacePoints = 0;
979  metadata[0].numOfStripSpacePoints = 0;
980 
981  ATH_MSG_DEBUG("Updated Metadata: ");
982  ATH_MSG_DEBUG("numOfPixelSpacePoints: " << metadata[0].numOfPixelSpacePoints);
983  ATH_MSG_DEBUG("numOfStripSpacePoints: " << metadata[0].numOfStripSpacePoints);
984 
985  return StatusCode::SUCCESS;
986 }

◆ runPassThrough()

StatusCode PassThroughTool::runPassThrough ( EFTrackingTransient::StripClusterAuxInput scAux,
EFTrackingTransient::PixelClusterAuxInput pxAux,
EFTrackingTransient::SpacePointAuxInput stripSpAux,
EFTrackingTransient::SpacePointAuxInput pixelSpAux,
EFTrackingTransient::Metadata metadata,
const EventContext &  ctx 
) const

Call this function at the DataPreparationPipeline to run the pass-through kernels.

Definition at line 23 of file PassThroughTool.cxx.

29 {
30  // Retrieve the strip and pixel cluster container from the event store
32  m_stripClustersKey, ctx);
34  m_pixelClustersKey, ctx);
35 
36  // Retrieve the space point container from the event store
38  m_spacePointsKey, ctx);
39 
40  // Check if the strip cluster container is valid
41  if (!inputStripClusters.isValid())
42  {
43  ATH_MSG_ERROR("Failed to retrieve: " << m_stripClustersKey);
44  return StatusCode::FAILURE;
45  }
46 
47  // Check if the pixel cluster container is valid
48  if (!inputPixelClusters.isValid())
49  {
50  ATH_MSG_ERROR("Failed to retrieve: " << m_pixelClustersKey);
51  return StatusCode::FAILURE;
52  }
53 
54  // Check if the space point container is valid
55  if (!inputSpacePoints.isValid())
56  {
57  ATH_MSG_ERROR("Failed to retrieve: " << m_spacePointsKey);
58  return StatusCode::FAILURE;
59  }
60 
61  if (msgLvl(MSG::DEBUG))
62  {
63  ATH_MSG_DEBUG("StripClusterContainer is valid");
64  ATH_MSG_DEBUG("PixelClusterContainer is valid");
65  ATH_MSG_DEBUG("SpacePointContainer is valid");
66  ATH_MSG_DEBUG("Size of pixel clusters is : " << inputPixelClusters->size());
67  ATH_MSG_DEBUG("Size of strip clusters is : " << inputStripClusters->size());
68  ATH_MSG_DEBUG("Size of space points is : " << inputSpacePoints->size());
69  }
70 
71  // Prepare the input data for the kernel
72  std::vector<EFTrackingTransient::StripCluster> ef_stripClusters;
73  std::vector<EFTrackingTransient::PixelCluster> ef_pixelClusters;
74  std::vector<EFTrackingTransient::SpacePoint> ef_pixelSpacePoints;
75  std::vector<EFTrackingTransient::SpacePoint> ef_stripSpacePoints;
76 
77  // Store measurement pointers for space points
78  std::vector<std::vector<const xAOD::UncalibratedMeasurement*>> pixelSpMeasurements;
79  std::vector<std::vector<const xAOD::UncalibratedMeasurement*>> stripSpMeasurements;
80 
81  // Get the input cluster data
82  ATH_CHECK(getInputClusterData(inputStripClusters.get(), ef_stripClusters, inputStripClusters->size()));
83  ATH_CHECK(getInputClusterData(inputPixelClusters.get(), ef_pixelClusters, inputPixelClusters->size()));
84 
85  // Get the input space point data
86  ATH_CHECK(getInputSpacePointData(inputSpacePoints.get(), ef_pixelSpacePoints, pixelSpMeasurements,
87  inputSpacePoints->size(), false));
88 
89  if (msgLvl(MSG::DEBUG))
90  { // add a guard to prevent out of bounds access
91  const int maxToPrintStripCl = std::min<int>(3, ef_stripClusters.size());
92  // Print a few clusters to verify the conversion
93  for (int i = 0; i < maxToPrintStripCl; i++)
94  {
95  ATH_MSG_DEBUG("StripCluster["
96  << i << "]: " << ef_stripClusters.at(i).localPosition
97  << ", " << ef_stripClusters.at(i).localCovariance << ", "
98  << ef_stripClusters.at(i).idHash << ", "
99  << ef_stripClusters.at(i).id << ", "
100  << ef_stripClusters.at(i).globalPosition[0] << ", "
101  << ef_stripClusters.at(i).globalPosition[1] << ", "
102  << ef_stripClusters.at(i).globalPosition[2] << ", "
103  << ef_stripClusters.at(i).rdoList[0] << ", "
104  << ef_stripClusters.at(i).channelsInPhi);
105  }
106  // Pixel clusters
107  const int maxToPrintPixelCl = std::min<int>(3, ef_pixelClusters.size());
108  for (int i = 0; i < maxToPrintPixelCl; i++)
109  {
110  ATH_MSG_DEBUG("PixelCluster["
111  << i << "]: " << ef_pixelClusters.at(i).id << ", "
112  << ef_pixelClusters.at(i).idHash << ", "
113  << ef_pixelClusters.at(i).localPosition[0] << ", "
114  << ef_pixelClusters.at(i).localPosition[1] << ", "
115  << ef_pixelClusters.at(i).localCovariance[0] << ", "
116  << ef_pixelClusters.at(i).localCovariance[1] << ", "
117  << ef_pixelClusters.at(i).globalPosition[0] << ", "
118  << ef_pixelClusters.at(i).globalPosition[1] << ", "
119  << ef_pixelClusters.at(i).globalPosition[2] << ", "
120  << ef_pixelClusters.at(i).rdoList[0] << ", "
121  << ef_pixelClusters.at(i).channelsInPhi << ", "
122  << ef_pixelClusters.at(i).channelsInEta << ", "
123  << ef_pixelClusters.at(i).widthInEta << ", "
124  << ef_pixelClusters.at(i).omegaX << ", "
125  << ef_pixelClusters.at(i).omegaY << ", "
126  << ef_pixelClusters.at(i).totList[0] << ", "
127  << ef_pixelClusters.at(i).totalToT << ", "
128  << ef_pixelClusters.at(i).chargeList[0] << ", "
129  << ef_pixelClusters.at(i).totalCharge << ", "
130  << ef_pixelClusters.at(i).energyLoss << ", "
131  << ef_pixelClusters.at(i).isSplit << ", "
132  << ef_pixelClusters.at(i).splitProbability1 << ", "
133  << ef_pixelClusters.at(i).splitProbability2 << ", "
134  << ef_pixelClusters.at(i).lvl1a);
135  }
136  }
137 
138  // Determine if we are running sw or hw
139  if (m_runSW)
140  {
141  ATH_MSG_INFO("Running the sw ver of the pass-through kernel");
142  // Strip cluster
143  std::vector<float> scLocalPosition(m_maxClusterNum);
144  std::vector<float> scLocalCovariance(m_maxClusterNum);
145  std::vector<unsigned int> scIdHash(m_maxClusterNum);
146  std::vector<long unsigned int> scId(m_maxClusterNum);
147  std::vector<float> scGlobalPosition(m_maxClusterNum * 3);
148  std::vector<unsigned long long> scRdoList(m_maxClusterNum * 5000);
149  std::vector<int> scChannelsInPhi(m_maxClusterNum);
150 
152 
153  ef_scOutput.scLocalPosition = scLocalPosition.data();
154  ef_scOutput.scLocalCovariance = scLocalCovariance.data();
155  ef_scOutput.scIdHash = scIdHash.data();
156  ef_scOutput.scId = scId.data();
157  ef_scOutput.scGlobalPosition = scGlobalPosition.data();
158  ef_scOutput.scRdoList = scRdoList.data();
159  ef_scOutput.scChannelsInPhi = scChannelsInPhi.data();
160 
161  // Pixel cluster
162  std::vector<float> pcLocalPosition(m_maxClusterNum * 2);
163  std::vector<float> pcLocalCovariance(m_maxClusterNum * 2);
164  std::vector<unsigned int> pcIdHash(m_maxClusterNum);
165  std::vector<long unsigned int> pcId(m_maxClusterNum);
166  std::vector<float> pcGlobalPosition(m_maxClusterNum * 3);
167  std::vector<unsigned long long> pcRdoList(m_maxClusterNum * 5000);
168  std::vector<int> pcChannelsInPhi(m_maxClusterNum);
169  std::vector<int> pcChannelsInEta(m_maxClusterNum);
170  std::vector<float> pcWidthInEta(m_maxClusterNum);
171  std::vector<float> pcOmegaX(m_maxClusterNum);
172  std::vector<float> pcOmegaY(m_maxClusterNum);
173  std::vector<int> pcTotList(m_maxClusterNum * 5000);
174  std::vector<int> pcTotalToT(m_maxClusterNum);
175  std::vector<float> pcChargeList(m_maxClusterNum * 5000);
176  std::vector<float> pcTotalCharge(m_maxClusterNum);
177  std::vector<float> pcEnergyLoss(m_maxClusterNum);
178  std::vector<char> pcIsSplit(m_maxClusterNum);
179  std::vector<float> pcSplitProbability1(m_maxClusterNum);
180  std::vector<float> pcSplitProbability2(m_maxClusterNum);
181  std::vector<int> pcLvl1a(m_maxClusterNum);
182 
184 
185  ef_pcOutput.pcLocalPosition = pcLocalPosition.data();
186  ef_pcOutput.pcLocalCovariance = pcLocalCovariance.data();
187  ef_pcOutput.pcIdHash = pcIdHash.data();
188  ef_pcOutput.pcId = pcId.data();
189  ef_pcOutput.pcGlobalPosition = pcGlobalPosition.data();
190  ef_pcOutput.pcRdoList = pcRdoList.data();
191  ef_pcOutput.pcChannelsInPhi = pcChannelsInPhi.data();
192  ef_pcOutput.pcChannelsInEta = pcChannelsInEta.data();
193  ef_pcOutput.pcWidthInEta = pcWidthInEta.data();
194  ef_pcOutput.pcOmegaX = pcOmegaX.data();
195  ef_pcOutput.pcOmegaY = pcOmegaY.data();
196  ef_pcOutput.pcTotList = pcTotList.data();
197  ef_pcOutput.pcTotalToT = pcTotalToT.data();
198  ef_pcOutput.pcChargeList = pcChargeList.data();
199  ef_pcOutput.pcTotalCharge = pcTotalCharge.data();
200  ef_pcOutput.pcEnergyLoss = pcEnergyLoss.data();
201  ef_pcOutput.pcIsSplit = pcIsSplit.data();
202  ef_pcOutput.pcSplitProbability1 = pcSplitProbability1.data();
203  ef_pcOutput.pcSplitProbability2 = pcSplitProbability2.data();
204  ef_pcOutput.pcLvl1a = pcLvl1a.data();
205 
206  // Space point output structures
207  std::vector<unsigned int> pspIdHash(m_maxSpacePointNum);
208  std::vector<float> pspGlobalPosition(m_maxSpacePointNum * 3);
209  std::vector<float> pspRadius(m_maxSpacePointNum);
210  std::vector<float> pspVarianceR(m_maxSpacePointNum);
211  std::vector<float> pspVarianceZ(m_maxSpacePointNum);
212  std::vector<int> pspMeasurementIndexes(m_maxSpacePointNum);
213  std::vector<unsigned int> pspElementIdList(m_maxSpacePointNum);
214 
216  ef_pspOutput.spIdHash = pspIdHash.data();
217  ef_pspOutput.spGlobalPosition = pspGlobalPosition.data();
218  ef_pspOutput.spRadius = pspRadius.data();
219  ef_pspOutput.spVarianceR = pspVarianceR.data();
220  ef_pspOutput.spVarianceZ = pspVarianceZ.data();
221  ef_pspOutput.spMeasurementIndexes = pspMeasurementIndexes.data();
222  ef_pspOutput.spElementIdList = pspElementIdList.data();
223 
224  // Strip space point
225  std::vector<unsigned int> sspIdHash(m_maxSpacePointNum);
226  std::vector<float> sspGlobalPosition(m_maxSpacePointNum * 3);
227  std::vector<float> sspRadius(m_maxSpacePointNum);
228  std::vector<float> sspVarianceR(m_maxSpacePointNum);
229  std::vector<float> sspVarianceZ(m_maxSpacePointNum);
230  std::vector<int> sspMeasurementIndexes(m_maxSpacePointNum);
231  std::vector<unsigned int> sspElementIdList(m_maxSpacePointNum);
232 
234  ef_sspOutput.spIdHash = sspIdHash.data();
235  ef_sspOutput.spGlobalPosition = sspGlobalPosition.data();
236  ef_sspOutput.spRadius = sspRadius.data();
237  ef_sspOutput.spVarianceR = sspVarianceR.data();
238  ef_sspOutput.spVarianceZ = sspVarianceZ.data();
239  ef_sspOutput.spMeasurementIndexes = sspMeasurementIndexes.data();
240  ef_sspOutput.spElementIdList = sspElementIdList.data();
241 
242  // Process clusters and optionally space points if enabled
244  ATH_CHECK(passThroughSW_clusterOnly(ef_stripClusters, ef_scOutput,
245  ef_pixelClusters, ef_pcOutput,
246  metadata));
247  } else {
248  ATH_CHECK(passThroughSW(ef_stripClusters, ef_scOutput,
249  ef_pixelClusters, ef_pcOutput,
250  ef_stripSpacePoints, ef_sspOutput,
251  ef_pixelSpacePoints, ef_pspOutput,
252  metadata));
253  }
254 
255  // resize the vector to be the length of the cluster
256  scLocalPosition.resize(metadata->numOfStripClusters);
257  scLocalCovariance.resize(metadata->numOfStripClusters);
258  scIdHash.resize(metadata->numOfStripClusters);
259  scId.resize(metadata->numOfStripClusters);
260  scGlobalPosition.resize(metadata->numOfStripClusters * 3);
261  scRdoList.resize(metadata->scRdoIndexSize);
262  scChannelsInPhi.resize(metadata->numOfStripClusters);
263 
264  pcLocalPosition.resize(metadata->numOfPixelClusters * 2);
265  pcLocalCovariance.resize(metadata->numOfPixelClusters * 2);
266  pcIdHash.resize(metadata->numOfPixelClusters);
267  pcId.resize(metadata->numOfPixelClusters);
268  pcGlobalPosition.resize(metadata->numOfPixelClusters * 3);
269  pcRdoList.resize(metadata->pcRdoIndexSize);
270  pcChannelsInPhi.resize(metadata->numOfPixelClusters);
271  pcChannelsInEta.resize(metadata->numOfPixelClusters);
272  pcWidthInEta.resize(metadata->numOfPixelClusters);
273  pcOmegaX.resize(metadata->numOfPixelClusters);
274  pcOmegaY.resize(metadata->numOfPixelClusters);
275  pcTotList.resize(metadata->pcTotIndexSize);
276  pcTotalToT.resize(metadata->numOfPixelClusters);
277  pcChargeList.resize(metadata->pcChargeIndexSize);
278  pcTotalCharge.resize(metadata->numOfPixelClusters);
279  pcEnergyLoss.resize(metadata->numOfPixelClusters);
280  pcIsSplit.resize(metadata->numOfPixelClusters);
281  pcSplitProbability1.resize(metadata->numOfPixelClusters);
282  pcSplitProbability2.resize(metadata->numOfPixelClusters);
283  pcLvl1a.resize(metadata->numOfPixelClusters);
284 
285  if (msgLvl(MSG::DEBUG)) {
286  // add guard to prevent out of bounds access
287  // in instances of not having any/enough stip clusters
288  const unsigned int nStripClustersToPrint = std::min(3u,
289  static_cast<unsigned int>(scLocalPosition.size()));
290  // print 3 strip clusters
291  for (unsigned i = 0; i < nStripClustersToPrint; i++)
292  {
293  ATH_MSG_DEBUG("scLocalPosition["
294  << i << "] = " << ef_scOutput.scLocalPosition[i]);
295  ATH_MSG_DEBUG("scLocalCovariance["
296  << i << "] = " << ef_scOutput.scLocalCovariance[i]);
297  ATH_MSG_DEBUG("scIdHash[" << i << "] = " << ef_scOutput.scIdHash[i]);
298  ATH_MSG_DEBUG("scId[" << i << "] = " << ef_scOutput.scId[i]);
299  ATH_MSG_DEBUG("scGlobalPosition["
300  << i << "] = " << ef_scOutput.scGlobalPosition[i * 3] << ", "
301  << ef_scOutput.scGlobalPosition[i * 3 + 1] << ", "
302  << ef_scOutput.scGlobalPosition[i * 3 + 2]);
303  ATH_MSG_DEBUG("scRdoList[" << i << "] = " << ef_scOutput.scRdoList[i]);
304  ATH_MSG_DEBUG("scChannelsInPhi["
305  << i << "] = " << ef_scOutput.scChannelsInPhi[i]);
306  }
307 
308  // print 3 pixel clusters
309  const unsigned int nPixelClustersToPrint = std::min(3u,
310  static_cast<unsigned int>(pcLocalPosition.size()));
311  // add guard to prevent out of bounds access; same logic as above
312  for (unsigned i = 0; i < nPixelClustersToPrint; i++)
313  {
314  ATH_MSG_DEBUG("pcLocalPosition["
315  << i << "] = " << ef_pcOutput.pcLocalPosition[i * 2] << ", "
316  << ef_pcOutput.pcLocalPosition[i * 2 + 1]);
317  ATH_MSG_DEBUG("pcLocalCovariance["
318  << i << "] = " << ef_pcOutput.pcLocalCovariance[i * 2] << ", "
319  << ef_pcOutput.pcLocalCovariance[i * 2 + 1]);
320  ATH_MSG_DEBUG("pcIdHash[" << i << "] = " << ef_pcOutput.pcIdHash[i]);
321  ATH_MSG_DEBUG("pcId[" << i << "] = " << ef_pcOutput.pcId[i]);
322  ATH_MSG_DEBUG("pcGlobalPosition["
323  << i << "] = " << ef_pcOutput.pcGlobalPosition[i * 3] << ", "
324  << ef_pcOutput.pcGlobalPosition[i * 3 + 1] << ", "
325  << ef_pcOutput.pcGlobalPosition[i * 3 + 2]);
326  ATH_MSG_DEBUG("pcRdoList[" << i << "] = " << ef_pcOutput.pcRdoList[i]);
327  ATH_MSG_DEBUG("pcChannelsInPhi["
328  << i << "] = " << ef_pcOutput.pcChannelsInPhi[i]);
329  ATH_MSG_DEBUG("pcChannelsInEta["
330  << i << "] = " << ef_pcOutput.pcChannelsInEta[i]);
331  ATH_MSG_DEBUG("pcWidthInEta["
332  << i << "] = " << ef_pcOutput.pcWidthInEta[i]);
333  ATH_MSG_DEBUG("pcOmegaX[" << i << "] = " << ef_pcOutput.pcOmegaX[i]);
334  ATH_MSG_DEBUG("pcOmegaY[" << i << "] = " << ef_pcOutput.pcOmegaY[i]);
335  ATH_MSG_DEBUG("pcTotList[" << i << "] = " << ef_pcOutput.pcTotList[i]);
336  ATH_MSG_DEBUG("pcTotalToT["
337  << i << "] = " << ef_pcOutput.pcTotalToT[i]);
338  ATH_MSG_DEBUG("pcChargeList["
339  << i << "] = " << ef_pcOutput.pcChargeList[i]);
340  ATH_MSG_DEBUG("pcTotalCharge["
341  << i << "] = " << ef_pcOutput.pcTotalCharge[i]);
342  ATH_MSG_DEBUG("pcEnergyLoss["
343  << i << "] = " << ef_pcOutput.pcEnergyLoss[i]);
344  ATH_MSG_DEBUG("pcIsSplit[" << i << "] = " << ef_pcOutput.pcIsSplit[i]);
345  ATH_MSG_DEBUG("pcSplitProbability1["
346  << i << "] = " << ef_pcOutput.pcSplitProbability1[i]);
347  ATH_MSG_DEBUG("pcSplitProbability2["
348  << i << "] = " << ef_pcOutput.pcSplitProbability2[i]);
349  ATH_MSG_DEBUG("pcLvl1a[" << i << "] = " << ef_pcOutput.pcLvl1a[i]);
350  }
351  }
352 
353  // Group data to make the strip cluster container
354  scAux.localPosition = std::move(scLocalPosition);
355  scAux.localCovariance = std::move(scLocalCovariance);
356  scAux.idHash = std::move(scIdHash);
357  scAux.id = std::move(scId);
358  scAux.globalPosition = std::move(scGlobalPosition);
359  scAux.rdoList = std::move(scRdoList);
360  scAux.channelsInPhi = std::move(scChannelsInPhi);
361 
362  // Group data to make the pixel cluster container
363  pxAux.id = std::move(pcId);
364  pxAux.idHash = std::move(pcIdHash);
365  pxAux.localPosition = std::move(pcLocalPosition);
366  pxAux.localCovariance = std::move(pcLocalCovariance);
367  pxAux.globalPosition = std::move(pcGlobalPosition);
368  pxAux.rdoList = std::move(pcRdoList);
369  pxAux.channelsInPhi = std::move(pcChannelsInPhi);
370  pxAux.channelsInEta = std::move(pcChannelsInEta);
371  pxAux.widthInEta = std::move(pcWidthInEta);
372  pxAux.omegaX = std::move(pcOmegaX);
373  pxAux.omegaY = std::move(pcOmegaY);
374  pxAux.totList = std::move(pcTotList);
375  pxAux.totalToT = std::move(pcTotalToT);
376  pxAux.chargeList = std::move(pcChargeList);
377  pxAux.totalCharge = std::move(pcTotalCharge);
378  pxAux.energyLoss = std::move(pcEnergyLoss);
379  pxAux.isSplit = std::move(pcIsSplit);
380  pxAux.splitProbability1 = std::move(pcSplitProbability1);
381  pxAux.splitProbability2 = std::move(pcSplitProbability2);
382  pxAux.lvl1a = std::move(pcLvl1a);
383 
384  // Transfer pixel space point data to pixelSpAux
385  for (unsigned int i = 0; i < metadata->numOfPixelSpacePoints; i++) {
386  pixelSpAux.elementIdList.push_back(ef_pspOutput.spElementIdList[i]);
387 
388  // Copy x,y,z position
389  pixelSpAux.globalPosition.push_back(ef_pspOutput.spGlobalPosition[i*3]);
390  pixelSpAux.globalPosition.push_back(ef_pspOutput.spGlobalPosition[i*3+1]);
391  pixelSpAux.globalPosition.push_back(ef_pspOutput.spGlobalPosition[i*3+2]);
392 
393  pixelSpAux.measurementIndexes.push_back(ef_pspOutput.spMeasurementIndexes[i]);
394  pixelSpAux.varianceR.push_back(ef_pspOutput.spVarianceR[i]);
395  pixelSpAux.varianceZ.push_back(ef_pspOutput.spVarianceZ[i]);
396  }
397 
398  // Transfer strip space point data to stripSpAux
399  for (unsigned int i = 0; i < metadata->numOfStripSpacePoints; i++) {
400  // For strip space points, add both element IDs
401  stripSpAux.elementIdList.push_back(ef_sspOutput.spElementIdList[i*2]);
402  stripSpAux.elementIdList.push_back(ef_sspOutput.spElementIdList[i*2+1]);
403 
404  // Add position data
405  stripSpAux.globalPosition.push_back(ef_sspOutput.spGlobalPosition[i*3]);
406  stripSpAux.globalPosition.push_back(ef_sspOutput.spGlobalPosition[i*3+1]);
407  stripSpAux.globalPosition.push_back(ef_sspOutput.spGlobalPosition[i*3+2]);
408 
409  // Add measurement indexes
410  stripSpAux.measurementIndexes.push_back(ef_sspOutput.spMeasurementIndexes[i*2]);
411  stripSpAux.measurementIndexes.push_back(ef_sspOutput.spMeasurementIndexes[i*2+1]);
412 
413  // Add variance data
414  stripSpAux.varianceR.push_back(ef_sspOutput.spVarianceR[i]);
415  stripSpAux.varianceZ.push_back(ef_sspOutput.spVarianceZ[i]);
416  }
417 
418 
419  if (msgLvl(MSG::DEBUG)) {
420  // add guard to prevent out of bounds access
421  // in instances of not having any/enough strip space points
422  const int maxToPrintStripSp = std::min<int>(3,
423  static_cast<int>(stripSpAux.elementIdList.size()));
424  // Print strip space points
425  ATH_MSG_DEBUG("Printing first few strip space points:");
426  for (int i = 0; i < maxToPrintStripSp; i++) {
427  ATH_MSG_DEBUG("StripSpacePoint[" << i << "]: "
428  << "position=(" << stripSpAux.globalPosition[i*3] << ", "
429  << stripSpAux.globalPosition[i*3+1] << ", "
430  << stripSpAux.globalPosition[i*3+2] << ")"
431  << ", varianceR=" << stripSpAux.varianceR[i]
432  << ", varianceZ=" << stripSpAux.varianceZ[i]);
433  }
434  // Print pixel space points
435  ATH_MSG_DEBUG("Printing first few pixel space points:");
436  // add guard to prevent out of bounds access
437  // in instances of not having any/enough pixel space points
438  const int maxToPrintPixelSp = std::min<int>(3,
439  static_cast<int>(pixelSpAux.elementIdList.size()));
440  for (int i = 0; i < maxToPrintPixelSp; i++) {
441  ATH_MSG_DEBUG("PixelSpacePoint[" << i << "]: "
442  << "position=(" << pixelSpAux.globalPosition[i*3] << ", "
443  << pixelSpAux.globalPosition[i*3+1] << ", "
444  << pixelSpAux.globalPosition[i*3+2] << ")"
445  << ", varianceR=" << pixelSpAux.varianceR[i]
446  << ", varianceZ=" << pixelSpAux.varianceZ[i]);
447  }
448 
449  }
450  }
451  else
452  {
453  ATH_MSG_INFO("FPGA mode is not implemented yet");
454  return StatusCode::SUCCESS;
455  }
456 
457  return StatusCode::SUCCESS;
458 }

◆ runSW()

bool PassThroughTool::runSW ( ) const
inline

A getter for the m_runSW property.

Determine if the user set the tool to run at software level. If yes, the sw version of the pass-through kernel will be executed. If not, the FPGA (hw) version will be executed

Definition at line 119 of file PassThroughTool.h.

119 { return m_runSW; }

Member Data Documentation

◆ m_clusterOnlyPassThrough

Gaudi::Property<bool> PassThroughTool::m_clusterOnlyPassThrough
private
Initial value:
{this, "ClusterOnlyPassThrough", false,
"Use the cluster-only pass-through kernel"}

Use the cluster-only pass through tool

Definition at line 125 of file PassThroughTool.h.

◆ m_doSpacepoints

Gaudi::Property<bool> PassThroughTool::m_doSpacepoints {this, "DoSpacepoints", false, "Do spacepoints"}
private

Temporary flag before spacepoints are ready.

Definition at line 124 of file PassThroughTool.h.

◆ m_maxClusterNum

Gaudi::Property<unsigned int> PassThroughTool::m_maxClusterNum
private
Initial value:
{this, "MaxClusterNum", 500000,
"Maximum number of clusters that can be processed"}

Definition at line 127 of file PassThroughTool.h.

◆ m_maxSpacePointNum

Gaudi::Property<unsigned int> PassThroughTool::m_maxSpacePointNum
private
Initial value:
{this, "MaxSpacePointNum", 500000,
"Maximum number of space points that can be processed"}

Definition at line 129 of file PassThroughTool.h.

◆ m_pixelClustersKey

SG::ReadHandleKey<xAOD::PixelClusterContainer> PassThroughTool::m_pixelClustersKey
private
Initial value:
{
this, "PixelClusterContainerKey", "ITkPixelClusters",
"Key for Pixel Cluster Containers"}

Definition at line 136 of file PassThroughTool.h.

◆ m_runSW

Gaudi::Property<bool> PassThroughTool::m_runSW {this, "RunSW", true, "Run software mode"}
private

Software mode, not running on the FPGA.

Definition at line 123 of file PassThroughTool.h.

◆ m_spacePointsKey

SG::ReadHandleKey<xAOD::SpacePointContainer> PassThroughTool::m_spacePointsKey
private
Initial value:
{
this, "SpacePointContainerKey", "ITkPixelSpacePoints",
"Key for Space Point Containers"}

Definition at line 139 of file PassThroughTool.h.

◆ m_stripClustersKey

SG::ReadHandleKey<xAOD::StripClusterContainer> PassThroughTool::m_stripClustersKey
private
Initial value:
{
this, "StripClusterContainerKey", "ITkStripClusters",
"Key for Strip Cluster Containers"}

Definition at line 133 of file PassThroughTool.h.


The documentation for this class was generated from the following files:
EFTrackingTransient::PixelCluster::totList
int totList[1000]
Definition: EFTrackingTransient.h:74
EFTrackingTransient::StripClusterOutput::scRdoList
unsigned long long * scRdoList
Definition: EFTrackingTransient.h:145
EFTrackingTransient::PixelCluster
The PixelClusters struct contains all xAOD::PixelCluster data members.
Definition: EFTrackingTransient.h:62
EFTrackingTransient::SpacePointOutput::spGlobalPosition
float * spGlobalPosition
Definition: EFTrackingTransient.h:188
EFTrackingTransient::PixelClusterAuxInput::localPosition
std::vector< float > localPosition
Definition: EFTrackingTransient.h:225
EFTrackingTransient::PixelClusterAuxInput::channelsInEta
std::vector< int > channelsInEta
Definition: EFTrackingTransient.h:230
PassThroughTool::m_runSW
Gaudi::Property< bool > m_runSW
Software mode, not running on the FPGA.
Definition: PassThroughTool.h:123
EFTrackingTransient::PixelCluster::sizeOfRDOList
int sizeOfRDOList
Definition: EFTrackingTransient.h:83
EFTrackingTransient::PixelCluster::lvl1a
int lvl1a
Definition: EFTrackingTransient.h:82
EFTrackingTransient::PixelClusterAuxInput::chargeList
std::vector< float > chargeList
Definition: EFTrackingTransient.h:236
EFTrackingTransient::StripClusterAuxInput::globalPosition
std::vector< float > globalPosition
Definition: EFTrackingTransient.h:212
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
EFTrackingTransient::PixelClusterOutput::pcIdHash
unsigned int * pcIdHash
Definition: EFTrackingTransient.h:158
EFTrackingTransient::PixelClusterAuxInput::splitProbability2
std::vector< float > splitProbability2
Definition: EFTrackingTransient.h:241
EFTrackingTransient::PixelCluster::idHash
unsigned int idHash
Definition: EFTrackingTransient.h:64
EFTrackingTransient::PixelClusterOutput::pcSplitProbability2
float * pcSplitProbability2
Definition: EFTrackingTransient.h:174
EFTrackingTransient::PixelCluster::sizeOfChargeList
int sizeOfChargeList
Definition: EFTrackingTransient.h:85
EFTrackingTransient::PixelCluster::splitProbability2
float splitProbability2
Definition: EFTrackingTransient.h:81
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
EFTrackingTransient::PixelClusterOutput::pcSplitProbability1
float * pcSplitProbability1
Definition: EFTrackingTransient.h:173
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
EFTrackingTransient::PixelClusterOutput::pcEnergyLoss
float * pcEnergyLoss
Definition: EFTrackingTransient.h:171
EFTrackingTransient::PixelClusterAuxInput::totalCharge
std::vector< float > totalCharge
Definition: EFTrackingTransient.h:237
EFTrackingTransient::StripClusterAuxInput::localCovariance
std::vector< float > localCovariance
Definition: EFTrackingTransient.h:209
EFTrackingTransient::SpacePointOutput::spMeasurementIndexes
int * spMeasurementIndexes
Definition: EFTrackingTransient.h:192
PassThroughTool::passThroughSW_clusterOnly
StatusCode passThroughSW_clusterOnly(const std::vector< EFTrackingTransient::StripCluster > &inputSC, EFTrackingTransient::StripClusterOutput &ef_scOutput, const std::vector< EFTrackingTransient::PixelCluster > &inputPC, EFTrackingTransient::PixelClusterOutput &ef_pcOutput, EFTrackingTransient::Metadata *metadata) const
This is a cluster-only version (sw) of the pass-through kernel This is used for cluter level studies.
Definition: PassThroughTool.cxx:859
PassThroughTool::m_spacePointsKey
SG::ReadHandleKey< xAOD::SpacePointContainer > m_spacePointsKey
Definition: PassThroughTool.h:139
EFTrackingTransient::PixelClusterOutput::pcTotalCharge
float * pcTotalCharge
Definition: EFTrackingTransient.h:170
EFTrackingTransient::PixelClusterOutput::pcChargeList
float * pcChargeList
Definition: EFTrackingTransient.h:169
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
PassThroughTool::m_stripClustersKey
SG::ReadHandleKey< xAOD::StripClusterContainer > m_stripClustersKey
Definition: PassThroughTool.h:133
EFTrackingTransient::SpacePoint::bottomStripDirection
float bottomStripDirection[3]
Definition: EFTrackingTransient.h:107
EFTrackingTransient::SpacePoint::topHalfStripLength
float topHalfStripLength
Definition: EFTrackingTransient.h:104
EFTrackingTransient::SpacePoint::bottomHalfStripLength
float bottomHalfStripLength
Definition: EFTrackingTransient.h:105
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
EFTrackingTransient::StripClusterAuxInput::rdoList
std::vector< unsigned long long > rdoList
Definition: EFTrackingTransient.h:213
EFTrackingTransient::StripCluster
The StripClusters struct contains all xAOD::StripCluster data members.
Definition: EFTrackingTransient.h:44
EFTrackingTransient::PixelClusterOutput::pcLocalCovariance
float * pcLocalCovariance
Definition: EFTrackingTransient.h:157
EFTrackingTransient::PixelCluster::omegaY
float omegaY
Definition: EFTrackingTransient.h:73
EFTrackingTransient::PixelClusterOutput::pcId
long unsigned int * pcId
Definition: EFTrackingTransient.h:159
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
EFTrackingTransient::SpacePointOutput::spVarianceR
float * spVarianceR
Definition: EFTrackingTransient.h:190
EFTrackingTransient::PixelCluster::sizeOfTotList
int sizeOfTotList
Definition: EFTrackingTransient.h:84
EFTrackingTransient::SpacePointOutput::spIdHash
unsigned int * spIdHash
Definition: EFTrackingTransient.h:187
EFTrackingTransient::SpacePointOutput::spVarianceZ
float * spVarianceZ
Definition: EFTrackingTransient.h:191
EFTrackingTransient::PixelCluster::channelsInPhi
int channelsInPhi
Definition: EFTrackingTransient.h:69
python.checkMetadata.metadata
metadata
Definition: checkMetadata.py:175
EFTrackingTransient::PixelCluster::rdoList
unsigned long long rdoList[1000]
Definition: EFTrackingTransient.h:68
EFTrackingTransient::StripCluster::globalPosition
float globalPosition[3]
Definition: EFTrackingTransient.h:49
EFTrackingTransient::SpacePoint::stripCenterDistance
float stripCenterDistance[3]
Definition: EFTrackingTransient.h:108
EFTrackingTransient::SpacePoint
The SpacePoint struct contains all xAOD::SpacePoint data members.
Definition: EFTrackingTransient.h:95
EFTrackingTransient::StripCluster::localCovariance
float localCovariance
Definition: EFTrackingTransient.h:46
EFTrackingTransient::StripClusterOutput::scIdHash
unsigned int * scIdHash
Definition: EFTrackingTransient.h:142
PassThroughTool::m_maxSpacePointNum
Gaudi::Property< unsigned int > m_maxSpacePointNum
Definition: PassThroughTool.h:129
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
PassThroughTool::getInputClusterData
StatusCode getInputClusterData(const xAOD::StripClusterContainer *sc, std::vector< EFTrackingTransient::StripCluster > &ef_sc, unsigned long N) const
Convert the strip cluster from xAOD container to simple std::vector of EFTrackingTransient::StripClus...
Definition: PassThroughTool.cxx:460
EFTrackingTransient::PixelClusterAuxInput::rdoList
std::vector< unsigned long long > rdoList
Definition: EFTrackingTransient.h:228
PassThroughTool::m_clusterOnlyPassThrough
Gaudi::Property< bool > m_clusterOnlyPassThrough
Use the cluster-only pass through tool
Definition: PassThroughTool.h:125
EFTrackingTransient::PixelCluster::chargeList
float chargeList[1000]
Definition: EFTrackingTransient.h:76
lumiFormat.i
int i
Definition: lumiFormat.py:85
EFTrackingTransient::PixelClusterAuxInput::localCovariance
std::vector< float > localCovariance
Definition: EFTrackingTransient.h:226
EFTrackingTransient::SpacePoint::cov_r
float cov_r
Definition: EFTrackingTransient.h:100
EFTrackingTransient::SpacePointAuxInput::varianceR
std::vector< float > varianceR
Definition: EFTrackingTransient.h:256
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
EFTrackingTransient::PixelClusterOutput::pcLocalPosition
float * pcLocalPosition
Definition: EFTrackingTransient.h:156
EFTrackingTransient::StripClusterOutput::scLocalCovariance
float * scLocalCovariance
Definition: EFTrackingTransient.h:141
EFTrackingTransient::SpacePointAuxInput::globalPosition
std::vector< float > globalPosition
Definition: EFTrackingTransient.h:254
EFTrackingTransient::StripClusterAuxInput::idHash
std::vector< unsigned int > idHash
Definition: EFTrackingTransient.h:210
EFTrackingTransient::StripClusterOutput::scId
long unsigned int * scId
Definition: EFTrackingTransient.h:143
EFTrackingTransient::PixelCluster::splitProbability1
float splitProbability1
Definition: EFTrackingTransient.h:80
EFTrackingTransient::SpacePointAuxInput::varianceZ
std::vector< float > varianceZ
Definition: EFTrackingTransient.h:257
EFTrackingTransient::PixelCluster::channelsInEta
int channelsInEta
Definition: EFTrackingTransient.h:70
EFTrackingTransient::PixelClusterAuxInput::totalToT
std::vector< int > totalToT
Definition: EFTrackingTransient.h:235
EFTrackingTransient::PixelClusterOutput::pcWidthInEta
float * pcWidthInEta
Definition: EFTrackingTransient.h:164
EFTrackingTransient::PixelClusterOutput::pcIsSplit
char * pcIsSplit
Definition: EFTrackingTransient.h:172
EFTrackingTransient::SpacePointOutput::spElementIdList
unsigned int * spElementIdList
Definition: EFTrackingTransient.h:193
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
EFTrackingTransient::PixelClusterOutput::pcRdoList
unsigned long long * pcRdoList
Definition: EFTrackingTransient.h:161
EFTrackingTransient::PixelCluster::widthInEta
float widthInEta
Definition: EFTrackingTransient.h:71
EFTrackingTransient::PixelCluster::totalCharge
float totalCharge
Definition: EFTrackingTransient.h:77
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
EFTrackingTransient::SpacePoint::topStripDirection
float topStripDirection[3]
Definition: EFTrackingTransient.h:106
EFTrackingTransient::SpacePointAuxInput::measurementIndexes
std::vector< int > measurementIndexes
Definition: EFTrackingTransient.h:264
EFTrackingTransient::StripCluster::id
long unsigned int id
Definition: EFTrackingTransient.h:48
EFTrackingTransient::StripClusterOutput::scLocalPosition
float * scLocalPosition
Definition: EFTrackingTransient.h:140
EFTrackingTransient::PixelClusterAuxInput::splitProbability1
std::vector< float > splitProbability1
Definition: EFTrackingTransient.h:240
EFTrackingTransient::PixelClusterAuxInput::idHash
std::vector< unsigned int > idHash
Definition: EFTrackingTransient.h:224
EFTrackingTransient::PixelClusterAuxInput::lvl1a
std::vector< int > lvl1a
Definition: EFTrackingTransient.h:242
EFTrackingTransient::SpacePointAuxInput::elementIdList
std::vector< unsigned int > elementIdList
Definition: EFTrackingTransient.h:253
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
EFTrackingTransient::StripClusterOutput
The StripClusters struct contains the output arrays from the FPGA.
Definition: EFTrackingTransient.h:138
EFTrackingTransient::StripCluster::sizeOfRDOList
int sizeOfRDOList
Definition: EFTrackingTransient.h:52
EFTrackingTransient::StripClusterAuxInput::localPosition
std::vector< float > localPosition
Definition: EFTrackingTransient.h:208
EFTrackingTransient::PixelCluster::isSplit
char isSplit
Definition: EFTrackingTransient.h:79
PassThroughTool::getInputSpacePointData
StatusCode getInputSpacePointData(const xAOD::SpacePointContainer *sp, std::vector< EFTrackingTransient::SpacePoint > &ef_sp, std::vector< std::vector< const xAOD::UncalibratedMeasurement * >> &sp_meas, unsigned long N, bool isStrip) const
Convert the space point from xAOD container to simple std::vector of EFTrackingTransient::SpacePoint.
Definition: PassThroughTool.cxx:569
EFTrackingTransient::SpacePointOutput
The Pixel/Strip SpacePoints struct contains the output arrays from the FPGA.
Definition: EFTrackingTransient.h:185
EFTrackingTransient::StripCluster::idHash
unsigned int idHash
Definition: EFTrackingTransient.h:47
EFTrackingTransient::PixelClusterAuxInput::channelsInPhi
std::vector< int > channelsInPhi
Definition: EFTrackingTransient.h:229
PassThroughTool::passThroughSW
StatusCode passThroughSW(const std::vector< EFTrackingTransient::StripCluster > &inputSC, EFTrackingTransient::StripClusterOutput &ef_scOutput, const std::vector< EFTrackingTransient::PixelCluster > &inputPC, EFTrackingTransient::PixelClusterOutput &ef_pcOutput, const std::vector< EFTrackingTransient::SpacePoint > &inputSSP, EFTrackingTransient::SpacePointOutput &ef_sspOutput, const std::vector< EFTrackingTransient::SpacePoint > &inputPSP, EFTrackingTransient::SpacePointOutput &ef_pspOutput, EFTrackingTransient::Metadata *metadata) const
Software version of the pass-through kernel.
Definition: PassThroughTool.cxx:636
EFTrackingTransient::PixelCluster::localCovariance
float localCovariance[2]
Definition: EFTrackingTransient.h:66
EFTrackingTransient::StripClusterOutput::scGlobalPosition
float * scGlobalPosition
Definition: EFTrackingTransient.h:144
EFTrackingTransient::PixelClusterOutput
The PixelClusters struct contains the output arrays from the FPGA.
Definition: EFTrackingTransient.h:154
EFTrackingTransient::PixelClusterOutput::pcChannelsInEta
int * pcChannelsInEta
Definition: EFTrackingTransient.h:163
EFTrackingTransient::SpacePoint::radius
float radius
Definition: EFTrackingTransient.h:99
EFTrackingTransient::PixelClusterOutput::pcGlobalPosition
float * pcGlobalPosition
Definition: EFTrackingTransient.h:160
EFTrackingTransient::PixelClusterAuxInput::id
std::vector< long unsigned int > id
Definition: EFTrackingTransient.h:223
EFTrackingTransient::PixelClusterAuxInput::widthInEta
std::vector< float > widthInEta
Definition: EFTrackingTransient.h:231
EFTrackingTransient::PixelClusterAuxInput::globalPosition
std::vector< float > globalPosition
Definition: EFTrackingTransient.h:227
EFTrackingTransient::StripCluster::channelsInPhi
int channelsInPhi
Definition: EFTrackingTransient.h:51
EFTrackingTransient::PixelClusterOutput::pcOmegaY
float * pcOmegaY
Definition: EFTrackingTransient.h:166
EFTrackingTransient::SpacePoint::topStripCenter
float topStripCenter[3]
Definition: EFTrackingTransient.h:109
DEBUG
#define DEBUG
Definition: page_access.h:11
EFTrackingTransient::PixelCluster::globalPosition
float globalPosition[3]
Definition: EFTrackingTransient.h:67
EFTrackingTransient::PixelClusterOutput::pcChannelsInPhi
int * pcChannelsInPhi
Definition: EFTrackingTransient.h:162
PassThroughTool::m_pixelClustersKey
SG::ReadHandleKey< xAOD::PixelClusterContainer > m_pixelClustersKey
Definition: PassThroughTool.h:136
EFTrackingTransient::StripClusterAuxInput::id
std::vector< long unsigned int > id
Definition: EFTrackingTransient.h:211
EFTrackingTransient::StripClusterAuxInput::channelsInPhi
std::vector< int > channelsInPhi
Definition: EFTrackingTransient.h:214
EFTrackingTransient::PixelClusterOutput::pcOmegaX
float * pcOmegaX
Definition: EFTrackingTransient.h:165
EFTrackingTransient::PixelClusterOutput::pcLvl1a
int * pcLvl1a
Definition: EFTrackingTransient.h:175
EFTrackingTransient::PixelCluster::totalToT
int totalToT
Definition: EFTrackingTransient.h:75
PassThroughTool::m_maxClusterNum
Gaudi::Property< unsigned int > m_maxClusterNum
Definition: PassThroughTool.h:127
EFTrackingTransient::PixelCluster::omegaX
float omegaX
Definition: EFTrackingTransient.h:72
calibdata.copy
bool copy
Definition: calibdata.py:27
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
EFTrackingTransient::SpacePointOutput::spRadius
float * spRadius
Definition: EFTrackingTransient.h:189
EFTrackingTransient::StripCluster::rdoList
unsigned long long rdoList[1000]
Definition: EFTrackingTransient.h:50
EFTrackingTransient::PixelClusterAuxInput::energyLoss
std::vector< float > energyLoss
Definition: EFTrackingTransient.h:238
EFTrackingTransient::PixelClusterAuxInput::totList
std::vector< int > totList
Definition: EFTrackingTransient.h:234
EFTrackingTransient::PixelCluster::localPosition
float localPosition[2]
Definition: EFTrackingTransient.h:65
EFTrackingTransient::SpacePoint::globalPosition
float globalPosition[3]
Definition: EFTrackingTransient.h:98
EFTrackingTransient::StripCluster::localPosition
float localPosition
Definition: EFTrackingTransient.h:45
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
EFTrackingTransient::PixelClusterAuxInput::isSplit
std::vector< char > isSplit
Definition: EFTrackingTransient.h:239
python.SystemOfUnits.pc
float pc
Definition: SystemOfUnits.py:99
EFTrackingTransient::PixelClusterOutput::pcTotList
int * pcTotList
Definition: EFTrackingTransient.h:167
EFTrackingTransient::StripClusterOutput::scChannelsInPhi
int * scChannelsInPhi
Definition: EFTrackingTransient.h:146
EFTrackingTransient::PixelClusterOutput::pcTotalToT
int * pcTotalToT
Definition: EFTrackingTransient.h:168
EFTrackingTransient::PixelClusterAuxInput::omegaX
std::vector< float > omegaX
Definition: EFTrackingTransient.h:232
EFTrackingTransient::PixelCluster::id
long unsigned int id
Definition: EFTrackingTransient.h:63
EFTrackingTransient::PixelClusterAuxInput::omegaY
std::vector< float > omegaY
Definition: EFTrackingTransient.h:233
EFTrackingTransient::SpacePoint::cov_z
float cov_z
Definition: EFTrackingTransient.h:101
EFTrackingTransient::PixelCluster::energyLoss
float energyLoss
Definition: EFTrackingTransient.h:78
EFTrackingTransient::SpacePoint::idHash
unsigned int idHash[2]
Definition: EFTrackingTransient.h:97