27#include "Acts/Utilities/MathHelpers.hpp"
28#include "Acts/Utilities/Enumerate.hpp"
32 constexpr double c_inv = 1./ Gaudi::Units::c_light;
37 using namespace Acts::UnitLiterals;
49 return StatusCode::SUCCESS;
55 std::vector<int> signs = SeedingAux::strawSigns(trackPos, trackDir,
57 for (
const auto [spIdx,
sp]: Acts::enumerate(hitsToCalib)) {
58 sp->setDriftRadius(
sp->driftRadius() * signs[spIdx]);
65 const double timeDelay)
const {
70 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint);
72 if (spacePoint.
fitState() == State::Outlier) {
73 calibSP->setFitState(State::Outlier);
74 }
else if (spacePoint.
fitState() == State::Duplicate) {
75 calibSP->setFitState(State::Duplicate);
83 const double timeDelay,
86 const EventContext* ctx = cctx.get<
const EventContext*>();
87 newCalib.reserve(spacePoints.size());
89 newCalib.emplace_back(
calibrate(*ctx, *
sp, segPos, segDir, timeDelay));
98 const double timeDelay)
const {
110 : spPos +
Amg::intersect<3>(posInChamb, dirInChamb, spPos, chDir).value_or(0) * chDir;
115 switch (spacePoint->
type()) {
119 posInChamb, dirInChamb).value_or(0) * dirInChamb;
121 Amg::Vector3D closestApproach{locToGlob* locClosestApproach};
128 Acts::abs(dirInChamb.phi() - 90._degree) > 1.e-7 );
134 State fitState{State::Valid};
136 if (calibOutput.
status() != Muon::MdtDriftCircleStatus::MdtStatusDriftTime) {
138 <<std::endl<<calibInput<<std::endl<<calibOutput);
139 fitState = State::FailedCalib;
140 cov[Acts::toUnderlying(AxisDefs::etaCov)] = dc->readoutElement()->innerTubeRadius();
142 cov[Acts::toUnderlying(AxisDefs::etaCov)] = Acts::square(calibOutput.
driftRadiusUncert());
144 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), fitState);
145 calibSP->setCovariance(cov);
146 calibSP->setDriftRadius(calibOutput.
driftRadius());
148 double fastToF {(locToGlob * calibSP->localPosition()).norm() * c_inv};
152 <<
", ToF / fastToF: " << fastToF <<
" / " << closestApproach.mag() * c_inv
160 MdtCalibInput twinInput{dc->twinIdentify(), dc->twinAdc(), dc->twinTdc(), dc->readoutElement(), *gctx};
165 std::move(calibInput),
166 std::move(twinInput));
168 State fitState{State::Valid};
169 if (calibOutput.
primaryStatus() != Muon::MdtDriftCircleStatus::MdtStatusDriftTime) {
171 <<std::endl<<calibOutput);
172 cov[Acts::toUnderlying(AxisDefs::etaCov)] = Acts::square(dc->readoutElement()->innerTubeRadius());
173 cov[Acts::toUnderlying(AxisDefs::phiCov)] = Acts::square(0.5* dc->readoutElement()->activeTubeLength(dc->measurementHash()));
174 fitState = State::FailedCalib;
176 cov[Acts::toUnderlying(AxisDefs::etaCov)] = Acts::square(calibOutput.
uncertPrimaryR());
177 cov[Acts::toUnderlying(AxisDefs::phiCov)] = Acts::square(calibOutput.
sigmaZ());
179 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), fitState);
180 calibSP->setCovariance(cov);
183 double fastToF {(locToGlob * calibSP->localPosition()).norm() * c_inv};
184 double tubeT0 {
m_mdtCalibrationTool->getCalibConstants(ctx, dc->identify())->tubeCalib->getCalib(dc->identify())->t0};
197 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos));
201 const double time1 =
strip->time()
202 -
strip->readoutElement()->distanceToEdge(
strip->layerHash(), lPos,
208 const double time2 = strip2->time() -
209 strip2->readoutElement()->distanceToEdge(strip2->layerHash(),lPos, EdgeSide::readOut)/
m_rpcSignalVelocity;
213 cov[Acts::toUnderlying(AxisDefs::timeCov)] += Acts::square(
ActsTrk::timeToActs(0.5*(time1 - time2)));
217 calibSP->setCovariance(cov);
219 <<
", at "<<
Amg::toString(calibSP->localPosition())<<
", uncalib time: "
221 <<
", time Uncert: "<<
ActsTrk::timeToAthena(std::sqrt(calibSP->covariance()[Acts::toUnderlying(AxisDefs::timeCov)])));
225 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos));
226 calibSP->setCovariance(cov);
234 std::pair<double, double> calibPosCov {
calibrateMM(ctx, *gctx, *cluster, globalPos, globalDir)};
236 ATH_MSG_DEBUG(
"Calibrated pos and cov" << calibPosCov.first <<
" " << calibPosCov.second);
237 cov[Acts::toUnderlying(AxisDefs::etaCov)] = calibPosCov.second;
241 Amg::Vector3D calibSpPosInLayer = toChamberTrans.inverse() * calibSpPos;
243 calibSpPosInLayer.x() = calibPosCov.first;
245 calibSpPos = toChamberTrans * calibSpPosInLayer;
247 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos));
248 calibSP->setCovariance(cov);
259 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos));
260 calibSP->setCovariance(cov);
264 std::optional<double> posAlongTheStrip{std::nullopt};
271 if (secMeas->numDimensions() == 2) {
272 posAlongTheStrip =
static_cast<double>(secMeas->localPosition<2>()[0]);
274 posAlongTheStrip =
static_cast<double>(secMeas->localPosition<1>()[0]);
284 const auto [calibPos, calibCov] =
calibratesTGC(ctx, *gctx, *stripClus, posAlongTheStrip, globalPos, globalDir);
286 ATH_MSG_DEBUG(
"Calibrated pos and cov" << calibPos <<
" " << calibCov);
287 cov[Acts::toUnderlying(AxisDefs::etaCov)] = calibCov;
288 Amg::Transform3D toChamberTrans{ locToGlob.inverse() * cluster->readoutElement()->localToGlobalTransform(*gctx, cluster->layerHash())};
291 Amg::Vector3D calibSpPosInLayer = toChamberTrans.inverse() * calibSpPos;
293 calibSpPosInLayer.x() = calibPos;
295 calibSpPos = toChamberTrans * calibSpPosInLayer;
297 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos));
298 calibSP->setCovariance(cov);
299 ATH_MSG_DEBUG(
"calibrated sTGC cluster "<<
m_idHelperSvc->toString(cluster->identify()) <<
" loc x old " << cluster->localPosition<1>()[0] <<
" new loc x " << calibSP->localPosition()[1] <<
"cov " << calibSP->covariance());
310 const std::vector<const SpacePoint*>& spacePoints,
313 const double timeDelay)
const {
315 calibSpacePoints.reserve(spacePoints.size());
316 for(
const SpacePoint* spacePoint : spacePoints) {
319 calibSpacePoints.push_back(std::move(hit));
322 return calibSpacePoints;
329 const std::optional<double> driftTime = calibConsts->
rtRelation->tr()->driftTime(spacePoint.
driftRadius());
338 const std::optional<double> driftTime = calibConsts->
rtRelation->tr()->driftTime(spacePoint.
driftRadius());
349 std::vector<NSWCalib::CalibratedStrip> calibClus;
350 StatusCode
sc =
m_nswCalibTool->calibrateClus(ctx, gctx, cluster, globalPos, calibClus);
353 return std::make_pair(0., 0.);
360 calibCov.resize(1,1);
362 ATH_MSG_DEBUG(
"old loc pos " << locPos[0] <<
" old cov" << calibCov(0,0) );
365 if(rotAuthor == Muon::IMMClusterBuilderTool::RIO_Author::unKnownAuthor){
368 ATH_MSG_DEBUG(
"new loc pos " << locPos[0] <<
" new cov" << calibCov(0,0) );
369 return std::make_pair(locPos[0], calibCov(0,0));
375 std::optional<double> posAlongTheStrip,
380 if(!posAlongTheStrip) {
382 posAlongTheStrip = extPosLocal[1];
392 ActsTrk::MutableTrackContainer::TrackStateProxy state)
const {
408 cmbPos, cmbCov, sl, state);
420 const Acts::BoundTrackParameters trackPars{state.referenceSurface().getSharedPtr(),
421 state.parameters(), state.covariance(),
422 Acts::ParticleHypothesis::muon()};
423 std::pair<double, double> calibPosCov{
calibratesTGC(ctx, gctx, *primStripMeas, cmbPos[1] ,
424 trackPars.position(gctx.
context()),
425 trackPars.direction())};
426 cmbPos[0] = calibPosCov.first;
427 cmbCov(0,0) = calibPosCov.second;
437 const Acts::CalibrationContext& cctx,
438 const Acts::SourceLink& link,
439 ActsTrk::MutableTrackContainer::TrackStateProxy trackState)
const {
442 const Acts::BoundTrackParameters trackPars{trackState.referenceSurface().getSharedPtr(),
443 trackState.parameters(), trackState.covariance(),
444 Acts::ParticleHypothesis::muon()};
449 const EventContext* ctx = cctx.get<
const EventContext*>();
451 <<
" @ surface "<<trackState.referenceSurface().geometryId());
453 if (muonMeas->numDimensions() == 0u) {
462 switch (muonMeas->type()){
464 case MdtDriftCircleType: {
471 static_cast<double>(dec_trackSign(*dc)) :
472 Acts::copySign(1.,trackPars.parameters()[Acts::eBoundLoc0]);
475 if (
ATH_LIKELY(muonMeas->numDimensions() == 1)) {
481 if (calibOutput.
status() != Muon::MdtDriftCircleStatus::MdtStatusDriftTime) {
483 <<std::endl<<calibInput<<std::endl<<calibOutput);
484 cov(Acts::eBoundLoc0,Acts::eBoundLoc0) = std::pow(dc->readoutElement()->innerTubeRadius(), 2);
486 pos[Acts::eBoundLoc0] = driftSign*calibOutput.
driftRadius();
487 cov(Acts::eBoundLoc0, Acts::eBoundLoc0) = std::pow(calibOutput.
driftRadiusUncert(), 2);
494 MdtCalibInput twinInput{twinDC->twinIdentify(), twinDC->twinAdc(), twinDC->twinTdc(), twinDC->readoutElement(), *gctx};
499 std::move(calibInput),
500 std::move(twinInput));
503 if (calibOutput.
primaryStatus() != Muon::MdtDriftCircleStatus::MdtStatusDriftTime) {
505 <<std::endl<<calibOutput);
506 locCov(Acts::eBoundLoc0, Acts::eBoundLoc0) = std::pow(dc->readoutElement()->innerTubeRadius(), 2);
507 locCov(Acts::eBoundLoc1, Acts::eBoundLoc1) = std::pow(0.5* dc->readoutElement()->activeTubeLength(dc->measurementHash()), 2);
509 locCov(Acts::eBoundLoc0, Acts::eBoundLoc0) = std::pow(calibOutput.
uncertPrimaryR(), 2);
510 locCov(Acts::eBoundLoc1, Acts::eBoundLoc1) = std::pow(calibOutput.
sigmaZ(), 2);
511 locPos[Acts::eBoundLoc0] = driftSign*calibOutput.
primaryDriftR();
512 locPos[Acts::eBoundLoc1] = calibOutput.
locZ();
517 }
case RpcStripType: {
520 if (
ATH_LIKELY(rpcClust->numDimensions() == 1)) {
526 rpcClust->localPosition<1>(),
527 rpcClust->localCovariance<1>(), link, trackState);
531 measPars[0] = rpcClust->localPosition<1>()[0];
532 measCov(0,0) = rpcClust->localCovariance<1>()(0, 0);
533 ATH_MSG_WARNING(__FILE__<<
":"<<__LINE__<<
"Please fix me using the ActsInterops package");
538 measPars, measCov, link, trackState);
545 rpcClust->localPosition<2>(),
546 rpcClust->localCovariance<2>(), link, trackState);
550 measPars.block<2,1>(0,0) = xAOD::toEigen(rpcClust->localPosition<2>());
551 measCov.block<2,2>(0,0) = xAOD::toEigen(rpcClust->localCovariance<2>());
552 ATH_MSG_WARNING(__FILE__<<
":"<<__LINE__<<
"Please fix me using the ActsInterops package");
555 measPars, measCov, link, trackState);
559 }
case TgcStripType: {
560 const auto* tgcClust =
static_cast<const xAOD::TgcStrip*
>(muonMeas);
565 tgcClust->localPosition<1>(),
566 tgcClust->localCovariance<1>(), link, trackState);
572 case MMClusterType: {
574 std::pair<double, double> calibPosCov{
calibrateMM(*ctx,* gctx, *mmClust, trackPos, trackDir)};
579 pos, cov, link, trackState);
581 }
case sTgcStripType: {
586 muonMeas->localPosition<1>(),
587 muonMeas->localCovariance<1>(), link, trackState);
590 stgcClust->localPosition<2>(),
591 stgcClust->localCovariance<2>(), link, trackState);
594 std::pair<double, double> calibPosCov{
calibratesTGC(*ctx, *gctx, *stgCluster, std::nullopt, trackPos, trackDir)};
599 pos, cov, link, trackState);
604 pos[0] = calibPosCov.first;
605 pos[1] = stgCluster->time();
606 cov(0,0) = calibPosCov.second;
607 ATH_MSG_WARNING(__FILE__<<
":"<<__LINE__<<
"Please fix me using the ActsInterops package");
608 cov(1,1) = std::pow(25 , 2);
611 pos, cov, link, trackState);
617 auxCalibrator.
calibrate(geoctx, cctx, link, trackState);
620 THROW_EXCEPTION(
"The parsed measurement is not a muon measurement. Please check.");
629 dec_trackSign(*meas->spacePoint()->primaryMeasurement()) =
630 SeedingAux::strawSign(segPos, segLine, *meas);
637 const double timeDelay)
const {
648 const double timeDelay)
const {
658 const double timeDelay)
const {
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define AmgSymMatrix(dim)
Acts::GeometryContext context() const
@ e2DimWithTime
Project out the locY & time coordinate - (Applies to Rpc, Tgc, sTgc)
@ e2DimNoTime
Project out solely the locY - Complementary projector if the strip plane is rotated (Applies to Itk e...
@ e1DimWithTime
Project out the two spatial coordinates - (Applies to ITk pixel, BI-Rpc, sTgc pad)
@ e1DimRotNoTime
Project out solely the locX (Applies to Itk strips, Rpc, Tgc, sTgc, Mm)
@ e1DimRotWithTime
Project out the locX & time coordinate - (Applies to Rpc, Tgc, Mm, sTgc)
void setState(const ProjectorType projector, const pos_t &locpos, const cov_t &cov, Acts::SourceLink link, TrackState_t< trajectory_t > &trackState) const
Copy the local position & covariance into the Acts track state proxy.
Source link calibrator implementation for xAOD::Uncalibrated measurements.
void calibrate(const Acts::GeometryContext &gctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &sl, const MutableTrackStateBackend::TrackStateProxy trackState) const
: Interface method for the Acts fitter to calibrate the trajectory track states from the source link ...
static const xAOD::UncalibratedMeasurement * unpack(const Acts::SourceLink &sl)
Helper method to unpack an Acts source link to an uncalibrated measurement.
static Acts::SourceLink pack(const xAOD::UncalibratedMeasurement *meas)
Helper method to pack an uncalibrated measurement to an Acts source link.
double driftRadiusUncert() const
Returns the uncertainty on the drift radius.
double driftRadius() const
Returns the drift radius of the calibrated object.
MdtDriftCircleStatus status() const
Status of the calibration.
double signalPropagationTime() const
Returns the signal propagation time.
double tubeT0() const
Returns the point in time where the muon typically enters the chamber.
MdtDriftCircleStatus primaryStatus() const
double primaryDriftR() const
double uncertPrimaryR() const
const Amg::Transform3D & localToGlobalTransform(const ActsTrk::GeometryContext &ctx) const
Returns the transformation from the local coordinate system of the readout element into the global AT...
Amg::Transform3D globalToLocalTransform(const ActsTrk::GeometryContext &ctx) const
Returns the transformation from the global ATLAS coordinate system into the local coordinate system o...
const Amg::Transform3D & localToGlobalTransform(const ActsTrk::GeometryContext &gctx) const
Returns the local -> global tarnsformation from the sector.
The calibrated Space point is created during the calibration process.
double driftRadius() const
: Returns the size of the drift radius
double time() const
Returns the measurement's recorded time.
const SpacePoint * spacePoint() const
The pointer to the space point out of which this space point has been built.
xAOD::UncalibMeasType type() const
Returns the space point type.
State
State flag to distinguish different space point states.
State fitState() const
Returns the state of the calibrated space point.
std::unique_ptr< CalibratedSpacePoint > CalibSpacePointPtr
std::vector< CalibSpacePointPtr > CalibSpacePointVec
Placeholder for what will later be the muon segment EDM representation.
const MeasVec & measurements() const
Returns the associated measurements.
Gaudi::Property< bool > m_useRpcTime
Load the Rpc time on the track states for the track fit.
void calibrateCombinedPrd(const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const xAOD::CombinedMuonStrip *combinedPrd, ActsTrk::MutableTrackContainer::TrackStateProxy state) const
Calibrates the track states from a combined muon strip.
ToolHandle< Muon::IMMClusterBuilderTool > m_clusterBuilderToolMM
void calibrateSourceLink(const Acts::GeometryContext &geoctx, const Acts::CalibrationContext &cctx, const Acts::SourceLink &link, ActsTrk::MutableTrackContainer::TrackStateProxy state) const override final
double driftRadius(const Acts::CalibrationContext &cctx, const CalibratedSpacePoint &spacePoint, const double timeDelay) const override final
ToolHandle< Muon::INSWCalibTool > m_nswCalibTool
std::pair< double, double > calibratesTGC(const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const xAOD::sTgcStripCluster &cluster, std::optional< double > posAlongTheStrip, const Amg::Vector3D &globalPos, const Amg::Vector3D &globalDir) const
Calibrates the position and covariance of an sTGC (small-strip Thin Gap Chamber) cluster.
double driftVelocity(const Acts::CalibrationContext &ctx, const CalibratedSpacePoint &spacePoint) const override final
ToolHandle< IMdtCalibrationTool > m_mdtCalibrationTool
CalibSpacePointPtr calibrate(const EventContext &ctx, const SpacePoint *spacePoint, const Amg::Vector3D &seedPosInChamb, const Amg::Vector3D &seedDirInChamb, const double timeDelay) const override final
Gaudi::Property< double > m_rpcSignalVelocity
How fast does an electron signal travel along an rpc strip.
void updateSigns(const Amg::Vector3D &trackPos, const Amg::Vector3D &trackDir, CalibSpacePointVec &hitsToCalib) const override final
StatusCode initialize() override final
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
const MuonGMR4::MuonDetectorManager * m_detMgr
Gaudi::Property< bool > m_MdtSignFromSegment
Gaudi::Property< bool > m_useTgcTime
Load the Tgc bunch crossing ID on the track states.
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
access to the ACTS geometry context
Gaudi::Property< bool > m_usesTgcTime
double driftAcceleration(const Acts::CalibrationContext &ctx, const CalibratedSpacePoint &spacePoint) const override final
Gaudi::Property< double > m_rpcTimeResolution
std::pair< double, double > calibrateMM(const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const xAOD::MMCluster &cluster, const Amg::Vector3D &globalPos, const Amg::Vector3D &globalDir) const
Calibrates the position and covariance of a MicroMegas (MM) cluster.
void stampSignsOnMeasurements(const xAOD::MuonSegment &segment) const override final
The muon space point is the combination of two uncalibrated measurements one of them measures the eta...
unsigned dimension() const
Is the space point a 1D or combined 2D measurement.
const Amg::Vector3D & sensorDirection() const
const xAOD::UncalibratedMeasurement * secondaryMeasurement() const
const Amg::Vector3D & localPosition() const
std::array< double, 3 > Cov_t
Abrivation of the covariance type.
const Identifier & identify() const
: Identifier of the primary measurement
xAOD::UncalibMeasType type() const
const Cov_t & covariance() const
Returns the covariance array.
const xAOD::UncalibratedMeasurement * primaryMeasurement() const
const MuonGMR4::SpectrometerSector * msSector() const
Helper class to provide type-safe access to aux data.
const xAOD::UncalibratedMeasurement * primaryStrip() const
Returns the primary associated measurement.
virtual xAOD::UncalibMeasType type() const override final
Returns the type of the measurement type as a simple enumeration.
const Identifier & identify() const
: Returns the Athena identifier of the micro mega cluster It's constructed from the measurementHash &...
IdentifierHash layerHash() const
Returns the hash of the associated layer (Needed for surface retrieval)
const MuonGMR4::MmReadoutElement * readoutElement() const
Retrieve the associated MmReadoutElement.
ConstMatrixMap< N > localCovariance() const
Returns the local covariance of the measurement.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
IdentifierHash layerHash() const
Returns the hash of the associated gasGap layer.
const MuonGMR4::sTgcReadoutElement * readoutElement() const
Retrieve the associated sTgcReadoutElement.
constexpr double timeToAthena(const double actsT)
Converts a time unit from Acts to Athena units.
constexpr double velocityToActs(const double athenaV)
Converts a velocity from Athena to Acts units.
constexpr double accelerationToActs(const double athenaA)
Converts an acceleration from Athena to Acts units.
constexpr double timeToActs(const double athenaT)
Converts a time unit from Athena to Acts units.
std::optional< double > intersect(const AmgVector(N)&posA, const AmgVector(N)&dirA, const AmgVector(N)&posB, const AmgVector(N)&dirB)
Calculates the point B' along the line B that's closest to a second line A.
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
std::pair< Amg::Vector3D, Amg::Vector3D > makeLine(const Parameters &pars)
Returns the parsed parameters into an Eigen line parametrization.
This header ties the generic definitions in this package.
ISpacePointCalibrator::CalibSpacePointVec CalibSpacePointVec
CalibratedSpacePoint::State State
ISpacePointCalibrator::CalibSpacePointPtr CalibSpacePointPtr
const Segment * detailedSegment(const xAOD::MuonSegment &seg)
Helper function to navigate from the xAOD::MuonSegment to the MuonR4::Segment.
Amg::Vector3D toLocal(const Amg::Transform3D &toLocalTrans, const Amg::Vector3D &dir)
Rotates a direction vector into a local frame: x-axis : Parallell to the radial direction of the dete...
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
MdtDriftCircle_v1 MdtDriftCircle
MdtTwinDriftCircle_v1 MdtTwinDriftCircle
std::pair< Amg::Vector2D, AmgSymMatrix(2)> positionAndCovariance(const CombinedMuonStrip *combinedPrd)
Returns the position and covariance from a combined strip measurement.
sTgcStripCluster_v1 sTgcStripCluster
UncalibMeasType
Define the type of the uncalibrated measurement.
const Identifier & identify(const UncalibratedMeasurement *meas)
Returns the associated identifier from the muon measurement.
RpcMeasurement_v1 RpcMeasurement
sTgcMeasurement_v1 sTgcMeasurement
MuonSegment_v1 MuonSegment
Reference the current persistent version:
CombinedMuonStrip_v1 CombinedMuonStrip
class which holds the full set of calibration constants for a given tube
#define THROW_EXCEPTION(MESSAGE)