ATLAS Offline Software
SpacePointConversionUtilities.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
9 
10 namespace TrackingUtilities {
11 
13  xAOD::SpacePoint& xaodSpacePoint)
14  {
15  unsigned int idHash = trkSpacePoint.elementIdList().first;
16  const auto& globPos = trkSpacePoint.globalPosition();
17 
18  const InDet::SiCluster* c = static_cast<const InDet::SiCluster*>(trkSpacePoint.clusterList().first);
19  const InDetDD::SiDetectorElement *de = c->detectorElement();
20  const Amg::Transform3D &Tp = de->surface().transform();
21 
22  float r_3 = static_cast<float>( Tp(0,2) );
23  float r_4 = static_cast<float>( Tp(1,2) );
24  float r_5 = static_cast<float>( Tp(2,2) );
25 
26  const Amg::MatrixX& v = c->localCovariance();
27  float f22 = static_cast<float>( v(1,1) );
28  float wid = static_cast<float>( c->width().z() );
29  float cov = wid*wid*.08333;
30  if(cov < f22) cov = f22;
31  float covr = 6 * cov * (r_5*r_5);
32  float covz = 6 * cov * (r_3*r_3 + r_4*r_4);
33 
34  xaodSpacePoint.setSpacePoint(idHash,
35  globPos.cast<float>(),
36  covr,
37  covz,
38  {});
39 
40  return StatusCode::SUCCESS;
41  }
42 
44  const Amg::Vector3D& vertex,
45  xAOD::SpacePoint& xaodSpacePoint)
46  {
47  std::pair<unsigned int, unsigned int> idHashes = trkSpacePoint.elementIdList();
48  const auto& globPos = trkSpacePoint.globalPosition();
49 
50  const InDet::SiCluster *c0 = static_cast<const InDet::SiCluster *>(trkSpacePoint.clusterList().first);
51  const InDet::SiCluster *c1 = static_cast<const InDet::SiCluster *>(trkSpacePoint.clusterList().second);
52  const InDetDD::SiDetectorElement *d0 = c0->detectorElement();
53  const InDetDD::SiDetectorElement *d1 = c1->detectorElement();
54 
55  Amg::Vector2D lc0 = c0->localPosition();
56  Amg::Vector2D lc1 = c1->localPosition();
57 
58  std::pair<Amg::Vector3D, Amg::Vector3D> e0 =
59  (d0->endsOfStrip(InDetDD::SiLocalPosition(lc0.y(), lc0.x(), 0.)));
60  std::pair<Amg::Vector3D, Amg::Vector3D> e1 =
61  (d1->endsOfStrip(InDetDD::SiLocalPosition(lc1.y(), lc1.x(), 0.)));
62 
63  auto stripCenter_1 = 0.5 * (e0.first + e0.second);
64  auto stripDir_1 = e0.first - e0.second;
65  auto trajDir_1 = 2. * ( stripCenter_1 - vertex);
66 
67  auto stripCenter_2 = 0.5 * (e1.first + e1.second);
68  auto stripDir_2 = e1.first - e1.second;
69 
70  float topHalfStripLength = 0.5 * stripDir_1.norm();
71  Eigen::Matrix<double, 3, 1> topStripDirection = - stripDir_1 / (2. * topHalfStripLength);
72  Eigen::Matrix<double, 3, 1> topStripCenter = 0.5 * trajDir_1;
73  float bottomHalfStripLength = 0.5 * stripDir_2.norm();
74  Eigen::Matrix<double, 3, 1> bottomStripDirection = - stripDir_2 / (2. * bottomHalfStripLength);
75  Eigen::Matrix<double, 3, 1> stripCenterDistance = stripCenter_1 - stripCenter_2;
76 
77  const Amg::MatrixX& v = trkSpacePoint.localCovariance();
78  float f22 = static_cast<float>( v(1,1) );
79 
80  float covr = d0->isBarrel() ? .1 : 8.*f22;
81  float covz = d0->isBarrel() ? 8.*f22 : .1;
82 
83  xaodSpacePoint.setSpacePoint({idHashes.first, idHashes.second},
84  globPos.cast<float>(),
85  covr,
86  covz,
87  {},
88  topHalfStripLength,
89  bottomHalfStripLength,
90  topStripDirection.cast<float>(),
91  bottomStripDirection.cast<float>(),
92  stripCenterDistance.cast<float>(),
93  topStripCenter.cast<float>());
94 
95  return StatusCode::SUCCESS;
96  }
97 
98 }
Trk::SpacePoint::clusterList
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:127
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
Trk::SpacePoint::globalPosition
virtual const Amg::Vector3D & globalPosition() const override final
Interface method to get the global Position.
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:146
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
extractSporadic.c1
c1
Definition: extractSporadic.py:134
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
dq_defect_virtual_defect_validation.d1
d1
Definition: dq_defect_virtual_defect_validation.py:79
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
InDet::PixelSpacePoint
Definition: PixelSpacePoint.h:31
TrackingUtilities::convertTrkToXaodPixelSpacePoint
StatusCode convertTrkToXaodPixelSpacePoint(const InDet::PixelSpacePoint &trkSpacePoint, xAOD::SpacePoint &xaodSpacePoint)
Definition: SpacePointConversionUtilities.cxx:12
InDetDD::SiLocalPosition
Definition: SiLocalPosition.h:31
hotSpotInTAG.c0
c0
Definition: hotSpotInTAG.py:192
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
TrackingUtilities
Definition: ClusterConversionUtilities.h:26
xAOD::SpacePoint_v1::setSpacePoint
void setSpacePoint(DetectorIDHashType idHash, const Eigen::Matrix< float, 3, 1 > &globPos, float cov_r, float cov_z, const std::vector< const xAOD::UncalibratedMeasurement * > &measurementIndexes)
Definition: SpacePoint_v1.cxx:103
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
TrackingUtilities::convertTrkToXaodStripSpacePoint
StatusCode convertTrkToXaodStripSpacePoint(const InDet::SCT_SpacePoint &trkSpacePoint, const Amg::Vector3D &vertex, xAOD::SpacePoint &xaodSpacePoint)
Definition: SpacePointConversionUtilities.cxx:43
Trk::SpacePoint::elementIdList
const std::pair< IdentifierHash, IdentifierHash > & elementIdList() const
return the pair of Ids of the element by reference
Definition: Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h:122
SiCluster.h
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDet::SCT_SpacePoint
Definition: SCT_SpacePoint.h:31
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
SiDetectorElement.h
python.PyAthena.v
v
Definition: PyAthena.py:157
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
SpacePointConversionUtilities.h
egammaEnergyPositionAllSamples::e0
double e0(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in pre-sampler
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
python.compressB64.c
def c
Definition: compressB64.py:93
InDet::SiCluster
Definition: InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/SiCluster.h:40