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
9
13#include "GeoModelKernel/throwExcept.h"
15
16constexpr static double one_over_twelve = 1. / 12.;
17
18namespace TrackingUtilities {
19
20 std::pair<xAOD::MeasVector<3>, xAOD::MeasMatrix<3>> convertHGTD_LocalPosCov(const HGTD_Cluster &cluster) {
21 auto localPos = cluster.localPosition();
22 auto localCov = cluster.localCovariance();
23
24 const float time = cluster.time();
25 const float timeResolution = cluster.timeResolution();
26
27 Eigen::Matrix<float,3,1> localPosition = Eigen::Matrix<float,3,1>::Zero();
28 localPosition(0, 0) = localPos.x();
29 localPosition(1, 0) = localPos.y();
30 localPosition(2, 0) = time;
31
32 Eigen::Matrix<float,3,3> localCovariance = Eigen::Matrix<float,3,3>::Zero();
33 localCovariance(0, 0) = localCov(0, 0);
34 localCovariance(1, 1) = localCov(1, 1);
35 localCovariance(2, 2) = timeResolution * timeResolution;
36
37 return {localPosition, localCovariance};
38 }
39
40 StatusCode convertInDetToXaodCluster(const HGTD_Cluster& indetCluster,
41 const InDetDD::HGTD_DetectorElement& element,
42 xAOD::HGTDCluster& xaodCluster)
43 {
44 IdentifierHash idHash = element.identifyHash();
45
46 const auto [localPosition, localCovariance] = convertHGTD_LocalPosCov(indetCluster);
47
48 const auto& RDOs = indetCluster.rdoList();
49 const auto& ToTs = indetCluster.totList();
50
51 xaodCluster.setMeasurement<3>(idHash, localPosition, localCovariance);
52 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
53 xaodCluster.setRDOlist(RDOs);
54 xaodCluster.setToTlist(ToTs);
55
56 return StatusCode::SUCCESS;
57 }
58
59 std::pair<xAOD::MeasVector<2>, xAOD::MeasMatrix<2>> convertPix_LocalPosCov(const InDet::PixelCluster &cluster) {
60 auto localCov = cluster.localCovariance();
61
62 xAOD::MeasVector<2> localPosition = xAOD::toStorage(cluster.localPosition());
63
64 Eigen::Matrix<float,2,2> localCovariance;
65 localCovariance.setZero();
66 localCovariance(0, 0) = localCov(0, 0);
67 localCovariance(1, 1) = localCov(1, 1);
68 //cid 23274
69 //coverity[UNINIT:FALSE]
70 return {localPosition, localCovariance};
71 }
72
73 StatusCode convertInDetToXaodCluster(const InDet::PixelCluster& indetCluster,
74 const InDetDD::SiDetectorElement& element,
75 xAOD::PixelCluster& xaodCluster)
76 {
77 IdentifierHash idHash = element.identifyHash();
78
79 const auto [localPosition, localCovariance] = convertPix_LocalPosCov(indetCluster);
80
81 xAOD::MeasVector<3> globalPosition = xAOD::toStorage(indetCluster.globalPosition());
82
83 const auto& RDOs = indetCluster.rdoList();
84 const auto& ToTs = indetCluster.totList();
85 const auto& charges = indetCluster.chargeList();
86 const auto& width = indetCluster.width();
87
88 xaodCluster.setMeasurement<2>(idHash, localPosition, localCovariance);
89 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
90 xaodCluster.setRDOlist(RDOs);
91 xaodCluster.globalPosition() = globalPosition;
92 xaodCluster.setToTlist(ToTs);
93 xaodCluster.setChargelist(charges);
95 xaodCluster.setLVL1A(indetCluster.LVL1A());
96 xaodCluster.setChannelsInPhiEta(width.colRow()[0], width.colRow()[1]);
97 xaodCluster.setWidthInEta(static_cast<float>(width.widthPhiRZ()[1]));
98
99 return StatusCode::SUCCESS;
100 }
101
102 std::pair<xAOD::MeasVector<1>, xAOD::MeasMatrix<1>> convertSCT_LocalPosCov(const InDet::SCT_Cluster &cluster, bool isITk) {
103 const InDetDD::SiDetectorElement& element{*cluster.detectorElement()};
104 auto localPos = cluster.localPosition();
105
106 float localPosition = 0.f, localCovariance = 0.f;
107 if (element.isBarrel() or (not isITk)) {
108 localPosition = localPos.x();
109 localCovariance = element.phiPitch() * element.phiPitch() * one_over_twelve;
110 } else {
111 InDetDD::SiCellId cellId = element.cellIdOfPosition(localPos);
112 const auto* design = dynamic_cast<const InDetDD::StripStereoAnnulusDesign *>(&element.design());
113 if ( design == nullptr ) {
114 THROW_EXCEPTION("Invalid bounds from "<<cluster);
115 }
116 InDetDD::SiLocalPosition localInPolar = design->localPositionOfCellPC(cellId);
117 localPosition = localInPolar.xPhi();
118 localCovariance = design->phiPitchPhi() * design->phiPitchPhi() * one_over_twelve;
119 }
120
121 return std::make_pair(xAOD::MeasVector<1>{localPosition},
122 xAOD::MeasMatrix<1>{localCovariance});
123 }
124
125 StatusCode convertInDetToXaodCluster(const InDet::SCT_Cluster& indetCluster,
126 const InDetDD::SiDetectorElement& element,
127 xAOD::StripCluster& xaodCluster,
128 bool isITk)
129 {
130 IdentifierHash idHash = element.identifyHash();
131
132 const auto [localPosition, localCovariance] = convertSCT_LocalPosCov(indetCluster, isITk);
133
134 auto globalPos = indetCluster.globalPosition();
135 Eigen::Matrix<float, 3, 1> globalPosition(globalPos.x(), globalPos.y(), globalPos.z());
136
137 const auto& RDOs = indetCluster.rdoList();
138 const auto& width = indetCluster.width();
139
140 xaodCluster.setMeasurement<1>(idHash, localPosition, localCovariance);
141 xaodCluster.setIdentifier( indetCluster.identify().get_compact() );
142 xaodCluster.setRDOlist(RDOs);
143 xaodCluster.globalPosition() = globalPosition;
144 xaodCluster.setChannelsInPhi(width.colRow()[0]);
145
146 return StatusCode::SUCCESS;
147 }
148
149 StatusCode convertXaodToInDetCluster(const xAOD::PixelCluster& xaodCluster,
150 const InDetDD::SiDetectorElement& element,
151 const PixelID& pixelID,
152 InDet::PixelCluster*& indetCluster)
153 {
154 const InDetDD::PixelModuleDesign* design(dynamic_cast<const InDetDD::PixelModuleDesign*>(&element.design()));
155 if (design == nullptr) {
156 return StatusCode::FAILURE;
157 }
158
159 Amg::Vector2D localPosition = xAOD::toEigen(xaodCluster.localPosition<2>());
160
161 InDetDD::SiLocalPosition centroid(localPosition);
162 const Identifier id = element.identifierOfPosition(centroid);
163
164 Amg::Vector3D globalPosition = xAOD::toEigen(xaodCluster.globalPosition());
165 auto errorMatrix = Amg::MatrixX(2,2);
166 errorMatrix.setIdentity();
167 errorMatrix.fillSymmetric(0, 0, xaodCluster.localCovariance<2>()(0, 0));
168 errorMatrix.fillSymmetric(1, 1, xaodCluster.localCovariance<2>()(1, 1));
169
170 int colmax = std::numeric_limits<int>::min();
171 int rowmax = std::numeric_limits<int>::min();
172 int colmin = std::numeric_limits<int>::max();
173 int rowmin = std::numeric_limits<int>::max();
174
175 float qRowMin = 0.f;
176 float qRowMax = 0.f;
177 float qColMin = 0.f;
178 float qColMax = 0.f;
179
181 rdo_list_cluster = xaodCluster.rdoList();
183 charge_list_cluster = xaodCluster.chargeList();
184 std::vector<Identifier> rdo_list_new;
185
186 auto tot_list = xaodCluster.totList();
187
188 rdo_list_new.reserve(rdo_list_cluster.size());
189
190 if (rdo_list_cluster.size() == charge_list_cluster.size()) {
191 for (std::size_t i(0); i<rdo_list_cluster.size(); ++i) {
192 Identifier this_rdo(rdo_list_cluster[i]);
193 rdo_list_new.push_back(this_rdo);
194 const float this_charge=charge_list_cluster[i];
195 const int row = pixelID.phi_index(this_rdo);
196 if (row > rowmax) {
197 rowmax = row;
198 qRowMax = this_charge;
199 } else if (row == rowmax) {
200 qRowMax += this_charge;
201 }
202 if (row < rowmin) {
203 rowmin = row;
204 qRowMin = this_charge;
205 } else if (row == rowmin) {
206 qRowMin += this_charge;
207 }
208
209 const int col = pixelID.eta_index(this_rdo);
210 if (col > colmax) {
211 colmax = col;
212 qColMax = this_charge;
213 } else if (col == colmax) {
214 qColMax += this_charge;
215 }
216
217 if (col < colmin) {
218 colmin = col;
219 qColMin = this_charge;
220 } else if (col == colmin) {
221 qColMin += this_charge;
222 }
223
224 }//loop on rdo list
225 } // check that rdo list has the same size of charge list
226 else {
227 std::ranges::transform(rdo_list_cluster, std::back_inserter(rdo_list_new),
228 [](const Identifier::value_type& rdo) { return Identifier{rdo}; });
229 }
230 // Compute omega for charge interpolation correction (if required)
231 // Two pixels may have charge=0 (very rarely, hopefully)
232 float omegax = -1.f;
233 float omegay = -1.f;
234 if(qRowMin + qRowMax > 0) omegax = qRowMax/(qRowMin + qRowMax);
235 if(qColMin + qColMax > 0) omegay = qColMax/(qColMin + qColMax);
236
237 double etaWidth = design->widthFromColumnRange(colmin, colmax);
238 double phiWidth = design->widthFromRowRange(rowmin, rowmax);
239 InDet::SiWidth width( Amg::Vector2D(xaodCluster.channelsInPhi(), xaodCluster.channelsInEta()),
240 Amg::Vector2D(phiWidth,etaWidth) );
241 indetCluster = new InDet::PixelCluster(id,
242 localPosition,
243 globalPosition,
244 std::move(rdo_list_new),
245 xaodCluster.lvl1a(),
246 std::vector<int>(tot_list.begin(), tot_list.end()),
247 std::vector<float>(charge_list_cluster.begin(),charge_list_cluster.end()),
248 width,
249 &element,
250 std::move(errorMatrix),
251 omegax, omegay,
252 false, 0, 0);
253
254 return StatusCode::SUCCESS;
255 }
256
257 StatusCode convertXaodToInDetCluster(const xAOD::StripCluster& xaodCluster,
258 const InDetDD::SiDetectorElement& element,
259 const SCT_ID& stripID,
260 InDet::SCT_Cluster*& indetCluster,
261 double shift)
262 {
263 bool isBarrel = element.isBarrel();
264 const InDetDD::SCT_ModuleSideDesign* design = nullptr;
265 if (not isBarrel) {
266 design = dynamic_cast<const InDetDD::StripStereoAnnulusDesign*>(&element.design());
267 } else {
268 design = dynamic_cast<const InDetDD::SCT_ModuleSideDesign*>(&element.design());
269 }
270
271 if (design == nullptr) {
272 return StatusCode::FAILURE;
273 }
274
275 const auto designShape = design->shape();
276
277
279 rdo_list_cluster = xaodCluster.rdoList();
280 Identifier id(rdo_list_cluster.front());
281
282 const auto& localPos = xaodCluster.localPosition<1>();
283
284 double pos_x = localPos(0, 0);
285 double pos_y = 0;
286 if (not isBarrel) {
287 const Identifier firstStripId(id);
288 int firstStrip = stripID.strip(firstStripId);
289 int stripRow = stripID.row(firstStripId);
290 int clusterSizeInStrips = xaodCluster.channelsInPhi();
291 auto clusterPosition = design->localPositionOfCluster(design->strip1Dim(firstStrip, stripRow), clusterSizeInStrips);
292 pos_x = clusterPosition.xPhi() + shift;
293 pos_y = clusterPosition.xEta();
294 }
295
296 Amg::Vector2D locpos = Amg::Vector2D( pos_x, pos_y );
297
298 // Most of the following is taken from what is done in ClusterMakerTool
299 // Need to make this computation instead of using the local pos
300 // with local pos instead some differences w.r.t. reference are observed
301 const auto& firstStrip = stripID.strip(Identifier(rdo_list_cluster.front()));
302 const auto& lastStrip = stripID.strip(Identifier(rdo_list_cluster.back()));
303 const auto& row = stripID.row(Identifier(rdo_list_cluster.front()));
304 const int firstStrip1D = design->strip1Dim (firstStrip, row );
305 const int lastStrip1D = design->strip1Dim( lastStrip, row );
306 const InDetDD::SiCellId cell1(firstStrip1D);
307 const InDetDD::SiCellId cell2(lastStrip1D);
308 const InDetDD::SiLocalPosition firstStripPos( element.rawLocalPositionOfCell(cell1 ));
309 const InDetDD::SiLocalPosition lastStripPos( element.rawLocalPositionOfCell(cell2) );
310 const InDetDD::SiLocalPosition centre( (firstStripPos+lastStripPos) * 0.5 );
311 const double clusterWidth = design->stripPitch() * ( lastStrip - firstStrip + 1 );
312
313 const std::pair<InDetDD::SiLocalPosition, InDetDD::SiLocalPosition> ends( design->endsOfStrip(centre) );
314 const double stripLength( std::abs(ends.first.xEta() - ends.second.xEta()) );
315
317 Amg::Vector2D(clusterWidth, stripLength) );
318
319 const double col_x = width.colRow().x();
320 const double col_y = width.colRow().y();
321
322 double scale_factor = 1.;
323 if ( col_x == 1 )
324 scale_factor = 1.05;
325 else if ( col_x == 2 )
326 scale_factor = 0.27;
327
328 auto errorMatrix = Amg::MatrixX(2,2);
329 errorMatrix.setIdentity();
330 errorMatrix.fillSymmetric(0, 0, scale_factor * scale_factor * width.phiR() * width.phiR() * one_over_twelve);
331 errorMatrix.fillSymmetric(1, 1, width.z() * width.z() / col_y / col_y * one_over_twelve);
332
333 if( designShape == InDetDD::Trapezoid or designShape == InDetDD::Annulus) {
334 // rotation for endcap SCT
335
336 // The following is being computed with the local position,
337 // without considering the lorentz shift
338 // So we remove it from the local position
339 Amg::Vector2D local(pos_x - shift, pos_y);
340 double sn = element.sinStereoLocal(local);
341 double sn2 = sn * sn;
342 double cs2 = 1. - sn2;
343 double w = element.phiPitch(local) / element.phiPitch();
344 double v0 = errorMatrix(0,0) * w * w;
345 double v1 = errorMatrix(1,1);
346 errorMatrix.fillSymmetric( 0, 0, cs2 * v0 + sn2 * v1 );
347 errorMatrix.fillSymmetric( 0, 1, sn * std::sqrt(cs2) * (v0 - v1) );
348 errorMatrix.fillSymmetric( 1, 1, sn2 * v0 + cs2 * v1 );
349 }
350 std::vector<Identifier> rdo_list_new;
351 for(Identifier::value_type rdo_id_value : rdo_list_cluster) {
352 rdo_list_new.emplace_back(rdo_id_value);
353 }
354
355 indetCluster = new InDet::SCT_Cluster(id,
356 locpos,
357 std::move(rdo_list_new),
358 width,
359 &element,
360 std::move(errorMatrix));
361
362 return StatusCode::SUCCESS;
363 }
364
365 StatusCode convertXaodToInDetCluster(const xAOD::HGTDCluster& xaodCluster,
366 const InDetDD::HGTD_DetectorElement& element,
367 ::HGTD_Cluster*& indetCluster) {
368
369 const auto& locPos = xaodCluster.localPosition<3>();
370 Amg::Vector2D localPosition(locPos(0,0), locPos(1,0));
371 float time = xAOD::HGTDCluster::time(locPos);
372
373 InDetDD::SiLocalPosition centroid(localPosition);
374 const Identifier id = element.identifierOfPosition(centroid);
375
376 xAOD::ConstMatrixMap<3> local_covariance(xaodCluster.localCovariance<3>());
377 auto errorMatrix = Amg::MatrixX(2,2);
378 errorMatrix.setIdentity();
379 errorMatrix.fillSymmetric(0, 0, local_covariance(0, 0));
380 errorMatrix.fillSymmetric(1, 1, local_covariance(1, 1));
381 float time_resolution = std::sqrt(xAOD::HGTDCluster::timeCovariance(local_covariance));
382
383 double etaWidth = 1.3;
384 double phiWidth = 1.3;
385 int channelsPhi = 1;
386 int channelsEta = 1;
387 InDet::SiWidth width( Amg::Vector2D(channelsPhi, channelsEta), Amg::Vector2D(phiWidth, etaWidth) );
388 std::vector<Identifier> rdo_list;
389 rdo_list.reserve(xaodCluster.rdoList().size());
390 for (const Identifier::value_type rdo_id_value : xaodCluster.rdoList()) {
391 rdo_list.emplace_back(rdo_id_value);
392 }
393
394 indetCluster = new ::HGTD_Cluster(id,
395 localPosition,
396 std::move(rdo_list),
397 width,
398 &element,
399 std::move(errorMatrix),
400 time,
401 time_resolution,
402 std::vector<int>(xaodCluster.totList()));
403
404 return StatusCode::SUCCESS;
405 }
406
407} // Namespace
408
409
static constexpr double one_over_twelve
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration.
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)
StatusCode convertXaodToInDetCluster(const xAOD::PixelCluster &xaodCluster, const InDetDD::SiDetectorElement &element, const PixelID &pixelID, InDet::PixelCluster *&indetCluster)
StatusCode convertInDetToXaodCluster(const InDet::PixelCluster &indetCluster, const InDetDD::SiDetectorElement &element, xAOD::PixelCluster &xaodCluster)
std::pair< xAOD::MeasVector< 3 >, xAOD::MeasMatrix< 3 > > convertHGTD_LocalPosCov(const HGTD_Cluster &cluster)
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