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