20 base_class(
type, name, parent) {}
37 return StatusCode::SUCCESS;
44 InDet::PixelClusterCollection& pixelColl,
45 InDet::SCT_ClusterCollection& SCTColl)
const {
46 ATH_MSG_DEBUG(
"Found " << hits.size() <<
" FPGATrackSimHits [InDet]");
48 pixelColl.reserve(hits.size());
49 SCTColl.reserve(hits.size());
52 std::vector<Identifier> rdoList{
Identifier(
h.getRdoIdentifier())};
54 std::unique_ptr<InDet::PixelCluster> pixelCl{};
55 std::unique_ptr<InDet::SCT_Cluster> SCTCl{};
59 if (pixelCl) pixelColl.push_back(std::move(pixelCl));
63 if (SCTCl) SCTColl.push_back(std::move(SCTCl));
67 ATH_MSG_DEBUG(
"pixelColl size: " << pixelColl.size() <<
" SCTColl size: " << SCTColl.size() );
69 return StatusCode::SUCCESS;
74 InDet::PixelClusterCollection& pixelColl,
75 InDet::SCT_ClusterCollection& SCTColl)
const {
76 ATH_MSG_DEBUG(
"Found " << hits.size() <<
" FPGATrackSimHits [InDet]");
80 if (!FPGAClustersHandle.
isValid()) {
81 ATH_MSG_FATAL(
"Failed to retrieve FPGATrackSimClusterCollection");
82 return StatusCode::FAILURE;
105 std::vector<Identifier> rdoList;
108 std::unique_ptr<InDet::PixelCluster> pixelCl{};
109 std::unique_ptr<InDet::SCT_Cluster> SCTCl{};
113 if (pixelCl) pixelColl.push_back(std::move(pixelCl));
117 if (SCTCl) SCTColl.push_back(std::move(SCTCl));
122 ATH_MSG_DEBUG(
"pixelColl size: " << pixelColl.size() <<
" SCTColl size: " << SCTColl.size());
124 return StatusCode::SUCCESS;
132 ATH_MSG_DEBUG(
"Found " << hits.size() <<
" FPGATrackSimHits [xAOD]");
134 pixelCont.
reserve(hits.size());
138 std::vector<Identifier> rdoList{
Identifier(
h.getIdentifier())};
149 if(!xaod_scl->
rdoList().size())
154 ATH_MSG_DEBUG(
"xAOD pixelCont size: " << pixelCont.
size() <<
" xAOD pixelCont size: " << SCTCont.
size());
156 return StatusCode::SUCCESS;
162 InDet::PixelClusterCollection& pixelColl,
163 InDet::SCT_ClusterCollection& SCTColl)
const {
164 ATH_MSG_DEBUG(
"Found " << clusters.size() <<
" FPGATrackSimClusters [InDet]");
166 pixelColl.reserve(clusters.size());
167 SCTColl.reserve(clusters.size());
171 std::vector<Identifier> rdoList;
174 std::unique_ptr<InDet::PixelCluster> pixelCl{};
175 std::unique_ptr<InDet::SCT_Cluster> SCTCl{};
179 if (pixelCl) pixelColl.push_back(std::move(pixelCl));
183 if (SCTCl) SCTColl.push_back(std::move(SCTCl));
187 ATH_MSG_DEBUG(
"pixelColl size: " << pixelColl.size() <<
" SCTColl size: " << SCTColl.size());
189 return StatusCode::SUCCESS;
195 ATH_MSG_DEBUG(
"Found " << clusters.size() <<
" FPGATrackSimClusters [xAOD]");
197 pixelCont.
reserve(clusters.size());
198 SCTCont.
reserve(clusters.size());
204 std::vector<Identifier> rdoList;
219 ATH_MSG_DEBUG(
"xAOD pixelCont size: " << pixelCont.
size() <<
" xAOD SCTCont size: " << SCTCont.
size());
221 return StatusCode::SUCCESS;
235 SPStripCont.
reserve(fpgaSPs.size());
244 return StatusCode::SUCCESS;
248 ATH_MSG_DEBUG(
"\tCreate InDet::PixelCluster from FPGATrackSimHit");
252 float etaWidth =
h.getEtaWidth();
253 float phiWidth =
h.getPhiWidth();
254 int phiIndex =
h.getPhiIndex();
255 int etaIndex =
h.getEtaIndex();
261 return StatusCode::FAILURE;
268 if(!cell.isValid()) {
270 return StatusCode::FAILURE;
276 int colMin =
static_cast<int>(etaIndex-0.5*etaWidth);
277 int colMax = colMin+etaWidth;
279 int rowMin =
static_cast<int>(phiIndex-0.5*phiWidth);
280 int rowMax = rowMin+phiWidth;
295 localPos = localPosShift;
299 ATH_MSG_DEBUG(
"\t\tLocal position: x=" << localPos.x() <<
" y=" << localPos.y() );
300 ATH_MSG_DEBUG(
"\t\tGlobal position: x=" << globalPos.x() <<
" y=" << globalPos.y() <<
" z=" << globalPos.z() );
306 cov(0,0) = siWidth.
phiR()*siWidth.
phiR()/12;
307 cov(1,1) = siWidth.
z()*siWidth.
z()/12;
311 cov(1,1) = siWidth.
z()*siWidth.
z()/(12*siWidth.
colRow().
y()*siWidth.
colRow().y());
314 float dummy_omegax = 0.5;
315 float dummy_omegay = 0.5;
317 float splitProb1 = 0;
318 float splitProb2 = 0;
320 cl = std::make_unique<InDet::PixelCluster>(hit_id, localPos, std::vector<Identifier>(rdoList), siWidth, pDE,
Amg::MatrixX(cov), dummy_omegax, dummy_omegay,
split, splitProb1, splitProb2);
322 return StatusCode::SUCCESS;
326 ATH_MSG_DEBUG(
"\tCreate xAOD::PixelCluster from FPGATrackSimHit");
334 return StatusCode::FAILURE;
341 if(!cell.isValid()) {
343 return StatusCode::FAILURE;
348 int rowmin =
h.getMinPhiIndex();
349 int rowmax =
h.getMaxPhiIndex();
350 int colmin =
h.getMinEtaIndex();
351 int colmax =
h.getMaxEtaIndex();
355 if (colmin == std::numeric_limits<int>::max() || colmax == std::numeric_limits<int>::min() ||
356 rowmin == std::numeric_limits<int>::max() || rowmax == std::numeric_limits<int>::min()) {
357 ATH_MSG_ERROR(
"Pixel cluster indices appear uninitialized: colmin=" << colmin <<
", colmax=" << colmax
358 <<
", rowmin=" << rowmin <<
", rowmax=" << rowmax);
359 return StatusCode::FAILURE;
362 if (colmin < 0 || colmax < 0 || rowmin < 0 || rowmax < 0) {
363 ATH_MSG_ERROR(
"Pixel cluster indices out of range: colmin=" << colmin <<
", colmax=" << colmax
364 <<
", rowmin=" << rowmin <<
", rowmax=" << rowmax);
365 return StatusCode::FAILURE;
368 if (colmax < colmin || rowmax < rowmin) {
369 ATH_MSG_ERROR(
"Pixel cluster index max < min: colmin=" << colmin <<
", colmax=" << colmax
370 <<
", rowmin=" << rowmin <<
", rowmax=" << rowmax);
371 return StatusCode::FAILURE;
386 localPos(0,0) =
h.getPhiCoord();
387 localPos(1,0) =
h.getEtaCoord();
393 localPos = localPosShift;
396 ATH_MSG_DEBUG(
"\t\tLocal position: x=" << localPos.x() <<
" y=" << localPos.y() );
402 cov(0,0) = siWidth.
phiR()*siWidth.
phiR()/12;
403 cov(1,1) = siWidth.
z()*siWidth.
z()/12;
407 cov(1,1) = siWidth.
z()*siWidth.
z()/(12*siWidth.
colRow().
y()*siWidth.
colRow().y());
411 float splitProb1 = 0;
412 float splitProb2 = 0;
414 Eigen::Matrix<float,2,1> localPosition(localPos.x(), localPos.y());
415 Eigen::Matrix<float,2,2> localCovariance;
416 localCovariance.setZero();
417 localCovariance(0, 0) = cov(0, 0);
418 localCovariance(1, 1) = cov(1, 1);
420 Eigen::Matrix<float,3,1> globalPosition(
h.getX(),
h.getY(),
h.getZ());
421 ATH_MSG_DEBUG(
"\t\tGlobal position: x=" << globalPosition.x() <<
" y=" << globalPosition.y() <<
" z=" << globalPosition.z() );
423 cl.setMeasurement<2>(hash, localPosition, localCovariance);
425 cl.setIdentifier(
h.getRdoIdentifier() );
426 cl.setRDOlist(rdoList);
427 cl.globalPosition() = globalPosition;
428 cl.setChannelsInPhiEta(siWidth.
colRow()[0], siWidth.
colRow()[1]);
429 cl.setWidthInEta(
static_cast<float>(siWidth.
widthPhiRZ()[1]));
430 cl.setIsSplit(
split);
431 cl.setSplitProbabilities(splitProb1, splitProb2);
434 return StatusCode::SUCCESS;
438 ATH_MSG_DEBUG(
"\t Create InDet::SCTCluster from FPGATrackSimHit ");
443 float phiWidth =
h.getPhiWidth();
444 int strip =
static_cast<int>(
h.getPhiIndex());
465 const int firstStrip =
m_SCTId->strip(rdoList.front());
466 const int lastStrip =
m_SCTId->strip(rdoList.back());
467 const int row =
m_SCTId->row(rdoList.front());
468 const int firstStrip1D = design->
strip1Dim (firstStrip, row );
469 const int lastStrip1D = design->
strip1Dim( lastStrip, row );
475 const double width = design->
stripPitch() * ( lastStrip - firstStrip + 1 );
477 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition> ends( design->
endsOfStrip(centre) );
478 const double stripLength( std::abs(ends.first.xEta() - ends.second.xEta()) );
485 ATH_MSG_DEBUG(
"\t\tlocal position before shift: " << localPos.x() <<
" phi: " << localPos.y());
489 localPos = localPosShift;
493 ATH_MSG_DEBUG(
"\t\tLocal position: x=" << localPos.x() <<
" y=" << localPos.y() );
494 ATH_MSG_DEBUG(
"\t\tGlobal position: x=" << globalPos.x() <<
" y=" << globalPos.y() <<
" z=" << globalPos.z() );
497 const double col_x = siWidth.
colRow().x();
498 const double col_y = siWidth.
colRow().y();
500 double scale_factor = 1.;
501 if ( std::abs(col_x-1) < std::numeric_limits<double>::epsilon() )
503 else if ( std::abs(col_x-2) < std::numeric_limits<double>::epsilon() )
508 cov.fillSymmetric(0, 0, scale_factor * scale_factor * siWidth.
phiR() * siWidth.
phiR() * (1./12.));
509 cov.fillSymmetric(1, 1, siWidth.
z() * siWidth.
z() / col_y / col_y * (1./12.));
517 double v0 = (cov)(0,0)*w*w;
518 double v1 = (cov)(1,1);
519 cov.fillSymmetric( 0, 0, cs2 * v0 + sn2 * v1 );
520 cov.fillSymmetric( 0, 1, sn * std::sqrt(cs2) * (v0 - v1) );
521 cov.fillSymmetric( 1, 1, sn2 * v0 + cs2 * v1 );
524 cl = std::make_unique<InDet::SCT_Cluster>(strip_id, localPos, std::vector<Identifier>(rdoList), siWidth, pDE,
Amg::MatrixX(cov));
526 return StatusCode::SUCCESS;
530 ATH_MSG_DEBUG(
"\t Create xAOD::StripCluster from FPGATrackSimHit ");
535 float phiWidth =
h.getPhiWidth();
536 int strip =
static_cast<int>(
h.getPhiIndex());
556 const int firstStrip =
m_SCTId->strip(rdoList.front());
557 const int lastStrip =
m_SCTId->strip(rdoList.back());
558 const int row =
m_SCTId->row(rdoList.front());
559 const int firstStrip1D = design->
strip1Dim (firstStrip, row);
560 const int lastStrip1D = design->
strip1Dim(lastStrip, row);
564 ATH_MSG_WARNING(
"Cell ID out of range. Skip making this Strip cluster");
565 return StatusCode::SUCCESS;
570 const double width = design->
stripPitch() * ( lastStrip - firstStrip + 1 );
572 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition> ends( design->
endsOfStrip(centre) );
573 const double stripLength( std::abs(ends.first.xEta() - ends.second.xEta()) );
579 localPos(0,0) =
h.getPhiCoord();
583 ATH_MSG_DEBUG(
"\t\tlocal position before shift: " << localPos.x() <<
" phi: " << localPos.y());
588 localPos = localPosShift;
591 ATH_MSG_DEBUG(
"\t\tLocal position: x=" << localPos.x() <<
" y=" << localPos.y() );
594 Eigen::Matrix<float,1,1> localPosition;
595 Eigen::Matrix<float,1,1> localCovariance;
596 localCovariance.setZero();
599 localPosition(0, 0) = localPos.x();
607 std::ostringstream
msg;
608 msg <<
"Original cellId: " << cellId <<
" (strip=" << cellId.
strip() <<
")\n";
609 msg <<
"Cell ID invalid or out of range. Resetting to the closest cell of the active area.\n";
614 msg <<
"Active area boundaries [eta,phi]: min [" << localPosMin.x() <<
", " << localPosMin.y() <<
"] , " <<
615 "max [" << localPosMax.x() <<
", " << localPosMax.y() <<
"]\n";
616 msg <<
"Compared to localPos of invalid cell: [" << localPos.x() <<
", " << localPos.y() <<
"]\n";
624 msg <<
" \\___ resetting to minCell [" << localPosMin.x() <<
", " << localPosMin.y() <<
"]";
627 msg <<
" \\___ resetting to maxCell [" << localPosMax.x() <<
", " << localPosMax.y() <<
"]";
633 localPosition(0, 0) = localInPolar.
xPhi();
637 Eigen::Matrix<float,3,1> globalPosition(
h.getX(),
h.getY(),
h.getZ());
638 ATH_MSG_DEBUG(
"\t\tGlobal position: x=" << globalPosition.x() <<
" y=" << globalPosition.y() <<
" z=" << globalPosition.z() );
640 cl.setMeasurement<1>(hash, localPosition, localCovariance);
641 cl.setIdentifier(
h.getRdoIdentifier() );
642 cl.setRDOlist(rdoList);
643 cl.globalPosition() = globalPosition;
644 cl.setChannelsInPhi(siWidth.
colRow()[0]);
646 return StatusCode::SUCCESS;
650 ATH_MSG_DEBUG(
"\t Create InDet::PixelCluster from FPGATrackSimCluster");
652 std::vector<Identifier> rdoList;
655 return StatusCode::SUCCESS;
659 ATH_MSG_DEBUG(
"\t Create xAOD::PixelCluster from FPGATrackSimCluster");
661 std::vector<Identifier> rdoList;
664 return StatusCode::SUCCESS;
668 ATH_MSG_DEBUG(
"\t Create InDet::SCT_Cluster from FPGATrackSimCluster");
670 std::vector<Identifier> rdoList;
673 return StatusCode::SUCCESS;
677 ATH_MSG_DEBUG(
"\t Create xAOD::StripCluster from FPGATrackSimCluster");
679 std::vector<Identifier> rdoList;
682 return StatusCode::SUCCESS;
693 Eigen::Matrix<float, 3, 1> globalPos(p_cl->globalPosition().x(), p_cl->globalPosition().y(), p_cl->globalPosition().z());
697 const float cov_r = p_cl->localCovariance<2>()(0,0);
698 const float cov_z = p_cl->localCovariance<2>()(1,0);
701 p_cl->identifierHash(),
705 std::vector< const xAOD::UncalibratedMeasurement* >({ p_cl })
709 return StatusCode::SUCCESS;
725 Eigen::Matrix<float,3,1> globalPos(clEq.
getX(),clEq.
getY(),clEq.
getZ());
730 float deltaY = 0.0004;
731 float covTerm = 1600.*deltaY;
732 Eigen::Matrix<float, 2, 1> variance(0.1, 8.*covTerm);
736 std::swap( variance(0, 0), variance(1, 0) );
737 float cov_r = variance(0,0);
738 float cov_z = variance(1,0);
743 std::vector<unsigned int> idHashList;
744 std::vector<const xAOD::UncalibratedMeasurement_v1*> measurements;
748 float topHalfStripLength, bottomHalfStripLength;
755 idHashList.push_back(
h.getIdentifierHash());
756 for (
auto orig_cl : clustersCont) {
757 if (
h.getIdentifierHash()==orig_cl->identifierHash()) {
760 measurements.push_back(orig_cl);
768 Amg::Vector3D stripCenterDistance = stripCenter1 - stripCenter2;
770 ATH_MSG_DEBUG(
"topHalfStripLength = " << topHalfStripLength <<
" bottomHalfStripLength = " << bottomHalfStripLength);
771 ATH_MSG_DEBUG(
"topStripDirection = (" << topStripDirection.x() <<
", " << topStripDirection.y() <<
", " << topStripDirection.z() <<
") " <<
"bottomStripDirection = (" << bottomStripDirection.x() <<
", " << bottomStripDirection.y() <<
", " << bottomStripDirection.z() <<
") " );
772 ATH_MSG_DEBUG(
"stripCenterDistance = (" << stripCenterDistance.x() <<
", " << stripCenterDistance.y() <<
", " << stripCenterDistance.z() <<
")" );
773 ATH_MSG_DEBUG(
"topStripCenter = (" << topStripCenter.x() <<
", " << topStripCenter.y() <<
", " << topStripCenter.z() <<
")" );
777 std::move(idHashList),
781 std::move(measurements),
783 bottomHalfStripLength,
784 topStripDirection.cast<
float>(),
785 bottomStripDirection.cast<
float>(),
786 stripCenterDistance.cast<
float>(),
787 topStripCenter.cast<
float>()
790 return StatusCode::SUCCESS;
795 std::vector<FPGATrackSimHit> hits = cluster.
getHitList();
798 rdoList.emplace_back(
h.getRdoIdentifier());
801 return StatusCode::SUCCESS;
808 const int &
strip =
m_SCTId->strip(cl.rdoList().front());
818 std::pair<Amg::Vector3D, Amg::Vector3D> end = (sDE->
endsOfStrip(localPos));
819 stripCenter = 0.5 * (end.first + end.second);
822 halfStripLength = 0.5 * stripDir.norm();
823 stripDirection = stripDir / (2. * (halfStripLength));
825 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
std::vector< FPGATrackSimCluster > FPGATrackSimClusterCollection
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
Header file for AthHistogramAlgorithm.
const T * back() const
Access the last element in the collection as an rvalue.
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
value_type emplace_back(value_type pElem)
Add an element to the end of the collection.
void pop_back()
Remove the last element from the collection.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
virtual StatusCode createPixelCluster(const FPGATrackSimHit &h, const std::vector< Identifier > &rdoList, std::unique_ptr< InDet::PixelCluster > &) const override final
SG::ReadHandleKey< FPGATrackSimClusterCollection > m_FPGAClusterKey
const PixelID * m_pixelId
const InDetDD::PixelDetectorManager * m_pixelManager
Gaudi::Property< bool > m_broadErrors
virtual StatusCode getRdoList(std::vector< Identifier > &rdoList, const FPGATrackSimCluster &cluster) const override final
FPGAClusterConverter(const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode createSCTCluster(const FPGATrackSimHit &h, const std::vector< Identifier > &rdoList, std::unique_ptr< InDet::SCT_Cluster > &) const override final
Gaudi::Property< bool > m_skipStripSpacePointFormation
virtual StatusCode createSP(const FPGATrackSimCluster &cl, xAOD::SpacePoint &sp, xAOD::StripClusterContainer &clustersCont) const override final
virtual StatusCode createPixelSPs(xAOD::SpacePointContainer &pixelSPs, xAOD::PixelClusterContainer &clustersCont) const override final
virtual StatusCode initialize() override final
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleToolPixel
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Gaudi::Property< bool > m_doShift
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleToolStrip
Gaudi::Property< bool > m_useInherentLocalCoordinates
const InDetDD::SCT_DetectorManager * m_SCTManager
virtual StatusCode convertHits(const std::vector< FPGATrackSimHit > &, InDet::PixelClusterCollection &, InDet::SCT_ClusterCollection &) const override final
virtual StatusCode convertSpacePoints(const std::vector< FPGATrackSimCluster > &fpgaSPs, xAOD::SpacePointContainer &SPStripCont, xAOD::SpacePointContainer &SPPixelCont, xAOD::StripClusterContainer &stripClusterCont, xAOD::PixelClusterContainer &pixelClusterCont) const override final
virtual StatusCode convertClusters(const std::vector< FPGATrackSimCluster > &, InDet::PixelClusterCollection &, InDet::SCT_ClusterCollection &) const override final
virtual StatusCode getStripsInfo(const xAOD::StripCluster &cl, float &halfStripLength, Amg::Vector3D &stripDirection, Amg::Vector3D &stripCenter) const override final
hitVector const & getHitList() const
FPGATrackSimHit const & getClusterEquiv() const
unsigned getIdentifierHash() const
This is a "hash" representation of an Identifier.
virtual DetectorShape shape() const
Shape of element.
Class used to describe the design of a module (diode segmentation and readout scheme)
double widthFromRowRange(const int rowMin, const int rowMax) const
Method to calculate phi width from a row range.
double widthFromColumnRange(const int colMin, const int colMax) const
Method to calculate eta width from a column range.
Base class for the SCT module side design, extended by the Forward and Barrel module design.
virtual SiCellId cellIdInRange(const SiCellId &cellId) const override
Check if cell is in range.
int cells() const
number of readout stips within module side:
virtual double stripPitch(const SiLocalPosition &chargePos) const =0
give the strip pitch (dependence on position needed for forward)
virtual int strip1Dim(int strip, int row) const override
only relevant for SCT.
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override=0
give the ends of strips
Identifier for the strip or pixel cell.
int strip() const
Get strip number. Equivalent to phiIndex().
bool isValid() const
Test if its in a valid state.
Class to hold geometrical description of a silicon detector element.
virtual SiCellId cellIdFromIdentifier(const Identifier &identifier) const override final
SiCellId from Identifier.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
double phiPitch() const
Pitch (inline methods)
std::pair< Amg::Vector3D, Amg::Vector3D > endsOfStrip(const Amg::Vector2D &position) const
Special method for SCT to retrieve the two ends of a "strip" Returned coordinates are in global frame...
double sinStereoLocal(const Amg::Vector2D &localPos) const
Angle of strip in local frame with respect to the etaAxis.
Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT For Pixel: ...
double xPhi() const
position along phi direction:
double xEta() const
position along eta direction:
SiCellId cellIdOfPosition(const Amg::Vector2D &localPos) const
As in previous method but returns SiCellId.
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
virtual SiCellId cellIdInRange(const SiCellId &) const override
DEPRECATED: only used in a stupid example (2014) Check if cell is in range.
double phiPitchPhi(const SiLocalPosition &localPosition) const
SiLocalPosition localPositionOfCellPC(const SiCellId &cellId) const
This is for debugging only.
const Amg::Vector2D & widthPhiRZ() const
const Amg::Vector2D & colRow() const
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
const std::vector< DetectorIDHashType > & elementIdList() const
Returns the IdentifierHash of the spacepoint (corresponds to the detector element IdentifierHash)
void setSpacePoint(DetectorIDHashType idHash, const Eigen::Matrix< float, 3, 1 > &globPos, float cov_r, float cov_z, std::vector< const xAOD::UncalibratedMeasurement * > &&measurementIndexes)
const std::vector< Identifier > rdoList() const
Returns the list of identifiers of the channels building the cluster.
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
void swap(ElementLinkVector< DOBJ > &lhs, ElementLinkVector< DOBJ > &rhs)
PixelClusterContainer_v1 PixelClusterContainer
Define the version of the pixel cluster container.
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.
StripClusterContainer_v1 StripClusterContainer
Define the version of the strip cluster container.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.