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