 |
ATLAS Offline Software
|
#include <CoreStripSpacePointFormationTool.h>
|
virtual | ~CoreStripSpacePointFormationTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | produceSpacePoints (const EventContext &ctx, const xAOD::StripClusterContainer &clusterContainer, const InDet::SiElementPropertiesTable &properties, const InDetDD::SiDetectorElementCollection &elements, const Amg::Vector3D &beamSpotVertex, std::vector< StripSP > &spacePoints, std::vector< StripSP > &overlapSpacePoints, bool processOverlaps, const std::vector< IdentifierHash > &hashesToProcess, const ContainerAccessor< xAOD::StripCluster, IdentifierHash, 1 > &stripAccessor) const override |
|
|
StatusCode | fillSpacePoints (const EventContext &ctx, std::shared_ptr< Acts::SpacePointBuilder< StripSP >> spBuilder, const std::array< const InDetDD::SiDetectorElement *, nNeighbours > &neighbourElements, const std::array< std::vector< std::pair< ATLASUncalibSourceLink, size_t >>, nNeighbours > &neighbourSourceLinks, const std::array< double, 14 > &overlapExtents, const Amg::Vector3D &beamSpotVertex, std::vector< StripSP > &spacePoints, std::vector< StripSP > &overlapSpacePoints) const |
|
StatusCode | makeSpacePoint (const EventContext &ctx, std::vector< StripSP > &collection, std::shared_ptr< Acts::SpacePointBuilder< StripSP >> spBuilder, const ATLASUncalibSourceLink ¤tSlink, const ATLASUncalibSourceLink &anotherSlink, const InDetDD::SiDetectorElement *currentElement, const InDetDD::SiDetectorElement *anotherElement, const double limit, const double slimit, const Acts::Vector3 &vertex) const |
|
void | updateRange (const InDetDD::SiDetectorElement &element1, const InDetDD::SiDetectorElement &element2, double &stripLengthGapTolerance, double &min, double &max) const |
|
double | computeOffset (const InDetDD::SiDetectorElement &element1, const InDetDD::SiDetectorElement &element2, double &stripLengthGapTolerance) const |
|
void | correctPolarRange (const InDetDD::SiDetectorElement *element, double &min, double &max, size_t &minStrip, size_t &maxStrip) const |
|
std::pair< Amg::Vector3D, Amg::Vector3D > | getStripEnds (const xAOD::StripCluster *cluster, const InDetDD::SiDetectorElement *element, size_t &stripIndex) const |
|
std::pair< Amg::Vector3D, Amg::Vector3D > | getStripEnds (const ATLASUncalibSourceLink &sourceLink, const InDetDD::SiDetectorElement *element, size_t &stripIndex) const |
|
|
const SCT_ID * | m_stripId {} |
|
ToolHandle< ISiLorentzAngleTool > | m_lorentzAngleTool {this, "LorentzAngleTool", "", "Tool to retreive Lorentz angle of SCT"} |
|
PublicToolHandle< ActsTrk::ITrackingGeometryTool > | m_trackingGeometryTool {this, "TrackingGeometryTool", ""} |
|
Gaudi::Property< bool > | m_allClusters {this, "AllClusters", false, "Process all clusters without limits."} |
|
Gaudi::Property< float > | m_overlapLimitOpposite {this, "OverlapLimitOpposite", 2.8, "Overlap limit for opposite-neighbour."} |
|
Gaudi::Property< float > | m_overlapLimitPhi {this, "OverlapLimitPhi", 5.64, "Overlap limit for phi-neighbours."} |
|
Gaudi::Property< float > | m_overlapLimitEtaMin {this, "OverlapLimitEtaMin", 1.68, "Low overlap limit for eta-neighbours."} |
|
Gaudi::Property< float > | m_overlapLimitEtaMax {this, "OverlapLimitEtaMax", 3.0, "High overlap limit for eta-neighbours."} |
|
Gaudi::Property< float > | m_stripLengthTolerance {this, "StripLengthTolerance", 0.01} |
|
Gaudi::Property< float > | m_stripGapParameter {this, "StripGapParameter", 0.0015, "Recommend 0.001 - 0.0015 for ITK geometry"} |
|
Gaudi::Property< bool > | m_useSCTLayerDep_OverlapCuts {this,"useSCTLayerDep_OverlapCuts", true} |
|
Tool to produce strip space points using ACTS SP builder. Strip space points are made by combining clusters (obtained from SourceLinks) from pairs of overlapping detectors. The access to overlapping detector elements is possible using the ContainerAccessor. The user can choose just to process the detector element and its opposite on the stereo layer, or also to consider overlaps with the four nearest neighbours of the opposite elements.
Space points are then recorded to storege as StripSP, and then stored as xAOD::SpacePoint in StripSpacePointFormationAlg
Definition at line 37 of file CoreStripSpacePointFormationTool.h.
◆ ~CoreStripSpacePointFormationTool()
virtual ActsTrk::CoreStripSpacePointFormationTool::~CoreStripSpacePointFormationTool |
( |
| ) |
|
|
virtualdefault |
◆ computeOffset()
Definition at line 561 of file CoreStripSpacePointFormationTool.cxx.
574 double x12 =
t1.linear().col(0).dot(
t2.linear().col(0));
575 double r = isAnnulus ?
c.perp() : std::sqrt(
t1(0, 3) *
t1(0, 3) +
t1(1, 3) *
t1(1, 3));
579 double s = dPos.dot(
t1.linear().col(2));
583 double d = isAnnulus ?
dm / 0.04 :
dm / std::sqrt((1. - x12) * (1. + x12));
586 const double zComponentTolerance = 0.7;
587 if (std::abs(
t1(2, 2)) > zComponentTolerance)
588 d *= (
r / std::abs(
t1(2, 3)));
590 stripLengthGapTolerance =
d;
◆ correctPolarRange()
void ActsTrk::CoreStripSpacePointFormationTool::correctPolarRange |
( |
const InDetDD::SiDetectorElement * |
element, |
|
|
double & |
min, |
|
|
double & |
max, |
|
|
size_t & |
minStrip, |
|
|
size_t & |
maxStrip |
|
) |
| const |
|
private |
◆ fillSpacePoints()
StatusCode ActsTrk::CoreStripSpacePointFormationTool::fillSpacePoints |
( |
const EventContext & |
ctx, |
|
|
std::shared_ptr< Acts::SpacePointBuilder< StripSP >> |
spBuilder, |
|
|
const std::array< const InDetDD::SiDetectorElement *, nNeighbours > & |
neighbourElements, |
|
|
const std::array< std::vector< std::pair< ATLASUncalibSourceLink, size_t >>, nNeighbours > & |
neighbourSourceLinks, |
|
|
const std::array< double, 14 > & |
overlapExtents, |
|
|
const Amg::Vector3D & |
beamSpotVertex, |
|
|
std::vector< StripSP > & |
spacePoints, |
|
|
std::vector< StripSP > & |
overlapSpacePoints |
|
) |
| const |
|
private |
Definition at line 293 of file CoreStripSpacePointFormationTool.cxx.
325 Acts::Vector3
vertex(beamSpotVertex.x(), beamSpotVertex.y(), beamSpotVertex.z());
326 constexpr
int otherSideIndex{1};
327 constexpr
int maxEtaIndex{3};
335 elementIndex[nElements++] =
n;
339 if(!nElements)
return StatusCode::SUCCESS;
343 bool isEndcap = triggerElement->
isEndcap();
344 std::vector<StripInformationHelper> stripInfos;
345 stripInfos.reserve(sourceLinks[0].
size());
347 std::vector<ATLASUncalibSourceLink> triggerSlinks;
348 triggerSlinks.reserve(sourceLinks[0].
size());
351 for (
auto &sourceLink_index : sourceLinks[0]){
352 triggerSlinks.emplace_back(sourceLink_index.first);
361 for (;
n < nElements; ++
n){
362 int currentIndex = elementIndex[
n];
363 if (currentIndex > maxEtaIndex)
370 double min = overlapExtents[currentIndex * 2 - 2];
371 double max = overlapExtents[currentIndex * 2 - 1];
381 for (
auto &sourceLink_index : sourceLinks[currentIndex]){
383 const auto currentSlink = sourceLink_index.first;
384 for (
auto triggerSlink : triggerSlinks){
391 if (diff < min || diff >
max)
393 if (currentIndex == otherSideIndex){
406 for (;
n < nElements; ++
n){
407 int currentIndex = elementIndex[
n];
409 double min = overlapExtents[4 * currentIndex - 10];
410 double max = overlapExtents[4 * currentIndex - 9];
419 std::vector<ATLASUncalibSourceLink> triggerPhiSlinks;
420 triggerSlinks.reserve(triggerSlinks.size());
421 for (
auto triggerSlink : triggerSlinks){
426 size_t stripIndex = 0;
428 centralValue = stripIndex;
433 triggerPhiSlinks.emplace_back(triggerSlink);
436 if (triggerPhiSlinks.empty())
438 min = overlapExtents[4 * currentIndex - 8];
439 max = overlapExtents[4 * currentIndex - 7];
445 for (
auto &sourceLink_index : sourceLinks[currentIndex]){
446 const auto currentSlink = sourceLink_index.first;
448 size_t currentStripIndex = 0;
449 getStripEnds(currentSlink, currentElement, currentStripIndex);
454 centralValue = currentStripIndex;
458 if (centralValue < minValue or centralValue >
maxValue)
460 for (
auto &triggerSlink : triggerPhiSlinks) {
466 return StatusCode::SUCCESS;
470 for (
int n = 0;
n != nElements; ++
n){
472 int currentIndex = elementIndex[
n];
479 for (
auto &sourceLink_index : sourceLinks[currentIndex]){
480 size_t currentStripIndex = 0;
481 getStripEnds(sourceLink_index.first, triggerElement, currentStripIndex);
482 const auto currentSlink = sourceLink_index.first;
484 for (
auto triggerSlink : triggerSlinks){
485 if (currentIndex == otherSideIndex){
495 return StatusCode::SUCCESS;
◆ getStripEnds() [1/2]
Definition at line 646 of file CoreStripSpacePointFormationTool.cxx.
653 ATH_MSG_FATAL(
"Could not cast UncalibratedMeasurement as StripCluster");
667 stripIndex = -std::floor(source_local_x / phiPitchPhi) + design->
diodesInRow(0) *0.5 - 0.5;
669 std::pair<Amg::Vector3D, Amg::Vector3D > ends = {
677 std::pair<Amg::Vector3D, Amg::Vector3D> ends(element->
endsOfStrip(localPosition));
◆ getStripEnds() [2/2]
◆ initialize()
StatusCode ActsTrk::CoreStripSpacePointFormationTool::initialize |
( |
| ) |
|
|
overridevirtual |
◆ makeSpacePoint()
Definition at line 499 of file CoreStripSpacePointFormationTool.cxx.
513 size_t stripIndex = 0;
514 auto ends1 =
getStripEnds(currentSlink, currentElement, stripIndex);
515 auto ends2 =
getStripEnds(anotherSlink, anotherElement, stripIndex);
516 std::pair<Acts::Vector3, Acts::Vector3> ends1_acts;
517 std::pair<Acts::Vector3, Acts::Vector3> ends2_acts;
518 ends1_acts.first = ends1.first;
519 ends1_acts.second = ends1.second;
520 ends2_acts.first = ends2.first;
521 ends2_acts.second = ends2.second;
522 auto paramCovAccessor = [&](
const Acts::SourceLink &slink) {
527 switch (measurement->type()) {
529 loc[Acts::eBoundLoc0] = measurement->localPosition<1>()[
Trk::locX];
530 cov.topLeftCorner<1, 1>() =
531 measurement->localCovariance<1>().cast<
double>();
534 loc[Acts::eBoundLoc0] = measurement->localPosition<2>()[
Trk::locX];
535 loc[Acts::eBoundLoc1] = measurement->localPosition<2>()[
Trk::locY];
536 cov.topLeftCorner<2, 2>() =
537 measurement->localCovariance<2>().cast<
double>();
540 throw std::domain_error(
541 "Can only handle measurement type pixel or strip");
543 return std::make_pair(loc,
cov);
545 std::vector<Acts::SourceLink> slinks;
547 slinks.emplace_back(Acts::SourceLink{currentSlink});
548 slinks.emplace_back(Acts::SourceLink{anotherSlink});
550 Acts::SpacePointBuilderOptions spOpt{std::make_pair(ends1_acts, ends2_acts), paramCovAccessor};
552 spOpt.stripLengthTolerance =
limit - 1;
553 spOpt.stripLengthGapTolerance = slimit;
556 spBuilder->buildSpacePoint(tgContext, slinks, spOpt,
557 std::back_inserter(collection));
558 return StatusCode::SUCCESS;
◆ produceSpacePoints()
StatusCode ActsTrk::CoreStripSpacePointFormationTool::produceSpacePoints |
( |
const EventContext & |
ctx, |
|
|
const xAOD::StripClusterContainer & |
clusterContainer, |
|
|
const InDet::SiElementPropertiesTable & |
properties, |
|
|
const InDetDD::SiDetectorElementCollection & |
elements, |
|
|
const Amg::Vector3D & |
beamSpotVertex, |
|
|
std::vector< StripSP > & |
spacePoints, |
|
|
std::vector< StripSP > & |
overlapSpacePoints, |
|
|
bool |
processOverlaps, |
|
|
const std::vector< IdentifierHash > & |
hashesToProcess, |
|
|
const ContainerAccessor< xAOD::StripCluster, IdentifierHash, 1 > & |
stripAccessor |
|
) |
| const |
|
overridevirtual |
Production of ActsTrk::SpacePoint from strip clusters Strip space points involves a more complex logic since they are made combining clusters from pairs of overlapping detectors.
For each trigger element, first evaluate and collect the quantities you need to build the space points. The detector element array has capacity 6: [0] is the trigger element [1] is the opposite element [2]-[3] are the elements tested for eta overlaps [4]-[5] are the elements tested for phi overlaps For each element you save the corresponding cluster collections and the space point compatibility range as described below.
For the opposite element and the ones tested for eta overlaps, you have to check if clusters are compatible with the local position of the trigger cluster requiring that the distance between the two clusters in phi is withing a specified range.
- For the clusters on the opposite element: [-m_overlapLimitOpposite, m_overlapLimitOpposite]
- For the eta overlapping clusters : you use m_overlapLimitEtaMin and m_overlapLimitEtaMax in different combination depending if you are checking a stereo module or not
For each element, the extremes of these ranges are saved in the overlapExtents array which is used later on
- overlapExtents[0], overlapExtents[1] are filled for the opposite element
- overlapExtents[2], overlapExtents[3], overlapExtents[4], overlapExtents[5] are filled for the eta overlapping elements
For the elements tested for phi overlaps, you have to check if clusters are compatible with the local position of the trigger cluster. This needs that the trigger cluster is at the edge of the trigger module: e.g. -hwidth < locX_trigger < -hwidth+m_overlapLimitPhi (or hwidth-m_overlapLimitPhi < locX_trigger < hwidth) and that the other cluster is on the compatible edge of its module: e.g. hwidth-m_overlapLimitPhi < locX_other < hwidth (or -hwidth < locX_other < -hwidth+m_overlapLimitPhi)
For each element, the extremes of these ranges are saved in the overlapExtents array which is used later on
- overlapExtents[6], overlapExtents[7], overlapExtents[10], overlapExtents[11] overlapExtents[8], overlapExtents[9], overlapExtents[12], overlapExtents[13] are filled for the phi overlapping elements
Access to the cluster from a given detector element is possible via the ContainerAccessor.
Definition at line 36 of file CoreStripSpacePointFormationTool.cxx.
89 auto spBuilderConfig = std::make_shared<Acts::SpacePointBuilderConfig>();
92 spBuilderConfig->slSurfaceAccessor.connect<&detail::xAODUncalibMeasSurfAcc::operator()>(&surfaceAccessor);
96 auto spConstructor = [
this, &clusterContainer, &elements](
const Acts::Vector3 &
pos,
97 std::optional<double> ,
98 const Acts::Vector2 &
cov,
99 std::optional<double> ,
100 const boost::container::static_vector<Acts::SourceLink, 2> &slinks)
103 std::array<StripInformationHelper, 2> stripInfos;
105 for (
const auto& slink : slinks){
109 if (
it != clusterContainer.
end()){
113 size_t stripIndex = 0;
114 auto ends = this->
getStripEnds(hit, element, stripIndex);
117 assert(
idx < measIndices.size() &&
idx < stripInfos.size());
118 measIndices[
idx] = cluster_index;
119 stripInfos[
idx] = std::move(stripInfo);
123 const auto& [firstInfo, secondInfo] = stripInfos;
124 const auto topHalfStripLength = 0.5*firstInfo.stripDirection().norm();
125 Eigen::Matrix<double, 3, 1> topStripDirection = -firstInfo.stripDirection()/(2.*topHalfStripLength);
126 Eigen::Matrix<double, 3, 1> topStripCenter = 0.5*firstInfo.trajDirection();
128 const auto bottomHalfStripLength = 0.5*secondInfo.stripDirection().norm();
129 Eigen::Matrix<double, 3, 1> bottomStripDirection = -secondInfo.stripDirection()/(2.*bottomHalfStripLength);
130 Eigen::Matrix<double, 3, 1> stripCenterDistance = firstInfo.stripCenter() - secondInfo.stripCenter();
133 sp.idHashes = {firstInfo.idHash(), secondInfo.idHash()};
134 sp.globPos =
pos.cast<
float>();
137 sp.measurementIndexes = measIndices;
138 sp.topHalfStripLength = topHalfStripLength;
139 sp.bottomHalfStripLength = bottomHalfStripLength;
140 sp.topStripDirection = topStripDirection.cast<
float>();
141 sp.bottomStripDirection = bottomStripDirection.cast<
float>();
142 sp.stripCenterDistance = stripCenterDistance.cast<
float>();
143 sp.topStripCenter = topStripCenter.cast<
float>();
148 auto spBuilder = std::make_shared<Acts::SpacePointBuilder<StripSP>>(*spBuilderConfig, spConstructor);
150 const auto hashesProc = (hashesToProcess.size() > 0 ? hashesToProcess : stripAccessor.
allIdentifiers());
151 for (
auto &idHash : hashesProc) {
157 const std::vector<IdentifierHash>& others = *
properties.neighbours(idHash);
159 if (others.empty()) {
166 size_t neighbour = 0;
167 while (not
search and neighbour < others.size()){
175 std::array<std::vector<std::pair<const xAOD::StripCluster *, size_t>>,
static_cast<size_t>(
nNeighbours)> neighbourClusters{};
176 std::array<std::vector<std::pair<ATLASUncalibSourceLink, size_t>>,
static_cast<size_t>(
nNeighbours)> neighbourSourceLinks{};
177 std::array<const InDetDD::SiDetectorElement *, static_cast<size_t>(
nNeighbours)> neighbourElements{};
179 auto groupStart = clusterContainer.
begin();
181 neighbourElements[0] = thisElement;
183 for (
auto start = this_range.first;
start != this_range.second; ++
start){
185 neighbourClusters[0].push_back(std::make_pair(*
start, position));
186 if ((*start)->identifierHash() != thisElement->
identifyHash()) {
187 throw std::logic_error(
"Identifier mismatch.");
190 neighbourSourceLinks[0].emplace_back(std::make_pair(slink, position));
197 std::array<double, 14> overlapExtents{};
207 if (not processOverlaps)
219 for (
const auto &otherHash : others){
220 if (++
n == Nmax)
break;
227 neighbourElements[neigbourIndices[
n]] = otherElement;
229 for (
auto start = this_range.first;
start != this_range.second; ++
start){
231 neighbourClusters[neigbourIndices[
n]].push_back(std::make_pair(*
start, position));
232 if ((*start)->identifierHash() != otherElement->
identifyHash()) {
233 throw std::logic_error(
"Identifier mismatch.");
236 neighbourSourceLinks[neigbourIndices[
n]].emplace_back(std::make_pair(slink, position));
249 overlapExtents[6] = -hwidth;
252 overlapExtents[9] = hwidth;
258 overlapExtents[11] = hwidth;
259 overlapExtents[12] = -hwidth;
290 return StatusCode::SUCCESS;
◆ updateRange()
◆ m_allClusters
Gaudi::Property<bool> ActsTrk::CoreStripSpacePointFormationTool::m_allClusters {this, "AllClusters", false, "Process all clusters without limits."} |
|
private |
◆ m_lorentzAngleTool
ToolHandle<ISiLorentzAngleTool> ActsTrk::CoreStripSpacePointFormationTool::m_lorentzAngleTool {this, "LorentzAngleTool", "", "Tool to retreive Lorentz angle of SCT"} |
|
private |
◆ m_overlapLimitEtaMax
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_overlapLimitEtaMax {this, "OverlapLimitEtaMax", 3.0, "High overlap limit for eta-neighbours."} |
|
private |
◆ m_overlapLimitEtaMin
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_overlapLimitEtaMin {this, "OverlapLimitEtaMin", 1.68, "Low overlap limit for eta-neighbours."} |
|
private |
◆ m_overlapLimitOpposite
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_overlapLimitOpposite {this, "OverlapLimitOpposite", 2.8, "Overlap limit for opposite-neighbour."} |
|
private |
◆ m_overlapLimitPhi
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_overlapLimitPhi {this, "OverlapLimitPhi", 5.64, "Overlap limit for phi-neighbours."} |
|
private |
◆ m_stripGapParameter
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_stripGapParameter {this, "StripGapParameter", 0.0015, "Recommend 0.001 - 0.0015 for ITK geometry"} |
|
private |
◆ m_stripId
const SCT_ID* ActsTrk::CoreStripSpacePointFormationTool::m_stripId {} |
|
private |
◆ m_stripLengthTolerance
Gaudi::Property<float> ActsTrk::CoreStripSpacePointFormationTool::m_stripLengthTolerance {this, "StripLengthTolerance", 0.01} |
|
private |
◆ m_trackingGeometryTool
◆ m_useSCTLayerDep_OverlapCuts
Gaudi::Property< bool > ActsTrk::CoreStripSpacePointFormationTool::m_useSCTLayerDep_OverlapCuts {this,"useSCTLayerDep_OverlapCuts", true} |
|
private |
The documentation for this class was generated from the following files:
def retrieve(aClass, aKey=None)
DetectorIDHashType identifierHash() const
Returns the IdentifierHash of the measurement (corresponds to the detector element IdentifierHash)
SiCellId cellIdOfPosition(const Amg::Vector2D &localPos) const
As in previous method but returns SiCellId.
#define maxValue(current, test)
virtual int strip1Dim(int strip, int row) const override
only relevant for SCT.
std::vector< identifier_t > allIdentifiers() const
Function to return all available identifier (i.e. keys in the map)
std::string find(const std::string &s)
return a remapped string
virtual DetectorShape shape() const
Shape of element.
virtual const Amg::Vector3D & center() const override final
Center in global coordinates.
bool isValid() const
Test if its in a valid state.
std::vector< ALFA_RawDataCollection_p1 > t1
float localXFromSourceLink(const ATLASUncalibSourceLink &source_link)
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
int strip() const
Get strip number. Equivalent to phiIndex().
void search(TDirectory *td, const std::string &s, std::string cwd, node *n)
recursive directory search for TH1 and TH2 and TProfiles
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
static const xAOD::UncalibratedMeasurement * unpack(const Acts::SourceLink &sl)
Helper method to unpack an Acts source link to an uncalibrated measurement.
virtual int diodesInRow(const int row) const override
SiLocalPosition stripPosAtR(int strip, int row, double r) const
const boost::container::small_vector< Range, inline_size > rangesForIdentifierDirect(const identifier_t &identifier) const
Function to return the list of ranges corresponding to a given identifier.
ATLASUncalibSourceLink makeATLASUncalibSourceLink(const xAOD::UncalibratedMeasurementContainer *container, std::size_t index, [[maybe_unused]] const EventContext &ctx)
const xAOD::UncalibratedMeasurement * ATLASUncalibSourceLink
Eigen::Affine3d Transform3D
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...
const xAOD::UncalibratedMeasurement & getUncalibratedMeasurement(const ATLASUncalibSourceLink &source_link)
int layer_disk(const Identifier &id) const
Eigen::Matrix< double, 3, 1 > Vector3D
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
std::vector< ALFA_RawDataContainer_p1 > t2
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const override
id -> position
bool isStereo() const
Check if it is the stereo side (useful for SCT)
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
#define minValue(current, test)
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
bool isIdentifierPresent(const identifier_t &identifier) const
Function to verify if a given identifier is present in the map, i.e.
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
virtual Identifier identify() const override final
identifier of this detector element (inline)
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool is_barrel(const Identifier &id) const
Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. Use SiliconID for gen...