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 const auto* design = dynamic_cast<const InDetDD::StripStereoAnnulusDesign *>(&element.design());
118 if ( design == nullptr ) {
119 THROW_EXCEPTION("Invalid bounds from "<<cluster);
120 }
121 // convert the cluster centre directly, rather than going via the cell id,
122 // which would snap the position to the centre of a single strip
123 InDetDD::SiLocalPosition localInPolar = design->localPositionPC(localPos);
124 localPosition = localInPolar.xPhi();
125 localCovariance = design->phiPitchPhi() * design->phiPitchPhi() * one_over_twelve;
126 }
127
128 return std::make_pair(xAOD::MeasVector<1>{localPosition},
129 xAOD::MeasMatrix<1>{localCovariance});
130 }
131
132 StatusCode convertInDetToXaodCluster(const InDet::SCT_Cluster& indetCluster,
133 const InDetDD::SiDetectorElement& element,
134 xAOD::StripCluster& xaodCluster,
135 bool isITk)
136 {
137 IdentifierHash idHash = element.identifyHash();
138
139 const auto [localPosition, localCovariance] = convertSCT_LocalPosCov(indetCluster, isITk);
140
141 auto globalPos = indetCluster.globalPosition();
142 Eigen::Matrix<float, 3, 1> globalPosition(globalPos.x(), globalPos.y(), globalPos.z());
143
144 const auto& RDOs = indetCluster.rdoList();
145 const auto& width = indetCluster.width();
146
147 xaodCluster.setMeasurement<1>(idHash, localPosition, localCovariance);
148 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
149 xaodCluster.setRDOlist(RDOs);
150 xaodCluster.globalPosition() = globalPosition;
151 xaodCluster.setChannelsInPhi(width.colRow()[0]);
152
153 return StatusCode::SUCCESS;
154 }
155
157 {
158 return dynamic_cast<const InDetDD::PixelModuleDesign*>(&element.design());
159 }
160
162 {
163 if (not element.isBarrel()) {
164 return dynamic_cast<const InDetDD::StripStereoAnnulusDesign*>(&element.design());
165 }
166 return dynamic_cast<const InDetDD::SCT_ModuleSideDesign*>(&element.design());
167 }
168
169 std::unique_ptr<InDet::PixelCluster>
171 const InDetDD::SiDetectorElement& element,
172 const InDetDD::PixelModuleDesign& moduleDesign,
173 const PixelID& pixelID)
174 {
175 const InDetDD::PixelModuleDesign* design = &moduleDesign;
176
177 Amg::Vector2D localPosition = xAOD::toEigen(xaodCluster.localPosition<2>());
178
179 InDetDD::SiLocalPosition centroid(localPosition);
180 const Identifier id = element.identifierOfPosition(centroid);
181
182 Amg::Vector3D globalPosition = xAOD::toEigen(xaodCluster.globalPosition());
183 auto errorMatrix = Amg::MatrixX(2,2);
184 errorMatrix.setIdentity();
185 errorMatrix.fillSymmetric(0, 0, xaodCluster.localCovariance<2>()(0, 0));
186 errorMatrix.fillSymmetric(1, 1, xaodCluster.localCovariance<2>()(1, 1));
187
188 int colmax = std::numeric_limits<int>::min();
189 int rowmax = std::numeric_limits<int>::min();
190 int colmin = std::numeric_limits<int>::max();
191 int rowmin = std::numeric_limits<int>::max();
192
193 float qRowMin = 0.f;
194 float qRowMax = 0.f;
195 float qColMin = 0.f;
196 float qColMax = 0.f;
197
199 rdo_list_cluster = xaodCluster.rdoList();
201 charge_list_cluster = xaodCluster.chargeList();
202 std::vector<Identifier> rdo_list_new;
203
204 auto tot_list = xaodCluster.totList();
205
206 rdo_list_new.reserve(rdo_list_cluster.size());
207
208 if (rdo_list_cluster.size() == charge_list_cluster.size()) {
209 for (std::size_t i(0); i<rdo_list_cluster.size(); ++i) {
210 Identifier this_rdo(rdo_list_cluster[i]);
211 rdo_list_new.push_back(this_rdo);
212 const float this_charge=charge_list_cluster[i];
213 const int row = pixelID.phi_index(this_rdo);
214 if (row > rowmax) {
215 rowmax = row;
216 qRowMax = this_charge;
217 } else if (row == rowmax) {
218 qRowMax += this_charge;
219 }
220 if (row < rowmin) {
221 rowmin = row;
222 qRowMin = this_charge;
223 } else if (row == rowmin) {
224 qRowMin += this_charge;
225 }
226
227 const int col = pixelID.eta_index(this_rdo);
228 if (col > colmax) {
229 colmax = col;
230 qColMax = this_charge;
231 } else if (col == colmax) {
232 qColMax += this_charge;
233 }
234
235 if (col < colmin) {
236 colmin = col;
237 qColMin = this_charge;
238 } else if (col == colmin) {
239 qColMin += this_charge;
240 }
241
242 }//loop on rdo list
243 } // check that rdo list has the same size of charge list
244 else {
245 std::ranges::transform(rdo_list_cluster, std::back_inserter(rdo_list_new),
246 [](const Identifier::value_type& rdo) { return Identifier{rdo}; });
247 }
248 // Compute omega for charge interpolation correction (if required)
249 // Two pixels may have charge=0 (very rarely, hopefully)
250 float omegax = -1.f;
251 float omegay = -1.f;
252 if(qRowMin + qRowMax > 0) omegax = qRowMax/(qRowMin + qRowMax);
253 if(qColMin + qColMax > 0) omegay = qColMax/(qColMin + qColMax);
254
255 double etaWidth = design->widthFromColumnRange(colmin, colmax);
256 double phiWidth = design->widthFromRowRange(rowmin, rowmax);
257 InDet::SiWidth width( Amg::Vector2D(xaodCluster.channelsInPhi(), xaodCluster.channelsInEta()),
258 Amg::Vector2D(phiWidth,etaWidth) );
259 return std::make_unique<InDet::PixelCluster>(id,
260 localPosition,
261 globalPosition,
262 std::move(rdo_list_new),
263 xaodCluster.lvl1a(),
264 std::vector<int>(tot_list.begin(), tot_list.end()),
265 std::vector<float>(charge_list_cluster.begin(),charge_list_cluster.end()),
266 width,
267 &element,
268 std::move(errorMatrix),
269 omegax, omegay,
270 false, 0, 0);
271
272 }
273
274 std::unique_ptr<InDet::SCT_Cluster>
276 const InDetDD::SiDetectorElement& element, const InDetDD::SCT_ModuleSideDesign& moduleDesign,
277 const SCT_ID& stripID, double shift)
278 {
279 bool isBarrel = element.isBarrel();
280 const InDetDD::SCT_ModuleSideDesign* design = &moduleDesign;
281
282 const auto designShape = design->shape();
283
284
286 rdo_list_cluster = xaodCluster.rdoList();
287 Identifier id(rdo_list_cluster.front());
288
289 const auto& localPos = xaodCluster.localPosition<1>();
290
291 double pos_x = localPos(0, 0);
292 double pos_y = 0;
293 if (not isBarrel) {
294 const Identifier firstStripId(id);
295 int firstStrip = stripID.strip(firstStripId);
296 int stripRow = stripID.row(firstStripId);
297 int clusterSizeInStrips = xaodCluster.channelsInPhi();
298 auto clusterPosition = design->localPositionOfCluster(design->strip1Dim(firstStrip, stripRow), clusterSizeInStrips);
299 pos_x = clusterPosition.xPhi() + shift;
300 pos_y = clusterPosition.xEta();
301 }
302
303 Amg::Vector2D locpos = Amg::Vector2D( pos_x, pos_y );
304
305 // Most of the following is taken from what is done in ClusterMakerTool
306 // Need to make this computation instead of using the local pos
307 // with local pos instead some differences w.r.t. reference are observed
308 const auto& firstStrip = stripID.strip(Identifier(rdo_list_cluster.front()));
309 const auto& lastStrip = stripID.strip(Identifier(rdo_list_cluster.back()));
310 const auto& row = stripID.row(Identifier(rdo_list_cluster.front()));
311 const int firstStrip1D = design->strip1Dim (firstStrip, row );
312 const int lastStrip1D = design->strip1Dim( lastStrip, row );
313 const InDetDD::SiCellId cell1(firstStrip1D);
314 const InDetDD::SiCellId cell2(lastStrip1D);
315 const InDetDD::SiLocalPosition firstStripPos( element.rawLocalPositionOfCell(cell1 ));
316 const InDetDD::SiLocalPosition lastStripPos( element.rawLocalPositionOfCell(cell2) );
317 const InDetDD::SiLocalPosition centre( (firstStripPos+lastStripPos) * 0.5 );
318 const double clusterWidth = design->stripPitch() * ( lastStrip - firstStrip + 1 );
319
320 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition> ends( design->endsOfStrip(centre) );
321 const double stripLength( std::abs(ends.first.xEta() - ends.second.xEta()) );
322
324 Amg::Vector2D(clusterWidth, stripLength) );
325
326 const double col_x = width.colRow().x();
327 const double col_y = width.colRow().y();
328
329 double scale_factor = 1.;
330 if ( col_x == 1 )
331 scale_factor = 1.05;
332 else if ( col_x == 2 )
333 scale_factor = 0.27;
334
335 auto errorMatrix = Amg::MatrixX(2,2);
336 errorMatrix.setIdentity();
337 errorMatrix.fillSymmetric(0, 0, scale_factor * scale_factor * width.phiR() * width.phiR() * one_over_twelve);
338 errorMatrix.fillSymmetric(1, 1, width.z() * width.z() / col_y / col_y * one_over_twelve);
339
340 if( designShape == InDetDD::Trapezoid or designShape == InDetDD::Annulus) {
341 // rotation for endcap SCT
342
343 // The following is being computed with the local position,
344 // without considering the lorentz shift
345 // So we remove it from the local position
346 Amg::Vector2D local(pos_x - shift, pos_y);
347 double sn = element.sinStereoLocal(local);
348 double sn2 = sn * sn;
349 double cs2 = 1. - sn2;
350 double w = element.phiPitch(local) / element.phiPitch();
351 double v0 = errorMatrix(0,0) * w * w;
352 double v1 = errorMatrix(1,1);
353 errorMatrix.fillSymmetric( 0, 0, cs2 * v0 + sn2 * v1 );
354 errorMatrix.fillSymmetric( 0, 1, sn * std::sqrt(cs2) * (v0 - v1) );
355 errorMatrix.fillSymmetric( 1, 1, sn2 * v0 + cs2 * v1 );
356 }
357 std::vector<Identifier> rdo_list_new;
358 for(Identifier::value_type rdo_id_value : rdo_list_cluster) {
359 rdo_list_new.emplace_back(rdo_id_value);
360 }
361
362 return std::make_unique<InDet::SCT_Cluster>(id,
363 locpos,
364 std::move(rdo_list_new),
365 width,
366 &element,
367 std::move(errorMatrix));
368 }
369
370 std::unique_ptr<::HGTD_Cluster>
372 const auto& locPos = xaodCluster.localPosition<3>();
373 Amg::Vector2D localPosition(locPos(0,0), locPos(1,0));
374 float time = xAOD::HGTDCluster::time(locPos);
375
376 InDetDD::SiLocalPosition centroid(localPosition);
377 const Identifier id = element.identifierOfPosition(centroid);
378
379 xAOD::ConstMatrixMap<3> local_covariance(xaodCluster.localCovariance<3>());
380 auto errorMatrix = Amg::MatrixX(2,2);
381 errorMatrix.setIdentity();
382 errorMatrix.fillSymmetric(0, 0, local_covariance(0, 0));
383 errorMatrix.fillSymmetric(1, 1, local_covariance(1, 1));
384 float time_resolution = std::sqrt(xAOD::HGTDCluster::timeCovariance(local_covariance));
385
386 double etaWidth = 1.3;
387 double phiWidth = 1.3;
388 int channelsPhi = 1;
389 int channelsEta = 1;
390 InDet::SiWidth width( Amg::Vector2D(channelsPhi, channelsEta), Amg::Vector2D(phiWidth, etaWidth) );
391 std::vector<Identifier> rdo_list;
392 rdo_list.reserve(xaodCluster.rdoList().size());
393 for (const Identifier::value_type rdo_id_value : xaodCluster.rdoList()) {
394 rdo_list.emplace_back(rdo_id_value);
395 }
396
397 return std::make_unique<::HGTD_Cluster>(id,
398 localPosition,
399 std::move(rdo_list),
400 width,
401 &element,
402 std::move(errorMatrix),
403 time,
404 time_resolution,
405 std::vector<int>(xaodCluster.totList()));
406
407 }
408
409} // Namespace
410
411
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:
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