ATLAS Offline Software
Loading...
Searching...
No Matches
ClusterConversionUtilities.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
11
15#include "GeoModelKernel/throwExcept.h"
20
21
22constexpr static double one_over_twelve = 1. / 12.;
23
24namespace TrackingUtilities {
25
26 std::pair<xAOD::MeasVector<3>, xAOD::MeasMatrix<3>> convertHGTD_LocalPosCov(const HGTD_Cluster &cluster) {
27 auto localPos = cluster.localPosition();
28 auto localCov = cluster.localCovariance();
29
30 const float time = cluster.time();
31 const float timeResolution = cluster.timeResolution();
32
33 Eigen::Matrix<float,3,1> localPosition = Eigen::Matrix<float,3,1>::Zero();
34 localPosition(0, 0) = localPos.x();
35 localPosition(1, 0) = localPos.y();
36 localPosition(2, 0) = time;
37
38 Eigen::Matrix<float,3,3> localCovariance = Eigen::Matrix<float,3,3>::Zero();
39 localCovariance(0, 0) = localCov(0, 0);
40 localCovariance(1, 1) = localCov(1, 1);
41 localCovariance(2, 2) = timeResolution * timeResolution;
42
43 return {localPosition, localCovariance};
44 }
45
46 StatusCode convertInDetToXaodCluster(const HGTD_Cluster& indetCluster,
47 const InDetDD::HGTD_DetectorElement& element,
48 xAOD::HGTDCluster& xaodCluster)
49 {
50 IdentifierHash idHash = element.identifyHash();
51
52 const auto [localPosition, localCovariance] = convertHGTD_LocalPosCov(indetCluster);
53
54 const auto& RDOs = indetCluster.rdoList();
55 const auto& ToTs = indetCluster.totList();
56
57 xaodCluster.setMeasurement<3>(idHash, localPosition, localCovariance);
58 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
59 xaodCluster.setRDOlist(RDOs);
60 xaodCluster.setToTlist(ToTs);
61
62 return StatusCode::SUCCESS;
63 }
64
65 std::pair<xAOD::MeasVector<2>, xAOD::MeasMatrix<2>> convertPix_LocalPosCov(const InDet::PixelCluster &cluster) {
66 auto localCov = cluster.localCovariance();
67
68 xAOD::MeasVector<2> localPosition = xAOD::toStorage(cluster.localPosition());
69
70 Eigen::Matrix<float,2,2> localCovariance;
71 localCovariance.setZero();
72 localCovariance(0, 0) = localCov(0, 0);
73 localCovariance(1, 1) = localCov(1, 1);
74 //cid 23274
75 //coverity[UNINIT:FALSE]
76 return {localPosition, localCovariance};
77 }
78
79 StatusCode convertInDetToXaodCluster(const InDet::PixelCluster& indetCluster,
80 const InDetDD::SiDetectorElement& element,
81 xAOD::PixelCluster& xaodCluster)
82 {
83 IdentifierHash idHash = element.identifyHash();
84
85 const auto [localPosition, localCovariance] = convertPix_LocalPosCov(indetCluster);
86
87 xAOD::MeasVector<3> globalPosition = xAOD::toStorage(indetCluster.globalPosition());
88
89 const auto& RDOs = indetCluster.rdoList();
90 const auto& ToTs = indetCluster.totList();
91 const auto& charges = indetCluster.chargeList();
92 const auto& width = indetCluster.width();
93
94 xaodCluster.setMeasurement<2>(idHash, localPosition, localCovariance);
95 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
96 xaodCluster.setRDOlist(RDOs);
97 xaodCluster.globalPosition() = globalPosition;
98 xaodCluster.setToTlist(ToTs);
99 xaodCluster.setChargelist(charges);
101 xaodCluster.setLVL1A(indetCluster.LVL1A());
102 xaodCluster.setChannelsInPhiEta(width.colRow()[0], width.colRow()[1]);
103 xaodCluster.setWidthInEta(static_cast<float>(width.widthPhiRZ()[1]));
104
105 return StatusCode::SUCCESS;
106 }
107
108 std::pair<xAOD::MeasVector<1>, xAOD::MeasMatrix<1>> convertSCT_LocalPosCov(const InDet::SCT_Cluster &cluster, bool isITk) {
109 const InDetDD::SiDetectorElement& element{*cluster.detectorElement()};
110 auto localPos = cluster.localPosition();
111
112 float localPosition = 0.f, localCovariance = 0.f;
113 if (element.isBarrel() or (not isITk)) {
114 localPosition = localPos.x();
115 localCovariance = element.phiPitch() * element.phiPitch() * one_over_twelve;
116 } else {
117 InDetDD::SiCellId cellId = element.cellIdOfPosition(localPos);
118 const auto* design = dynamic_cast<const InDetDD::StripStereoAnnulusDesign *>(&element.design());
119 if ( design == nullptr ) {
120 THROW_EXCEPTION("Invalid bounds from "<<cluster);
121 }
122 InDetDD::SiLocalPosition localInPolar = design->localPositionOfCellPC(cellId);
123 localPosition = localInPolar.xPhi();
124 localCovariance = design->phiPitchPhi() * design->phiPitchPhi() * one_over_twelve;
125 }
126
127 return std::make_pair(xAOD::MeasVector<1>{localPosition},
128 xAOD::MeasMatrix<1>{localCovariance});
129 }
130
131 StatusCode convertInDetToXaodCluster(const InDet::SCT_Cluster& indetCluster,
132 const InDetDD::SiDetectorElement& element,
133 xAOD::StripCluster& xaodCluster,
134 bool isITk)
135 {
136 IdentifierHash idHash = element.identifyHash();
137
138 const auto [localPosition, localCovariance] = convertSCT_LocalPosCov(indetCluster, isITk);
139
140 auto globalPos = indetCluster.globalPosition();
141 Eigen::Matrix<float, 3, 1> globalPosition(globalPos.x(), globalPos.y(), globalPos.z());
142
143 const auto& RDOs = indetCluster.rdoList();
144 const auto& width = indetCluster.width();
145
146 xaodCluster.setMeasurement<1>(idHash, localPosition, localCovariance);
147 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
148 xaodCluster.setRDOlist(RDOs);
149 xaodCluster.globalPosition() = globalPosition;
150 xaodCluster.setChannelsInPhi(width.colRow()[0]);
151
152 return StatusCode::SUCCESS;
153 }
154
156 {
157 return dynamic_cast<const InDetDD::PixelModuleDesign*>(&element.design());
158 }
159
161 {
162 if (not element.isBarrel()) {
163 return dynamic_cast<const InDetDD::StripStereoAnnulusDesign*>(&element.design());
164 }
165 return dynamic_cast<const InDetDD::SCT_ModuleSideDesign*>(&element.design());
166 }
167
168 std::unique_ptr<InDet::PixelCluster>
170 const InDetDD::SiDetectorElement& element,
171 const InDetDD::PixelModuleDesign& moduleDesign,
172 const PixelID& pixelID)
173 {
174 const InDetDD::PixelModuleDesign* design = &moduleDesign;
175
176 Amg::Vector2D localPosition = xAOD::toEigen(xaodCluster.localPosition<2>());
177
178 InDetDD::SiLocalPosition centroid(localPosition);
179 const Identifier id = element.identifierOfPosition(centroid);
180
181 Amg::Vector3D globalPosition = xAOD::toEigen(xaodCluster.globalPosition());
182 auto errorMatrix = Amg::MatrixX(2,2);
183 errorMatrix.setIdentity();
184 errorMatrix.fillSymmetric(0, 0, xaodCluster.localCovariance<2>()(0, 0));
185 errorMatrix.fillSymmetric(1, 1, xaodCluster.localCovariance<2>()(1, 1));
186
187 int colmax = std::numeric_limits<int>::min();
188 int rowmax = std::numeric_limits<int>::min();
189 int colmin = std::numeric_limits<int>::max();
190 int rowmin = std::numeric_limits<int>::max();
191
192 float qRowMin = 0.f;
193 float qRowMax = 0.f;
194 float qColMin = 0.f;
195 float qColMax = 0.f;
196
198 rdo_list_cluster = xaodCluster.rdoList();
200 charge_list_cluster = xaodCluster.chargeList();
201 std::vector<Identifier> rdo_list_new;
202
203 auto tot_list = xaodCluster.totList();
204
205 rdo_list_new.reserve(rdo_list_cluster.size());
206
207 if (rdo_list_cluster.size() == charge_list_cluster.size()) {
208 for (std::size_t i(0); i<rdo_list_cluster.size(); ++i) {
209 Identifier this_rdo(rdo_list_cluster[i]);
210 rdo_list_new.push_back(this_rdo);
211 const float this_charge=charge_list_cluster[i];
212 const int row = pixelID.phi_index(this_rdo);
213 if (row > rowmax) {
214 rowmax = row;
215 qRowMax = this_charge;
216 } else if (row == rowmax) {
217 qRowMax += this_charge;
218 }
219 if (row < rowmin) {
220 rowmin = row;
221 qRowMin = this_charge;
222 } else if (row == rowmin) {
223 qRowMin += this_charge;
224 }
225
226 const int col = pixelID.eta_index(this_rdo);
227 if (col > colmax) {
228 colmax = col;
229 qColMax = this_charge;
230 } else if (col == colmax) {
231 qColMax += this_charge;
232 }
233
234 if (col < colmin) {
235 colmin = col;
236 qColMin = this_charge;
237 } else if (col == colmin) {
238 qColMin += this_charge;
239 }
240
241 }//loop on rdo list
242 } // check that rdo list has the same size of charge list
243 else {
244 std::ranges::transform(rdo_list_cluster, std::back_inserter(rdo_list_new),
245 [](const Identifier::value_type& rdo) { return Identifier{rdo}; });
246 }
247 // Compute omega for charge interpolation correction (if required)
248 // Two pixels may have charge=0 (very rarely, hopefully)
249 float omegax = -1.f;
250 float omegay = -1.f;
251 if(qRowMin + qRowMax > 0) omegax = qRowMax/(qRowMin + qRowMax);
252 if(qColMin + qColMax > 0) omegay = qColMax/(qColMin + qColMax);
253
254 double etaWidth = design->widthFromColumnRange(colmin, colmax);
255 double phiWidth = design->widthFromRowRange(rowmin, rowmax);
256 InDet::SiWidth width( Amg::Vector2D(xaodCluster.channelsInPhi(), xaodCluster.channelsInEta()),
257 Amg::Vector2D(phiWidth,etaWidth) );
258 return std::make_unique<InDet::PixelCluster>(id,
259 localPosition,
260 globalPosition,
261 std::move(rdo_list_new),
262 xaodCluster.lvl1a(),
263 std::vector<int>(tot_list.begin(), tot_list.end()),
264 std::vector<float>(charge_list_cluster.begin(),charge_list_cluster.end()),
265 width,
266 &element,
267 std::move(errorMatrix),
268 omegax, omegay,
269 false, 0, 0);
270
271 }
272
273 std::unique_ptr<InDet::SCT_Cluster>
275 const InDetDD::SiDetectorElement& element, const InDetDD::SCT_ModuleSideDesign& moduleDesign,
276 const SCT_ID& stripID, double shift)
277 {
278 bool isBarrel = element.isBarrel();
279 const InDetDD::SCT_ModuleSideDesign* design = &moduleDesign;
280
281 const auto designShape = design->shape();
282
283
285 rdo_list_cluster = xaodCluster.rdoList();
286 Identifier id(rdo_list_cluster.front());
287
288 const auto& localPos = xaodCluster.localPosition<1>();
289
290 double pos_x = localPos(0, 0);
291 double pos_y = 0;
292 if (not isBarrel) {
293 const Identifier firstStripId(id);
294 int firstStrip = stripID.strip(firstStripId);
295 int stripRow = stripID.row(firstStripId);
296 int clusterSizeInStrips = xaodCluster.channelsInPhi();
297 auto clusterPosition = design->localPositionOfCluster(design->strip1Dim(firstStrip, stripRow), clusterSizeInStrips);
298 pos_x = clusterPosition.xPhi() + shift;
299 pos_y = clusterPosition.xEta();
300 }
301
302 Amg::Vector2D locpos = Amg::Vector2D( pos_x, pos_y );
303
304 // Most of the following is taken from what is done in ClusterMakerTool
305 // Need to make this computation instead of using the local pos
306 // with local pos instead some differences w.r.t. reference are observed
307 const auto& firstStrip = stripID.strip(Identifier(rdo_list_cluster.front()));
308 const auto& lastStrip = stripID.strip(Identifier(rdo_list_cluster.back()));
309 const auto& row = stripID.row(Identifier(rdo_list_cluster.front()));
310 const int firstStrip1D = design->strip1Dim (firstStrip, row );
311 const int lastStrip1D = design->strip1Dim( lastStrip, row );
312 const InDetDD::SiCellId cell1(firstStrip1D);
313 const InDetDD::SiCellId cell2(lastStrip1D);
314 const InDetDD::SiLocalPosition firstStripPos( element.rawLocalPositionOfCell(cell1 ));
315 const InDetDD::SiLocalPosition lastStripPos( element.rawLocalPositionOfCell(cell2) );
316 const InDetDD::SiLocalPosition centre( (firstStripPos+lastStripPos) * 0.5 );
317 const double clusterWidth = design->stripPitch() * ( lastStrip - firstStrip + 1 );
318
319 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition> ends( design->endsOfStrip(centre) );
320 const double stripLength( std::abs(ends.first.xEta() - ends.second.xEta()) );
321
323 Amg::Vector2D(clusterWidth, stripLength) );
324
325 const double col_x = width.colRow().x();
326 const double col_y = width.colRow().y();
327
328 double scale_factor = 1.;
329 if ( col_x == 1 )
330 scale_factor = 1.05;
331 else if ( col_x == 2 )
332 scale_factor = 0.27;
333
334 auto errorMatrix = Amg::MatrixX(2,2);
335 errorMatrix.setIdentity();
336 errorMatrix.fillSymmetric(0, 0, scale_factor * scale_factor * width.phiR() * width.phiR() * one_over_twelve);
337 errorMatrix.fillSymmetric(1, 1, width.z() * width.z() / col_y / col_y * one_over_twelve);
338
339 if( designShape == InDetDD::Trapezoid or designShape == InDetDD::Annulus) {
340 // rotation for endcap SCT
341
342 // The following is being computed with the local position,
343 // without considering the lorentz shift
344 // So we remove it from the local position
345 Amg::Vector2D local(pos_x - shift, pos_y);
346 double sn = element.sinStereoLocal(local);
347 double sn2 = sn * sn;
348 double cs2 = 1. - sn2;
349 double w = element.phiPitch(local) / element.phiPitch();
350 double v0 = errorMatrix(0,0) * w * w;
351 double v1 = errorMatrix(1,1);
352 errorMatrix.fillSymmetric( 0, 0, cs2 * v0 + sn2 * v1 );
353 errorMatrix.fillSymmetric( 0, 1, sn * std::sqrt(cs2) * (v0 - v1) );
354 errorMatrix.fillSymmetric( 1, 1, sn2 * v0 + cs2 * v1 );
355 }
356 std::vector<Identifier> rdo_list_new;
357 for(Identifier::value_type rdo_id_value : rdo_list_cluster) {
358 rdo_list_new.emplace_back(rdo_id_value);
359 }
360
361 return std::make_unique<InDet::SCT_Cluster>(id,
362 locpos,
363 std::move(rdo_list_new),
364 width,
365 &element,
366 std::move(errorMatrix));
367 }
368
369 std::unique_ptr<::HGTD_Cluster>
371 const auto& locPos = xaodCluster.localPosition<3>();
372 Amg::Vector2D localPosition(locPos(0,0), locPos(1,0));
373 float time = xAOD::HGTDCluster::time(locPos);
374
375 InDetDD::SiLocalPosition centroid(localPosition);
376 const Identifier id = element.identifierOfPosition(centroid);
377
378 xAOD::ConstMatrixMap<3> local_covariance(xaodCluster.localCovariance<3>());
379 auto errorMatrix = Amg::MatrixX(2,2);
380 errorMatrix.setIdentity();
381 errorMatrix.fillSymmetric(0, 0, local_covariance(0, 0));
382 errorMatrix.fillSymmetric(1, 1, local_covariance(1, 1));
383 float time_resolution = std::sqrt(xAOD::HGTDCluster::timeCovariance(local_covariance));
384
385 double etaWidth = 1.3;
386 double phiWidth = 1.3;
387 int channelsPhi = 1;
388 int channelsEta = 1;
389 InDet::SiWidth width( Amg::Vector2D(channelsPhi, channelsEta), Amg::Vector2D(phiWidth, etaWidth) );
390 std::vector<Identifier> rdo_list;
391 rdo_list.reserve(xaodCluster.rdoList().size());
392 for (const Identifier::value_type rdo_id_value : xaodCluster.rdoList()) {
393 rdo_list.emplace_back(rdo_id_value);
394 }
395
396 return std::make_unique<::HGTD_Cluster>(id,
397 localPosition,
398 std::move(rdo_list),
399 width,
400 &element,
401 std::move(errorMatrix),
402 time,
403 time_resolution,
404 std::vector<int>(xaodCluster.totList()));
405
406 }
407
408} // Namespace
409
410
static constexpr double one_over_twelve
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration.
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
const double width
float time() const
const std::vector< int > & totList() const
float timeResolution() const
This is a "hash" representation of an Identifier.
value_type get_compact() const
Get the compact id.
virtual DetectorShape shape() const
Shape of element.
Class to hold geometrical description of an HGTD detector 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 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 SiLocalPosition localPositionOfCluster(const SiCellId &cellId, int cluserSize) const =0
virtual std::pair< SiLocalPosition, SiLocalPosition > endsOfStrip(const SiLocalPosition &position) const override=0
give the ends of strips
Identifier for the strip or pixel cell.
Definition SiCellId.h:29
Class to hold geometrical description of a silicon detector element.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
double phiPitch() const
Pitch (inline methods).
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:
SiCellId cellIdOfPosition(const Amg::Vector2D &localPos) const
As in previous method but returns SiCellId.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
Identifier identifierOfPosition(const Amg::Vector2D &localPos) const
Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift).
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
const Amg::Vector3D & globalPosition() const
return global position reference
const InDet::SiWidth & width() const
return width class reference
virtual const InDetDD::SiDetectorElement * detectorElement() const override final
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
This is an Identifier helper class for the Pixel subdetector.
Definition PixelID.h:69
int eta_index(const Identifier &id) const
Definition PixelID.h:640
int phi_index(const Identifier &id) const
Definition PixelID.h:634
This is an Identifier helper class for the SCT subdetector.
Definition SCT_ID.h:68
int row(const Identifier &id) const
Definition SCT_ID.h:711
int strip(const Identifier &id) const
Definition SCT_ID.h:717
Helper class to provide constant type-safe access to aux data.
const Amg::Vector2D & localPosition() const
return the local position reference
Identifier identify() const
return the identifier
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
void setRDOlist(std::vector< Identifier::value_type > &&rdoList)
Sets the list of identifiers of the channels building the cluster.
float timeCovariance() const
Return the covariance of the measured time in ns squared.
SG::ConstAccessor< SG::JaggedVecElt< int > >::element_type totList() const
Returns the list of Time Over Threshold of the channels building the cluster.
float time() const
Return the measured time in ns.
SG::ConstAccessor< SG::JaggedVecElt< Identifier::value_type > >::element_type rdoList() const
Returns the list of identifiers of the channels building the cluster.
void setToTlist(const std::vector< int > &tots)
Sets the list of ToT of the channels building the cluster.
SG::ConstAccessor< SG::JaggedVecElt< Identifier::value_type > >::element_type rdoList() const
Returns the list of identifiers of the channels building the cluster.
void setTotalCharge(float totalCharge)
Sets the total charge.
void setChannelsInPhiEta(int channelsInPhi, int channelsInEta)
Sets the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions.
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x) and eta (y) directions,...
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the pixel cluster.
SG::ConstAccessor< SG::JaggedVecElt< float > >::element_type chargeList() const
Returns the list of charges of the channels building the cluster.
int lvl1a() const
Return the LVL1 accept.
void setChargelist(const std::vector< float > &charges)
Sets the list of charges of the channels building the cluster.
SG::ConstAccessor< SG::JaggedVecElt< int > >::element_type totList() const
Returns the list of ToT of the channels building the cluster.
int channelsInEta() const
void setToTlist(const std::vector< int > &tots)
Sets the list of ToT of the channels building the cluster.
void setLVL1A(int lvl1a)
Sets the LVL1 accept.
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
void setWidthInEta(float widthInEta)
Sets the width of the cluster in eta (y) direction.
ConstVectorMap< 3 > globalPosition() const
Returns the global position of the strip cluster.
SG::ConstAccessor< SG::JaggedVecElt< Identifier::value_type > >::element_type rdoList() const
Returns the list of identifiers of the channels building the cluster.
void setRDOlist(const std::vector< Identifier > &rdolist)
Sets the list of identifiers of the channels building the cluster.
int channelsInPhi() const
Returns the dimensions of the cluster in numbers of channels in phi (x), respectively.
void setChannelsInPhi(int channelsInPhi)
Sets the dimensions of the cluster in numbers of channels in phi (x).
void setMeasurement(const DetectorIDHashType idHash, MeasVector< N > locPos, MeasMatrix< N > locCov)
Sets IdentifierHash, local position and local covariance of the measurement.
ConstMatrixMap< N > localCovariance() const
Returns the local covariance of the measurement.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
void setIdentifier(const DetectorIdentType measId)
Sets the full Identifier of the measurement.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
std::pair< xAOD::MeasVector< 1 >, xAOD::MeasMatrix< 1 > > convertSCT_LocalPosCov(const InDet::SCT_Cluster &cluster, bool isITk=true)
std::pair< xAOD::MeasVector< 2 >, xAOD::MeasMatrix< 2 > > convertPix_LocalPosCov(const InDet::PixelCluster &cluster)
const InDetDD::PixelModuleDesign * pixelModuleDesign(const InDetDD::SiDetectorElement &element)
Resolve the readout design of a pixel/strip detector element.
StatusCode convertInDetToXaodCluster(const InDet::PixelCluster &indetCluster, const InDetDD::SiDetectorElement &element, xAOD::PixelCluster &xaodCluster)
const InDetDD::SCT_ModuleSideDesign * stripModuleSideDesign(const InDetDD::SiDetectorElement &element)
std::pair< xAOD::MeasVector< 3 >, xAOD::MeasMatrix< 3 > > convertHGTD_LocalPosCov(const HGTD_Cluster &cluster)
std::unique_ptr< InDet::PixelCluster > convertXaodToInDetCluster(const xAOD::PixelCluster &xaodCluster, const InDetDD::SiDetectorElement &element, const InDetDD::PixelModuleDesign &design, const PixelID &pixelID)
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
Eigen::Matrix< float, N, N > MeasMatrix
Eigen::Map< const MeasMatrix< N > > ConstMatrixMap
Eigen::Matrix< float, N, 1 > MeasVector
Abrivation of the Matrix & Covariance definitions.
MeasVector< N > toStorage(const AmgVector(N)&amgVec)
Converts the double precision of the AmgVector into the floating point storage precision of the MeasV...
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
HGTDCluster_v1 HGTDCluster
Define the version of the pixel cluster class.
Definition HGTDCluster.h:13
#define THROW_EXCEPTION(MESSAGE)
Definition throwExcept.h:10