ATLAS Offline Software
Loading...
Searching...
No Matches
Muon::MdtDriftCircleOnTrackCreator Class Reference

Interface for the reconstruction to MDT calibration and alignment corrections. More...

#include <MdtDriftCircleOnTrackCreator.h>

Inheritance diagram for Muon::MdtDriftCircleOnTrackCreator:
Collaboration diagram for Muon::MdtDriftCircleOnTrackCreator:

Classes

struct  CalibrationOutput
 struct to hold output of calibration More...

Public Types

enum  TimingMode {
  ATLTIME =0 , NO_CORRECTIONS = 1 , COSMICS_TRIGGERTIME = 2 , COSMICS_TOF =3 ,
  NumberOfTimingModes
}
using MdtRotPtr = MdtDriftCircleOnTrack*

Public Member Functions

 MdtDriftCircleOnTrackCreator (const std::string &, const std::string &, const IInterface *)
virtual ~MdtDriftCircleOnTrackCreator ()=default
virtual StatusCode initialize () override final
virtual MdtRotPtr createRIO_OnTrack (const MdtPrepData &prd, const Amg::Vector3D &globalPos, const Amg::Vector3D *gdir=nullptr, const double t0Shift=0., const MuonDriftCircleErrorStrategy *strategy=nullptr, const double beta=1, const double tTrack=1) const override final
 Calibrate a MdtPrepData object.
virtual void updateSign (MdtDriftCircleOnTrack &rot, const Trk::DriftCircleSide si) const override final
 Update of the sign of the drift radius.
virtual MdtRotPtr updateError (const MdtDriftCircleOnTrack &DCT, const Trk::TrackParameters *pars=nullptr, const MuonDriftCircleErrorStrategy *strategy=nullptr) const override
 Update error of a ROT without changing the drift radius.
virtual Trk::RIO_OnTrackcorrect (const Trk::PrepRawData &prd, const Trk::TrackParameters &tp, const EventContext &) const override
 Base class method for correct.
virtual MdtRotPtr correct (const MdtPrepData &prd, const Trk::TrackParameters &tp, const MuonDriftCircleErrorStrategy *strategy, const double beta, const double tTrack) const override final
 Returns calibrated MdtDriftCircleOnTrack.
virtual const MuonDriftCircleErrorStrategyerrorStrategy () const override
 Returns the default error strategy object.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
 DeclareInterfaceID (Muon::IMdtDriftCircleOnTrackCreator, 1, 0)
virtual RIO_OnTrackcorrect (const PrepRawData &hit, const TrackParameters &trk, const EventContext &ctx) const=0
 Returns calibrated MdtDriftCircleOnTrack.

Static Public Member Functions

static const InterfaceID & interfaceID ()
 The AlgTool InterfaceID.

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

double timeOfFlight (const Amg::Vector3D &pos, const double beta, const double tTrack, const double tShift) const
CalibrationOutput getLocalMeasurement (const EventContext &ctx, const MdtPrepData &DC, const MdtCalibInput &calibInput, const MuonDriftCircleErrorStrategy &strategy) const
 preform the mdt calibration
double getTriggerTime () const
 currently returns 0.
double mooreErrorStrategy (const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategyMC (const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategyLoose (const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategyTight (const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double muonErrorStrategy (const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Static Private Member Functions

static double parametrisedSigma (double r)

Private Attributes

ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
ToolHandle< IMdtCalibrationToolm_mdtCalibrationTool {this, "CalibrationTool", ""}
Gaudi::Property< bool > m_doMdt {this, "doMDT", true}
 Process MDT ROTs.
Gaudi::Property< int > m_timeCorrectionType {this, "TimingMode", 0}
Gaudi::Property< double > m_fixedError {this, "FixedError", 1.}
 < Error used when m_doFixed error =true or m_scaleErrorManually = true
Gaudi::Property< double > m_globalToLocalTolerance
MuonDriftCircleErrorStrategy m_errorStrategy {MuonDriftCircleErrorStrategyInput{}}
 < Error strategy for created ROTs
Gaudi::Property< std::string > m_defaultStrategy
 if set to true, the ROT creator create 'tube' hits with a local position of 0 and an error of tube radius/sqrt(12)
Gaudi::Property< bool > m_createTubeHits {this, "CreateTubeHit", false}
 Scale ROTs depending on local alignment (i.e.
Gaudi::Property< bool > m_scaleMdtCov {this, "DoErrorScaling", true}
 Fixed error (not tube radius)
Gaudi::Property< bool > m_doFixedError {this, "DoFixedError", true}
 Use parameterised errors.
Gaudi::Property< bool > m_useErrorParametrisation {this, "UseParametrisedError", false}
 Use the predicted track position to correct the Error.
Gaudi::Property< bool > m_errorAtPredictedPosition {this, "UseErrorAtPredictedPosition", false}
 Add a term to the error to account for very poorly aligned stations.
Gaudi::Property< bool > m_stationError {this, "DoStationError", false}
 Add a special error to account for the T0 refit.
Gaudi::Property< bool > m_t0Refit {this, "T0RefitError", false}
 Use error strategy for segments by default.
Gaudi::Property< bool > m_doSegments {this, "DoSegmentErrors", true}
 Deweight individual chambers.
Gaudi::Property< bool > m_doIndividualChamberReweights {this, "DeweightIndividualChambers", true}
 toggle between MC and data alignment errors (to be removed in rel.
Gaudi::Property< bool > m_isMC {this, "IsMC", false}
 toggle whether the time of flight is included in the t0 shifts
Gaudi::Property< bool > m_applyToF {this, "ApplyToF", true}
 toggle between loose errors (initial before alignment) and tight after alignment
Gaudi::Property< bool > m_looseErrors
Gaudi::Property< bool > m_wasConfigured
int m_BME_idx {-1}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Static Private Attributes

static constexpr double s_inverseSpeedOfLight {1. / Gaudi::Units::c_light}

Detailed Description

Interface for the reconstruction to MDT calibration and alignment corrections.

It should be used by reconstruction and pattern recognition to create Muon::MdtDriftCircleOnTrack (s).

It offers several interfaces:

The tool is capable of handling serveral different timing cases (click links to see definitions):

  • normal time of flight corrections assuming IP + light speed to be used for simulated data and collision data
  • cosmics taken with scintilator trigger or cosmic simulation without TOF
  • cosmics taken with scintilator trigger which is read out so the offset with respect to the clock is known. This mode is not completely functional yet as the way to access the trigger time is not known at the moment
  • normal cosmic data with rpc trigger or simulation including TOF. It uses the MuonCosmicTofTool to calculate the correct timing with respect to the MuonTriggerPoint
  • testbeam running. Currently not implemented, propose not to change anything for the moment for testbeam The modes can be selected setting the TimingMode in the job options.

JobOptions Flags:

  • doMDT: switch on/off ROT creation (default = true)
  • TimingMode: select timing mode (default = ATLTIME)
  • CreateTubeHit: Flag to turn on the creation of tube hits (default = false)

Definition at line 69 of file MdtDriftCircleOnTrackCreator.h.

Member Typedef Documentation

◆ MdtRotPtr

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Member Enumeration Documentation

◆ TimingMode

Enumerator
ATLTIME 

normal time of flight corrections assuming IP + light speed to be used for simulated data and collision data

special case for cosmics taken with scintilator trigger or cosmic simulation without TOF

NO_CORRECTIONS 

special case for cosmics taken with scintilator trigger which is read out so the offset with respect to the clock is known.

This mode is not completely functional yet as the way to access the trigger time is not known at the moment

COSMICS_TRIGGERTIME 

case for normal cosmic data with rpc trigger or simulation including TOF.

It uses the MuonCosmicTofTool to calculate the correct timing with respect to the MuonTriggerPoint

COSMICS_TOF 
NumberOfTimingModes 

Definition at line 71 of file MdtDriftCircleOnTrackCreator.h.

71 {
74 ATLTIME =0,
86 COSMICS_TOF =3,
87
89 };
@ ATLTIME
normal time of flight corrections assuming IP + light speed to be used for simulated data and collisi...
@ NO_CORRECTIONS
special case for cosmics taken with scintilator trigger which is read out so the offset with respect ...
@ COSMICS_TRIGGERTIME
case for normal cosmic data with rpc trigger or simulation including TOF.

Constructor & Destructor Documentation

◆ MdtDriftCircleOnTrackCreator()

Muon::MdtDriftCircleOnTrackCreator::MdtDriftCircleOnTrackCreator ( const std::string & ty,
const std::string & na,
const IInterface * pa )

Definition at line 26 of file MdtDriftCircleOnTrackCreator.cxx.

29 : AthAlgTool(ty, na, pa) {
30 // algtool interface - necessary!
31 declareInterface<IMdtDriftCircleOnTrackCreator>(this);
32 declareInterface<IRIO_OnTrackCreator>(this);
33}
AthAlgTool()
Default constructor:

◆ ~MdtDriftCircleOnTrackCreator()

virtual Muon::MdtDriftCircleOnTrackCreator::~MdtDriftCircleOnTrackCreator ( )
virtualdefault

Member Function Documentation

◆ correct() [1/3]

virtual RIO_OnTrack * Trk::IRIO_OnTrackCreator::correct ( const PrepRawData & hit,
const TrackParameters & trk,
const EventContext & ctx ) const
inherited

Returns calibrated MdtDriftCircleOnTrack.

Overrides the IRIO_OnTrackCreator method to add an error strategy object.

Parameters
prdReference to a Trk::PrepRawData object (which should always be a Muon::MdtPrepData in this case)
tpReference to the extrapolated/predicted TrackParameters at this MdtPrepData
Returns
calibrated MdtDriftCircleOnTrack. Memory management is passed to user.

◆ correct() [2/3]

MdtRotPtr Muon::MdtDriftCircleOnTrackCreator::correct ( const MdtPrepData & prd,
const Trk::TrackParameters & tp,
const MuonDriftCircleErrorStrategy * strategy,
const double beta,
const double tTrack ) const
finaloverridevirtual

Returns calibrated MdtDriftCircleOnTrack.

Implementation of IRIO_OnTrackCreator method

Parameters
prdReference to a Trk::PrepRawData object (which should always be a Muon::MdtPrepData in this case)
tpReference to the extrapolated/predicted TrackParameters at this MdtPrepData
Returns
calibrated MdtDriftCircleOnTrack. Memory management is passed to user.

Implements Muon::IMdtDriftCircleOnTrackCreator.

Definition at line 374 of file MdtDriftCircleOnTrackCreator.cxx.

378 {
379
380 const Amg::Vector3D& momentum = tp.momentum();
381 return createRIO_OnTrack(prd, tp.position(), &momentum, 0, strategy, beta, tTrack);
382}
Eigen::Matrix< double, 3, 1 > Vector3D

◆ correct() [3/3]

Trk::RIO_OnTrack * Muon::MdtDriftCircleOnTrackCreator::correct ( const Trk::PrepRawData & prd,
const Trk::TrackParameters & tp,
const EventContext &  ) const
overridevirtual

Base class method for correct.

Implements Trk::IRIO_OnTrackCreator.

Definition at line 384 of file MdtDriftCircleOnTrackCreator.cxx.

386 {
388 ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Incorrect hit type: "
389 <<" Trk::PrepRawData not a MdtPrepData!! No rot created ");
390 return nullptr;
391 }
392 Amg::Vector3D momentum = tp.momentum();
393
394 return createRIO_OnTrack(static_cast<const MdtPrepData&>(prd), tp.position(), &momentum);
395}
#define ATH_MSG_WARNING(x)
virtual bool type(PrepRawDataType type) const
Interface method checking the type.

◆ createRIO_OnTrack()

MdtRotPtr Muon::MdtDriftCircleOnTrackCreator::createRIO_OnTrack ( const MdtPrepData & prd,
const Amg::Vector3D & globalPos,
const Amg::Vector3D * gdir = nullptr,
const double t0Shift = 0.,
const MuonDriftCircleErrorStrategy * strategy = nullptr,
const double beta = 1,
const double tTrack = 1 ) const
finaloverridevirtual

Calibrate a MdtPrepData object.

The result is stored in a new MdtDriftCircleOnTrack object. Included calibrations:

  • Conversion t->r using MdtCalibrationSvc
  • Wire sag + chamber deformations (if available)
  • Special treatment for cosmics if switched on
    Parameters
    prdMdtPrepData object
    globalPosGlobalPosition (including second coordinate along the tube)
    gdirGlobalDirection of track
    strategyoptional drift circle error strategy to override the default
    Returns
    Fully calibrated MdtDriftCircleOnTrack (the user must delete this object when it is no longer needed)

Implements Muon::IMdtDriftCircleOnTrackCreator.

Definition at line 139 of file MdtDriftCircleOnTrackCreator.cxx.

145 {
146
147 const EventContext& ctx{Gaudi::Hive::currentContext()};
148
149 const MuonDriftCircleErrorStrategy& myStrategy{!strategy ? m_errorStrategy : *strategy};
150
151 const Identifier iD = mdtPrd.identify();
152
153 MdtCalibInput calibInput{mdtPrd};
154 calibInput.setClosestApproach(GP);
155 if (GD) calibInput.setTrackDirection((*GD).unit(), true);
156
157 switch (m_timeCorrectionType) {
158 case ATLTIME:
159 // normal time of flight corrections assuming IP + light speed
160 calibInput.setTimeOfFlight(calibInput.closestApproach().mag() * s_inverseSpeedOfLight);
161 ATH_MSG_VERBOSE(" running in ATLTIME mode, tof: " << calibInput.timeOfFlight());
162 break;
163 case NO_CORRECTIONS:
164 // special case for cosmics taken with scintilator trigger or
165 // cosmic simulation without TOF
166 calibInput.setTimeOfFlight(0);
167 ATH_MSG_VERBOSE("running in NO_CORRECTIONS mode, tof: " << calibInput.timeOfFlight());
168 break;
170 // special case for cosmics taken with scintilator trigger which
171 // is read out so the offset with respect to the clock is known
172 // getTriggerTime() NOT IMPLEMENETED YET!!!!!!
173 calibInput.setTriggerTime(getTriggerTime());
174 ATH_MSG_VERBOSE(" running in COSMICS_TRIGGERTIME mode, triggerOffset: "
175 << calibInput.triggerTime());
176 break;
177 case COSMICS_TOF:
178 calibInput.setTimeOfFlight(timeOfFlight(calibInput.closestApproach(), beta, tTrack, t0Shift));
179 ATH_MSG_VERBOSE(" running in COSMICS_TOF mode, tof: "
180 << calibInput.timeOfFlight() << " tTrack: " << tTrack
181 << " t0Shift: " << t0Shift
182 << " applyToF: " << m_applyToF);
183 break;
184 default:
185 // default, no tof. Indicates wrong configuration
186 ATH_MSG_WARNING("No valid mode selected, cannot apply tof correction");
187 calibInput.setTimeOfFlight(0);
188 break;
189 }
190
191 Amg::Vector2D posOnWire{Amg::Vector2D::Zero()};
192 // if wire sag is taken into account, cast the surface to
193 // StraightLineSurface so it can be added to the ROT
194 const Trk::Surface& surf{calibInput.legacySurface()};
195 std::optional<Amg::Vector2D> posOnIdealWire = surf.globalToLocal(GP, m_globalToLocalTolerance);
196 if (!posOnIdealWire) {
197 ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" globalToLocal() failed for ideal surface");
198 return nullptr;
199 }
200 posOnWire = std::move(*posOnIdealWire);
201
202 double positionAlongWire = posOnWire[Trk::locZ];
203 // set driftcirclestatus, NODRIFTTIME if creating tube hits else UNDECIDED
205
206 CalibrationOutput calibOutput = getLocalMeasurement(ctx, mdtPrd, calibInput, myStrategy);
207 // This basically determines the error etc and is where the bulk of the work
208 // is done.
209
210 // hack to determine whether we are before or after the spectrum, until we
211 // sort this out properly
212 if (!calibOutput.calibOk && calibOutput.driftTime > 500.) {
213 ATH_MSG_WARNING("Unable to perform calibration ");
214 return nullptr;
215 }
216
217 std::unique_ptr<MdtDriftCircleOnTrack> rot{};
218
219 // we have to calculate sign, check whether direction is given
220 if (m_doMdt && GD) {
221 // calculate sign using surface
222 const Trk::Surface& surf{calibInput.legacySurface()};
223 std::optional<Amg::Vector2D> pos = surf.globalToLocal(GP, calibInput.trackDirection());
224
225 // check this might still fail....
226 if (!pos) {
227 ATH_MSG_WARNING("Unexpected globalToLocal failure, cannot create MDT ROT ");
228 return nullptr;
229 }
230
231 // calculate sign
232 double sign = (*pos)[Trk::driftRadius] < 0 ? -1.0 : 1.0;
233 calibOutput.locPars[Trk::driftRadius] *= sign;
234 rot = std::make_unique<MdtDriftCircleOnTrack>(&mdtPrd,
235 std::move(calibOutput.locPars),
236 std::move(calibOutput.locErr),
237 calibOutput.driftTime,
239 calibInput.trackDirection(),
240 positionAlongWire,
241 myStrategy);
242
243 } else {
244 // If the track direction is missing, the B-field correction was not
245 // applied
246 if (GD) {
247 // do not have access to direction, so have to use partial
248 // constructor:
249 rot = std::make_unique<MdtDriftCircleOnTrack>(&mdtPrd,
250 std::move(calibOutput.locPars),
251 std::move(calibOutput.locErr),
252 calibOutput.driftTime,
253 dcstatus,
254 positionAlongWire,
255 myStrategy);
256 } else {
257 MuonDriftCircleErrorStrategy tmpStrategy(myStrategy.getBits());
258 tmpStrategy.setParameter(MuonDriftCircleErrorStrategy::MagFieldCorrection, false);
259 rot = std::make_unique<MdtDriftCircleOnTrack>(&mdtPrd,
260 std::move(calibOutput.locPars),
261 std::move(calibOutput.locErr),
262 calibOutput.driftTime,
263 dcstatus,
264 positionAlongWire,
265 tmpStrategy);
266 }
267 }
268 ATH_MSG_DEBUG("MDT ROT: radius = "
269 << rot->localParameters().get(Trk::driftRadius) << " error = "
270 << Amg::error(rot->localCovariance(), Trk::locR)
271 <<" ,channel "
272 << m_idHelperSvc->toString(iD));
273
274 return rot.release();
275}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
int sign(int a)
void setClosestApproach(const Amg::Vector3D &approach)
Sets the closest approach.
double timeOfFlight() const
Returns the time of flight.
void setTimeOfFlight(const double toF)
Sets the time of flight (Usually globPos.mag() * inverseSpeed of light)
double triggerTime() const
Returns the trigger offset time.
void setTrackDirection(const Amg::Vector3D &trackDir, bool hasPhi)
Sets the direction of the externally determined track.
void setTriggerTime(const double trigTime)
Sets the trigger offset time.
const Amg::Vector3D & closestApproach() const
Returns the point of closest approach to the wire.
const Trk::StraightLineSurface & legacySurface() const
Returns the assocaited ideal surface (Throw exception if no legacy RE is available)
const Amg::Vector3D & trackDirection() const
Returns the track direction (Can be zero)
MuonDriftCircleErrorStrategy m_errorStrategy
< Error strategy for created ROTs
CalibrationOutput getLocalMeasurement(const EventContext &ctx, const MdtPrepData &DC, const MdtCalibInput &calibInput, const MuonDriftCircleErrorStrategy &strategy) const
preform the mdt calibration
double getTriggerTime() const
currently returns 0.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Gaudi::Property< bool > m_applyToF
toggle between loose errors (initial before alignment) and tight after alignment
double timeOfFlight(const Amg::Vector3D &pos, const double beta, const double tTrack, const double tShift) const
Gaudi::Property< bool > m_doMdt
Process MDT ROTs.
@ MagFieldCorrection
Magnetic field correction was applied in calibration.
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const =0
Specified by each surface type: GlobalToLocal method without dynamic memory allocation - boolean chec...
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Eigen::Matrix< double, 2, 1 > Vector2D
DriftCircleStatus
Enumerates the 'status' of the wire on which the tracks passed (based on the TRT_Side enum,...
@ NODRIFTTIME
drift time was not used - drift radius is 0.
@ DECIDED
sign of drift radius has been determined
@ UNDECIDED
sign of drift radius has not been determined
@ driftRadius
trt, straws
Definition ParamDefs.h:53
@ locR
Definition ParamDefs.h:44
@ locZ
local cylindrical
Definition ParamDefs.h:42

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ DeclareInterfaceID()

Muon::IMdtDriftCircleOnTrackCreator::DeclareInterfaceID ( Muon::IMdtDriftCircleOnTrackCreator ,
1 ,
0  )
inherited

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ errorStrategy()

virtual const MuonDriftCircleErrorStrategy & Muon::MdtDriftCircleOnTrackCreator::errorStrategy ( ) const
inlineoverridevirtual

Returns the default error strategy object.

Implements Muon::IMdtDriftCircleOnTrackCreator.

Definition at line 163 of file MdtDriftCircleOnTrackCreator.h.

163 {
164 return m_errorStrategy;
165 };

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getLocalMeasurement()

CalibrationOutput Muon::MdtDriftCircleOnTrackCreator::getLocalMeasurement ( const EventContext & ctx,
const MdtPrepData & DC,
const MdtCalibInput & calibInput,
const MuonDriftCircleErrorStrategy & strategy ) const
private

preform the mdt calibration

copy new values

Use same value

Definition at line 295 of file MdtDriftCircleOnTrackCreator.cxx.

298 {
299
300
301 ATH_MSG_VERBOSE("getLocalMeasurement "<<calibInput<<" with m_doMdt=" << m_doMdt << " and " << myStrategy);
302 const Amg::Vector3D& gpos{calibInput.closestApproach()};
303 const Amg::Vector3D& gdir{calibInput.trackDirection()};
304
305 double sigmaR{1.}, driftTime{0.}, radius{0.}, errRadius{0.};
306 MdtCalibOutput calibOutput{};
307 if (m_doMdt) {
308 // call the calibration service providing the time when the particle
309 // passed the tube
310 calibOutput = m_mdtCalibrationTool->calibrate(ctx, calibInput);
311 ATH_MSG_VERBOSE("getLocalMeasurement() - Calibrated output "<<calibOutput);
312 driftTime = calibOutput.driftTime();
313 radius = calibOutput.driftRadius();
314 errRadius = radius;
315
316 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ErrorAtPredictedPosition)) {
317 const Trk::Surface& surf{calibInput.legacySurface()};
318 std::optional<Amg::Vector2D> myLocalPosition = surf.globalToLocal(gpos, gdir);
319 if (myLocalPosition) {
320 errRadius = (*myLocalPosition)[Trk::driftRadius];
321 } else {
322 ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" ErrorAtPredictedPosition failed because local position "<<
323 "transformation didn't succeed. Using measured radius instead.");
324 errRadius = radius;
325 }
326 }
327 } else {
328 // use PRD values
329 radius = DC.localPosition().x();
330 errRadius = radius;
331 // check consistency of error matrix
332 if (DC.localCovariance().cols() > 1) {
333 ATH_MSG_WARNING("Error matrix of DC doesn't have dimension 1 "<< DC.localCovariance());
334 ATH_MSG_WARNING("Reducing size to 1 dim");
335 }
336 }
337
338 // Handle the errors here. Begin by getting the first part of the
339 // resolution term
340 if (!m_doMdt) {
341 sigmaR = Amg::error(DC.localCovariance(), Trk::driftRadius);
342 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ParameterisedErrors)) {
343 sigmaR = parametrisedSigma(errRadius);
344 } else {
345 sigmaR = calibOutput.driftRadiusUncert();
346 }
347 ATH_MSG_DEBUG("Tube : " << m_idHelperSvc->toString(calibInput.identify())
348 << " SigmaR = " << sigmaR);
349 double sigmaR2 = 0.0;
350 // Handle the errors scaling / addition of fixed terms
351 if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Moore) {
352 sigmaR2 = mooreErrorStrategy(myStrategy, sigmaR * sigmaR, calibInput.identify());
353 ATH_MSG_DEBUG("After scaling etc:\t Moore sigmaR2 = " << sigmaR2);
354 } else if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Muon) {
355 sigmaR2 = muonErrorStrategy(myStrategy, sigmaR * sigmaR, calibInput.identify());
356 ATH_MSG_DEBUG("After scaling etc:\t Muon ErrorStrategy sigmaR2 = " << sigmaR2);
357 }
359 // update or copy drift radius and error
360
361 // new radius
362 Trk::DefinedParameter radiusPar(radius, Trk::driftRadius);
363
364 // create new error matrix
365 Amg::MatrixX newLocalCov(1, 1);
366 newLocalCov(0, 0) = sigmaR2;
367
368 // return new values
369 bool ok = true;
370 return {Trk::LocalParameters(radiusPar), newLocalCov, driftTime,
371 ok};
372}
const Identifier & identify() const
Returns the Identifier of the hit.
double driftRadiusUncert() const
Returns the uncertainty on the drift radius.
double driftRadius() const
Returns the drift radius of the calibrated object.
double driftTime() const
Returns the drift time inside the tube.
double muonErrorStrategy(const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategy(const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
ToolHandle< IMdtCalibrationTool > m_mdtCalibrationTool
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
@ driftTime
Definition HitInfo.h:43
std::pair< double, ParamDefs > DefinedParameter
Typedef to of a std::pair<double, ParamDefs> to identify a passed-through double as a specific type o...

◆ getTriggerTime()

double Muon::MdtDriftCircleOnTrackCreator::getTriggerTime ( ) const
inlineprivate

currently returns 0.

Definition at line 196 of file MdtDriftCircleOnTrackCreator.h.

196{ return 0.; }

◆ initialize()

StatusCode Muon::MdtDriftCircleOnTrackCreator::initialize ( )
finaloverridevirtual

Definition at line 35 of file MdtDriftCircleOnTrackCreator.cxx.

35 {
37 ATH_CHECK(m_idHelperSvc.retrieve());
38 m_BME_idx = m_idHelperSvc->mdtIdHelper().stationNameIndex("BME");
39
40
49 using ToolSettings = IMdtCalibrationTool::ToolSettings;
50 using Property = ToolSettings::Property;
51 ToolSettings calibSettings = m_mdtCalibrationTool->getSettings();
53 calibSettings.isActive(Property::TofCorrection));
55 calibSettings.isActive(Property::PropCorrection));
57 calibSettings.isActive(Property::TempCorrection));
59 calibSettings.isActive(Property::MagFieldCorrection));
61 calibSettings.isActive(Property::SlewCorrection));
63 calibSettings.isActive(Property::BackgroundCorrection));
64 m_errorStrategy.setCalibWindow(calibSettings.window);
65
66 if ("Moore" == m_defaultStrategy) {
68 } else if ("Muon" == m_defaultStrategy) {
70 } else {
71 // By default use one of the real strategies - don't default to unknown!
73 ATH_MSG_FATAL("Unknown error strategy "<<m_errorStrategy);
74 return StatusCode::FAILURE;
75 }
76 if (msgLevel(MSG::INFO)) {
77 std::stringstream ss;
78 ss << "Constructed default MuonDriftCircleErrorStrategy:";
80 ss << " Broad";
82 ss << " Scaled";
84 ss << " Fixed";
86 ss << " Parm";
88 ss << " Station";
90 ss << " ErrAtPos";
92 ss << " T0";
94 ss << " TOF";
96 ss << " Prop";
98 ss << " Temp";
100 ss << " Mag";
102 ss << " Slew";
104 ss << " Back";
106 ss << " Seg";
107 ss << ". ";
108 if (!m_isMC && m_looseErrors)
109 ss << "Using Data Loose error tuning";
110 if (!m_isMC && !m_looseErrors)
111 ss << "Using Data Tight error tuning";
112
113 msg(MSG::INFO) << ss.str() << endmsg;
114 }
115 if (m_isMC)
116 ATH_MSG_DEBUG("Using MC error tuning");
117 ATH_MSG_VERBOSE("A correction is made if set to true: do_MDT = " << m_doMdt);
118
121 ATH_MSG_ERROR("Detected bad default configuration, using Cosmic TOF without "
122 <<"time of flight corrections does not work");
123 return StatusCode::FAILURE;
124 }
125 }
126 ATH_MSG_DEBUG("Timing mode set to " << m_timeCorrectionType);
128 ATH_MSG_ERROR("Time Correction Type too large! Aborting.");
129 return StatusCode::FAILURE;
130 }
131
132 if (!m_wasConfigured) {
133 ATH_MSG_ERROR("This tool is too complicated to rely on defaults. Potential configuration issue.");
134 return StatusCode::FAILURE;
135 }
136 return StatusCode::SUCCESS;
137}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
static Double_t ss
MdtCalibrationTool::ToolSettings ToolSettings
MsgStream & msg() const
Gaudi::Property< bool > m_doFixedError
Use parameterised errors.
Gaudi::Property< bool > m_scaleMdtCov
Fixed error (not tube radius)
Gaudi::Property< bool > m_t0Refit
Use error strategy for segments by default.
Gaudi::Property< std::string > m_defaultStrategy
if set to true, the ROT creator create 'tube' hits with a local position of 0 and an error of tube ra...
Gaudi::Property< bool > m_doSegments
Deweight individual chambers.
Gaudi::Property< bool > m_errorAtPredictedPosition
Add a term to the error to account for very poorly aligned stations.
Gaudi::Property< bool > m_createTubeHits
Scale ROTs depending on local alignment (i.e.
Gaudi::Property< bool > m_stationError
Add a special error to account for the T0 refit.
Gaudi::Property< bool > m_useErrorParametrisation
Use the predicted track position to correct the Error.
Gaudi::Property< bool > m_isMC
toggle whether the time of flight is included in the t0 shifts
@ StationError
A term is added to account for misaligned.
@ T0Refit
A special error was applied to account for the T0 refit (user defined via jobProperties)
@ FixedError
A fixed error is given to this hit (user defined via jobProperties)
@ SlewCorrection
Slewing correction was applied in calibration.
@ TofCorrection
Time of flight correction was applied in calibration.
@ BackgroundCorrection
Background correction was applied in calibration.
@ PropCorrection
Propagation correction was applied in calibration.
@ TempCorrection
Temperature correction was applied in calibration.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & Trk::IRIO_OnTrackCreator::interfaceID ( )
inlinestaticinherited

The AlgTool InterfaceID.

Definition at line 42 of file IRIO_OnTrackCreator.h.

◆ mooreErrorStrategy()

double Muon::MdtDriftCircleOnTrackCreator::mooreErrorStrategy ( const MuonDriftCircleErrorStrategy & myStrategy,
double sigmaR,
const Identifier & id ) const
private

Definition at line 481 of file MdtDriftCircleOnTrackCreator.cxx.

483 {
484 if (m_isMC)
485 return mooreErrorStrategyMC(myStrategy, sigmaR2, id);
486
487 if (m_looseErrors)
488 return mooreErrorStrategyLoose(myStrategy, sigmaR2, id);
489 else
490 return mooreErrorStrategyTight(myStrategy, sigmaR2, id);
491
492}
double mooreErrorStrategyMC(const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategyLoose(const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const
double mooreErrorStrategyTight(const MuonDriftCircleErrorStrategy &myStrategy, double sigmaR, const Identifier &id) const

◆ mooreErrorStrategyLoose()

double Muon::MdtDriftCircleOnTrackCreator::mooreErrorStrategyLoose ( const MuonDriftCircleErrorStrategy & myStrategy,
double sigmaR,
const Identifier & id ) const
private

Need to check whether this Identifier is still existent

Definition at line 576 of file MdtDriftCircleOnTrackCreator.cxx.

578 {
579 ATH_MSG_DEBUG("mooreErrorStrategy sigmaR2=" << sigmaR2<<" "<<m_idHelperSvc->toString(id));
580
581 // Moore error strategy. Hard coding numbers for the time being - hope to
582 // make them configurable some day
583 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::Segment)) {
584 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError) &&
585 myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
586 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::T0Refit)) {
587 ATH_MSG_VERBOSE(" segment error, t0fit ");
588 return sigmaR2 + 0.005; // Collisions with T0 refit (input)
589 } else if (myStrategy.creationParameter(
591 ATH_MSG_VERBOSE(" segment error, broad ");
592 return 4 * sigmaR2 + 0.16; // Output segments - broad errors
593 } else {
594 ATH_MSG_VERBOSE(" segment error, precise ");
595 return sigmaR2 + 0.005; // Input segments , no T0 refit
596 }
597 }
598 // Don't know how to handle other cases - error?
599 } else { // Track
600 using namespace MuonStationIndex;
601 StIndex stIdx = m_idHelperSvc->stationIndex(id);
602 if (myStrategy.creationParameter(
604 if (stIdx == StIndex::BE) {
605 ATH_MSG_VERBOSE(" track error BEE ");
606 return 1.44 * sigmaR2 + 4; // 1.2* + 2 mm
607 } else if (stIdx == StIndex::EE) {
608 ATH_MSG_VERBOSE(" track error EE ");
609 return 1.44 * sigmaR2 + 0.04; // 1.2* + 0.2 mm
610 } else if (m_idHelperSvc->chamberIndex(id) == ChIndex::BIS &&
611 std::abs(m_idHelperSvc->stationEta(id)) >= 7) {
612 ATH_MSG_VERBOSE(" track error BIS78 ");
613 if (std::abs(m_idHelperSvc->stationEta(id)) == 7)
614 return 1.44 * sigmaR2 + 1.; // 1.2* + 1. mm
615 return 4 * sigmaR2 + 25; // 2* + 5. mm
616 } else if (m_idHelperSvc->mdtIdHelper().stationName(id) == m_BME_idx &&
617 m_idHelperSvc->stationPhi(id) == 7) {
618 ATH_MSG_VERBOSE(" track error BME ");
619 return 1.44 * sigmaR2 + 0.25; // 1.2* + 0.5 mm
620 }
622 else if (m_idHelperSvc->chamberIndex(id) == ChIndex::BOL && std::abs(m_idHelperSvc->stationEta(id)) == 7 &&
623 m_idHelperSvc->stationPhi(id) == 7) {
624 ATH_MSG_VERBOSE(" track error BOE ");
625 return 1.44 * sigmaR2 + 0.25; // 1.2* + 0.5 mm
626 }
627 ATH_MSG_VERBOSE(" track station error ");
628 return 1.44 * sigmaR2 + 0.04; // 1.2* + 0.2 mm
629
630 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError)) {
631
632 if (myStrategy.creationParameter(
634 ATH_MSG_VERBOSE(" track error Fixed/Broad ");
635 return 4 * sigmaR2 + 4.; // 2* + 2 mm -> barrel/endcap overlaps
636 } else {
637 ATH_MSG_VERBOSE(" track error Fixed ");
638 return 4 * sigmaR2 + 4.; // 2* + 2mm S/L overlaps
639 }
640
641 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
642
643 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
644 ATH_MSG_VERBOSE(" track error Scaled/Broad ");
645 return 2.25 * sigmaR2 + 0.09;
646 } else {
647 // use slightly smaller errors for the barrel
648 double fixedTerm = (stIdx == StIndex::BI || stIdx == StIndex::BM || stIdx == StIndex::BO)
649 ? 0.015 : 0.015;
651 m_idHelperSvc->chamberIndex(id) == ChIndex::BIL && m_idHelperSvc->stationEta(id) == 1 &&
652 m_idHelperSvc->sector(id) == 13 && m_idHelperSvc->mdtIdHelper().multilayer(id) == 1) {
653 fixedTerm = 1;
654 ATH_MSG_VERBOSE(" track error Scaled: BIL1A13, first multi layer ");
655 } else {
656 ATH_MSG_VERBOSE(" track error Scaled ");
657 }
658
659 return 1.44 * sigmaR2 + fixedTerm;
660 }
661 }
662 } // End of segment or track
663 return sigmaR2;
664}
Gaudi::Property< bool > m_doIndividualChamberReweights
toggle between MC and data alignment errors (to be removed in rel.
StIndex
enum to classify the different station layers in the muon spectrometer

◆ mooreErrorStrategyMC()

double Muon::MdtDriftCircleOnTrackCreator::mooreErrorStrategyMC ( const MuonDriftCircleErrorStrategy & myStrategy,
double sigmaR,
const Identifier & id ) const
private

Definition at line 494 of file MdtDriftCircleOnTrackCreator.cxx.

496 {
497 ATH_MSG_DEBUG("mooreErrorStrategy sigmaR2=" << sigmaR2<<" "<<m_idHelperSvc->toString(id));
498
499 // Moore error strategy. Hard coding numbers for the time being - hope to
500 // make them configurable some day
501 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::Segment)) {
502 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError) &&
503 myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
504 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::T0Refit)) {
505 ATH_MSG_VERBOSE(" segment error, t0fit ");
506 return sigmaR2 + 0.005; // Collisions with T0 refit (input)
507 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
508 ATH_MSG_VERBOSE(" segment error, broad ");
509 return 4 * sigmaR2 + 0.16; // Output segments - broad errors
510 } else {
511 ATH_MSG_VERBOSE(" segment error, precise ");
512 return sigmaR2 + 0.005; // Input segments , no T0 refit
513 }
514 }
515 // Don't know how to handle other cases - error?
516 } else { // Track
517
518 using namespace MuonStationIndex;
519 const StIndex stIdx = m_idHelperSvc->stationIndex(id);
520 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::StationError)) {
521 if (stIdx == StIndex::BE) {
522 ATH_MSG_VERBOSE(" track error BEE ");
523 return 1.44 * sigmaR2 + 1.44; // 1.2* + 1.2 mm
524 } else if (stIdx == StIndex::EE) {
525 ATH_MSG_VERBOSE(" track error EE ");
526 if (!m_isMC && m_idHelperSvc->stationEta(id) < 0)
527 return 1.44 * sigmaR2 + 0.16; // 1.2* + 0.4 mm
528 return 1.44 * sigmaR2 + 1.; // 1.2* + 1. mm
529 } else if (m_idHelperSvc->chamberIndex(id) == ChIndex::BIS &&
530 std::abs(m_idHelperSvc->stationEta(id)) >= 7) {
531 ATH_MSG_VERBOSE(" track error BIS78 ");
532 if (std::abs(m_idHelperSvc->stationEta(id)) == 7)
533 return 1.44 * sigmaR2 + 1.; // 1.2* + 1. mm
534 else
535 return 4 * sigmaR2 + 25; // 2* + 5. mm
536 }
537 ATH_MSG_VERBOSE(" track station error ");
538 return 1.44 * sigmaR2 + 1.; // 1.2* + 1. mm
539
540 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError)) {
541
542 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
543 ATH_MSG_VERBOSE(" track error Fixed/Broad ");
544 return 4 * sigmaR2 + 49.; // 2* + 7 mm -> barrel/endcap overlaps
545 } else {
546 ATH_MSG_VERBOSE(" track error Fixed ");
547 return 4 * sigmaR2 + 4.; // 2* + 2mm S/L overlaps
548 }
549
550 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
551
552 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
553 ATH_MSG_VERBOSE(" track error Scaled/Broad ");
554 return 2.25 * sigmaR2 + 0.09;
555 } else {
556 // use slightly smaller errors for the barrel
557 double fixedTerm = (stIdx == StIndex::BI || stIdx == StIndex::BM || stIdx == StIndex::BO)
558 ? 0.014 : 0.04;
560 m_idHelperSvc->chamberIndex(id) == ChIndex::BIL &&
561 m_idHelperSvc->stationEta(id) == 1 &&
562 m_idHelperSvc->sector(id) == 13 &&
563 m_idHelperSvc->mdtIdHelper().multilayer(id) == 1) {
564 fixedTerm = 1;
565 ATH_MSG_VERBOSE(" track error Scaled: BIL1A13, first multi layer ");
566 } else {
567 ATH_MSG_VERBOSE(" track error Scaled ");
568 }
569 return 1.44 * sigmaR2 + fixedTerm;
570 }
571 }
572 } // End of segment or track
573 return sigmaR2;
574}

◆ mooreErrorStrategyTight()

double Muon::MdtDriftCircleOnTrackCreator::mooreErrorStrategyTight ( const MuonDriftCircleErrorStrategy & myStrategy,
double sigmaR,
const Identifier & id ) const
private

Need to check whether this Identifier is still valid?

Definition at line 666 of file MdtDriftCircleOnTrackCreator.cxx.

668 {
669 ATH_MSG_DEBUG("mooreErrorStrategy sigmaR2=" << sigmaR2);
670
671 // Moore error strategy. Hard coding numbers for the time being - hope to
672 // make them configurable some day
673 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::Segment)) {
674 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError) &&
675 myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
676 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::T0Refit)) {
677 ATH_MSG_VERBOSE(" segment error, t0fit ");
678 return sigmaR2 + 0.005; // Collisions with T0 refit (input)
679 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
680 ATH_MSG_VERBOSE(" segment error, broad ");
681 return 4 * sigmaR2 + 0.16; // Output segments - broad errors
682 } else {
683 ATH_MSG_VERBOSE(" segment error, precise ");
684 return sigmaR2 + 0.005; // Input segments , no T0 refit
685 }
686 }
687 // Don't know how to handle other cases - error?
688 } else { // Track
689 using namespace MuonStationIndex;
690 StIndex stIdx = m_idHelperSvc->stationIndex(id);
691 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::StationError)) {
692 if (stIdx == StIndex::BE) {
693 ATH_MSG_VERBOSE(" track error BEE ");
694 return 1.44 * sigmaR2 + 0.04; // 1.2* + 0.2 mm
695 } else if (stIdx == StIndex::EE) {
696 ATH_MSG_VERBOSE(" track error EE ");
697 if (m_idHelperSvc->isSmallChamber(id))
698 return 1.21 * sigmaR2 + 0.01; // 1.1* + 0.1 mm
699 else
700 return 1.21 * sigmaR2 + 0.01; // 1.1* + 0.1 mm
701 } else if (m_idHelperSvc->chamberIndex(id) == ChIndex::BIS &&
702 std::abs(m_idHelperSvc->stationEta(id)) >= 7) {
703 ATH_MSG_VERBOSE(" track error BIS78 ");
704 if (std::abs(m_idHelperSvc->stationEta(id)) == 7)
705 return 1.44 * sigmaR2 + 1.; // 1.2* + 1. mm
706
707 return 4 * sigmaR2 + 1.; // 2* + 1. mm
708 } else if (stIdx == StIndex::BM &&
709 m_idHelperSvc->stationPhi(id) == 7 &&
710 (m_idHelperSvc->mdtIdHelper()).stationName(id) == m_BME_idx) {
711 ATH_MSG_VERBOSE(" track error BME ");
712 return 1.21 * sigmaR2 + 0.25; // 1.1* + 0.5 mm
713 }
715 else if (m_idHelperSvc->chamberIndex(id) == ChIndex::BOL && std::abs(m_idHelperSvc->stationEta(id)) == 7 &&
716 m_idHelperSvc->stationPhi(id) == 7) {
717 ATH_MSG_VERBOSE(" track error BOE ");
718 return 1.21 * sigmaR2 + 0.25; // 1.1* + 0.5 mm
719 } else if (m_idHelperSvc->chamberIndex(id) == ChIndex::EEL && m_idHelperSvc->stationEta(id) < 0 &&
720 m_idHelperSvc->stationPhi(id) == 3) {
721 ATH_MSG_VERBOSE(" track error EEL1C05 ");
722 return 1.21 * sigmaR2 + 25.; // 1.1* + 5 mm
723 }
724 ATH_MSG_VERBOSE(" track station error ");
725 return 1.21 * sigmaR2 + 0.04; // 1.1* + 0.2 mm
726
727 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError)) {
728
729 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
730 ATH_MSG_VERBOSE(" track error Fixed/Broad ");
731 return 4 * sigmaR2 + 4.; // 2* + 2 mm -> barrel/endcap overlaps
732 } else {
733 ATH_MSG_VERBOSE(" track error Fixed ");
734 return 4 * sigmaR2 + 4.; // 2* + 2mm S/L overlaps
735 }
736
737 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
738
739 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
740 ATH_MSG_VERBOSE(" track error Scaled/Broad ");
741 return 2.25 * sigmaR2 + 0.09;
742 } else {
743
744 // use slightly smaller errors for the barrel
745 //
746 double fixedTerm = 0.01;
748 if (m_idHelperSvc->chamberIndex(id) == ChIndex::BIL && m_idHelperSvc->stationEta(id) == 1 &&
749 m_idHelperSvc->sector(id) == 13 && m_idHelperSvc->mdtIdHelper().multilayer(id) == 1) {
750 fixedTerm = 1;
751 ATH_MSG_VERBOSE(" track error Scaled: BIL1A13, first multi layer ");
752 }
753 } else {
754 ATH_MSG_VERBOSE(" track error Scaled ");
755 }
756
757 return 1.21 * sigmaR2 + fixedTerm;
758 }
759 }
760 } // End of segment or track
761 return sigmaR2;
762}

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ muonErrorStrategy()

double Muon::MdtDriftCircleOnTrackCreator::muonErrorStrategy ( const MuonDriftCircleErrorStrategy & myStrategy,
double sigmaR,
const Identifier & id ) const
private

Definition at line 764 of file MdtDriftCircleOnTrackCreator.cxx.

766 {
767
768 //
769 // the new muonErrorStrategy is identical for Data and MC
770 // it assumes that for tracks the alignment uncertainties are added later
771 // this is done by the AignmentErrorTool where AlignmentEffectsOnTrack are
772 // used. (for segment errors the mooreStrategy is coded)
773 //
774 // it is inspired by the mooreErrorStrategyTight but does not need a constant term
775 //
776
777 ATH_MSG_DEBUG("muonErrorStrategy sigmaR2=" << sigmaR2);
778
779 // Muon error strategy. Hard coding numbers for the time being - hope to
780 // make them configurable some day
781 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::Segment)) {
782 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError) &&
783 myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
784 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::T0Refit)) {
785 ATH_MSG_VERBOSE(" segment error, t0fit ");
786 return sigmaR2 + 0.005; // Collisions with T0 refit (input)
787 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
788 ATH_MSG_VERBOSE(" segment error, broad ");
789 return 4 * sigmaR2 + 0.16; // Output segments - broad errors
790 } else {
791 ATH_MSG_VERBOSE(" segment error, precise ");
792 return sigmaR2 + 0.005; // Input segments , no T0 refit
793 }
794 }
795 } else { // Track
796 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::StationError)) {
797 ATH_MSG_VERBOSE(" track station error ");
798 return 1.21 * sigmaR2; // 1.1* mm
799 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError)) {
800 ATH_MSG_VERBOSE(" track error Fixed ");
801 return 4 * sigmaR2; // 2*
802 } else if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError)) {
803 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError)) {
804 ATH_MSG_VERBOSE(" track error Scaled/Broad ");
805 return 2.25 * sigmaR2;
806 } else {
807 ATH_MSG_VERBOSE(" Track scaled error ");
808 return 1.21 * sigmaR2;
809 }
810 }
811 } // End of segment or track
812 return sigmaR2;
813}

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ parametrisedSigma()

double Muon::MdtDriftCircleOnTrackCreator::parametrisedSigma ( double r)
staticprivate

These are presumably fitted from data but no clue where and how

Definition at line 476 of file MdtDriftCircleOnTrackCreator.cxx.

476 {
478 return 0.23 * std::exp(-std::abs(r) / 6.06) + 0.0362;
479}
int r
Definition globals.cxx:22

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ timeOfFlight()

double Muon::MdtDriftCircleOnTrackCreator::timeOfFlight ( const Amg::Vector3D & pos,
const double beta,
const double tTrack,
const double tShift ) const
private

Definition at line 468 of file MdtDriftCircleOnTrackCreator.cxx.

471 {
472 return m_applyToF * (pos.mag() * s_inverseSpeedOfLight / beta) +
473 tTrack + tShift;
474}

◆ updateError()

MdtRotPtr Muon::MdtDriftCircleOnTrackCreator::updateError ( const MdtDriftCircleOnTrack & DCT,
const Trk::TrackParameters * pars = nullptr,
const MuonDriftCircleErrorStrategy * strategy = nullptr ) const
overridevirtual

Update error of a ROT without changing the drift radius.

Parameters
DCTreference to the Muon::MdtDriftCircleOnTrack of which the sign should be updated.
parstrack prediction at DCT used when using the track prediction to update the error
strategyoptional drift circle error strategy to override the default
Returns
New ROT with updated error. (the user must delete this object when it is no longer needed).
Parameters
parspars

Implements Muon::IMdtDriftCircleOnTrackCreator.

Definition at line 396 of file MdtDriftCircleOnTrackCreator.cxx.

398 {
399
400 const MuonDriftCircleErrorStrategy& myStrategy = (!strategy) ? m_errorStrategy : *strategy;
401
402 // calculate error
403 double sigmaR(1.);
404 double t = DCT.driftTime();
405
406 const MuonGM::MdtReadoutElement* detEl = DCT.detectorElement();
407 if (!detEl) {
408 ATH_MSG_WARNING("MdtDriftCircleOnTrack without MdtReadoutElement "
409 << m_idHelperSvc->toString(DCT.identify()));
410 return nullptr;
411 }
412
413 double radius = DCT.driftRadius();
414
415 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::BroadError) &&
416 !myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ScaledError) &&
417 !myStrategy.creationParameter(MuonDriftCircleErrorStrategy::FixedError)) {
418 sigmaR = detEl->innerTubeRadius() / std::sqrt(3.0); // Tube hit
419 } else {
420 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ErrorAtPredictedPosition))
421 ATH_MSG_WARNING("updateError: ErrorAtPredictedPosition is not yet supported!");
422 // get error
423 if (myStrategy.creationParameter(MuonDriftCircleErrorStrategy::ParameterisedErrors)) {
424 if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Moore) {
425 sigmaR = parametrisedSigma(radius);
426 } else if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Muon) {
427 sigmaR = parametrisedSigma(radius);
428 ATH_MSG_DEBUG("Muon drift errors:" << sigmaR
429 << " for radius=" << radius);
430 }
431 } else {
432 const EventContext& ctx{Gaudi::Hive::currentContext()};
433 sigmaR = m_mdtCalibrationTool->getResolutionFromRt(ctx,
434 DCT.identify(),
435 DCT.driftTime());
436 if (sigmaR < 0.0001 || sigmaR * sigmaR < 0.0001) {
437 ATH_MSG_WARNING("Bad obtained from calibration service: error "
438 << m_idHelperSvc->toString(DCT.identify())
439 << " reso " << sigmaR << " sigma2 "
440 << sigmaR * sigmaR << " drift time " << t
441 << " original " << DCT.driftTime());
442 return nullptr;
443 }
444 }
445
446 } // end of tube hit check
447
448 double sigmaR2 = 0.0;
449 // Handle the errors scaling / addition of fixed terms
450 if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Moore) {
451 sigmaR2 = mooreErrorStrategy(myStrategy, sigmaR * sigmaR, DCT.identify());
452 } else if (myStrategy.strategy() == MuonDriftCircleErrorStrategy::Muon) {
453 sigmaR2 = muonErrorStrategy(myStrategy, sigmaR * sigmaR, DCT.identify());
454 ATH_MSG_DEBUG("After scaling etc:\t Muon ErrorStrategy sigmaR2 = " << sigmaR2);
455 }
456 std::unique_ptr<MdtDriftCircleOnTrack> rot{DCT.clone()};
457 rot->m_localCovariance(0, 0) = sigmaR2;
458 rot->setErrorStrategy(myStrategy);
459
460 ATH_MSG_VERBOSE("updated error for "
461 << m_idHelperSvc->toString(DCT.identify()) << " new error "
462 << Amg::error(rot->localCovariance(), Trk::locR)
463 << " old error "
465 return rot.release();
466}
double driftRadius() const
Returns the value of the drift radius.
double driftTime() const
Returns the value of the drift time used to obtain the drift radius.
virtual MdtDriftCircleOnTrack * clone() const override final
Pseudo-constructor, needed to avoid excessive RTTI.
virtual const MuonGM::MdtReadoutElement * detectorElement() const override final
Returns the detector element, assoicated with the PRD of this class.
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Identifier identify() const
return the identifier -extends MeasurementBase

◆ updateSign()

void Muon::MdtDriftCircleOnTrackCreator::updateSign ( MdtDriftCircleOnTrack & rot,
const Trk::DriftCircleSide si ) const
finaloverridevirtual

Update of the sign of the drift radius.

The method creates a new MdtDriftCircleOnTrack, the old input MdtDriftCircleOnTrack is not deleted. The user should take care of the memory managment of both MdtDriftCircleOnTracks.

Parameters
rotreference to the Muon::MdtDriftCircleOnTrack of which the sign should be updated.
siTrk::DriftCircleSide indicating whether the muon passed on the left or right side of the wire.

Implements Muon::IMdtDriftCircleOnTrackCreator.

Definition at line 277 of file MdtDriftCircleOnTrackCreator.cxx.

278 {
279 // ************************
280 // Apply additional corrections to local position
281 Trk::LocalParameters lpos(caliDriftCircle.localParameters());
282
283 // set sign LocalPosition
284 if (si == Trk::LEFT) {
285 lpos[Trk::driftRadius] = -std::abs(lpos[Trk::driftRadius]);
286 } else {
287 lpos[Trk::driftRadius] = std::abs(lpos[Trk::driftRadius]);
288 }
289
290 caliDriftCircle.setLocalParameters(lpos);
291 caliDriftCircle.m_status = Trk::DECIDED;
292 ATH_MSG_VERBOSE("MDT DriftCircleOnTrack made with radius = " << lpos);
293}
@ LEFT
the drift radius is negative (see Trk::AtaStraightLine)

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_applyToF

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_applyToF {this, "ApplyToF", true}
private

toggle between loose errors (initial before alignment) and tight after alignment

Definition at line 269 of file MdtDriftCircleOnTrackCreator.h.

269{this, "ApplyToF", true};

◆ m_BME_idx

int Muon::MdtDriftCircleOnTrackCreator::m_BME_idx {-1}
private

Definition at line 279 of file MdtDriftCircleOnTrackCreator.h.

279{-1};

◆ m_createTubeHits

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_createTubeHits {this, "CreateTubeHit", false}
private

Scale ROTs depending on local alignment (i.e.

location in detector)

Definition at line 246 of file MdtDriftCircleOnTrackCreator.h.

246{this, "CreateTubeHit", false};

◆ m_defaultStrategy

Gaudi::Property<std::string> Muon::MdtDriftCircleOnTrackCreator::m_defaultStrategy
private
Initial value:
{this, "DefaultErrorStrategy", "Muon",
"Default error strategy to be used in calculating errors"}

if set to true, the ROT creator create 'tube' hits with a local position of 0 and an error of tube radius/sqrt(12)

Definition at line 241 of file MdtDriftCircleOnTrackCreator.h.

241 {this, "DefaultErrorStrategy", "Muon",
242 "Default error strategy to be used in calculating errors"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doFixedError

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_doFixedError {this, "DoFixedError", true}
private

Use parameterised errors.

Definition at line 250 of file MdtDriftCircleOnTrackCreator.h.

250{this, "DoFixedError", true};

◆ m_doIndividualChamberReweights

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_doIndividualChamberReweights {this, "DeweightIndividualChambers", true}
private

toggle between MC and data alignment errors (to be removed in rel.

21!)

Definition at line 265 of file MdtDriftCircleOnTrackCreator.h.

265{this, "DeweightIndividualChambers", true};

◆ m_doMdt

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_doMdt {this, "doMDT", true}
private

Process MDT ROTs.

Defined in TimingMode enum.

Definition at line 226 of file MdtDriftCircleOnTrackCreator.h.

226{this, "doMDT", true};

◆ m_doSegments

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_doSegments {this, "DoSegmentErrors", true}
private

Deweight individual chambers.

Definition at line 263 of file MdtDriftCircleOnTrackCreator.h.

263{this, "DoSegmentErrors", true};

◆ m_errorAtPredictedPosition

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_errorAtPredictedPosition {this, "UseErrorAtPredictedPosition", false}
private

Add a term to the error to account for very poorly aligned stations.

Definition at line 257 of file MdtDriftCircleOnTrackCreator.h.

257{this, "UseErrorAtPredictedPosition", false};

◆ m_errorStrategy

MuonDriftCircleErrorStrategy Muon::MdtDriftCircleOnTrackCreator::m_errorStrategy {MuonDriftCircleErrorStrategyInput{}}
private

< Error strategy for created ROTs

Default error strategy for the error strategy object

Definition at line 238 of file MdtDriftCircleOnTrackCreator.h.

std::bitset< 23 > MuonDriftCircleErrorStrategyInput

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_fixedError

Gaudi::Property<double> Muon::MdtDriftCircleOnTrackCreator::m_fixedError {this, "FixedError", 1.}
private

< Error used when m_doFixed error =true or m_scaleErrorManually = true

Definition at line 231 of file MdtDriftCircleOnTrackCreator.h.

231{this, "FixedError", 1.};

◆ m_globalToLocalTolerance

Gaudi::Property<double> Muon::MdtDriftCircleOnTrackCreator::m_globalToLocalTolerance
private
Initial value:
{this, "GlobalToLocalTolerance", 1000.,
"Tolerance used for the Surface::globalToLocal"}

Definition at line 233 of file MdtDriftCircleOnTrackCreator.h.

233 {this, "GlobalToLocalTolerance", 1000.,
234 "Tolerance used for the Surface::globalToLocal"};

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> Muon::MdtDriftCircleOnTrackCreator::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Definition at line 221 of file MdtDriftCircleOnTrackCreator.h.

221{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_isMC

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_isMC {this, "IsMC", false}
private

toggle whether the time of flight is included in the t0 shifts

Definition at line 267 of file MdtDriftCircleOnTrackCreator.h.

267{this, "IsMC", false};

◆ m_looseErrors

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_looseErrors
private
Initial value:
{this, "UseLooseErrors", false,
"Use error strategy for MC"}

Definition at line 272 of file MdtDriftCircleOnTrackCreator.h.

272 {this, "UseLooseErrors", false,
273 "Use error strategy for MC"};

◆ m_mdtCalibrationTool

ToolHandle<IMdtCalibrationTool> Muon::MdtDriftCircleOnTrackCreator::m_mdtCalibrationTool {this, "CalibrationTool", ""}
private

Definition at line 223 of file MdtDriftCircleOnTrackCreator.h.

223{this, "CalibrationTool", ""};

◆ m_scaleMdtCov

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_scaleMdtCov {this, "DoErrorScaling", true}
private

Fixed error (not tube radius)

Definition at line 248 of file MdtDriftCircleOnTrackCreator.h.

248{this, "DoErrorScaling", true};

◆ m_stationError

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_stationError {this, "DoStationError", false}
private

Add a special error to account for the T0 refit.

Definition at line 259 of file MdtDriftCircleOnTrackCreator.h.

259{this, "DoStationError", false};

◆ m_t0Refit

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_t0Refit {this, "T0RefitError", false}
private

Use error strategy for segments by default.

Definition at line 261 of file MdtDriftCircleOnTrackCreator.h.

261{this, "T0RefitError", false};

◆ m_timeCorrectionType

Gaudi::Property<int> Muon::MdtDriftCircleOnTrackCreator::m_timeCorrectionType {this, "TimingMode", 0}
private

Definition at line 228 of file MdtDriftCircleOnTrackCreator.h.

228{this, "TimingMode", 0};

◆ m_useErrorParametrisation

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_useErrorParametrisation {this, "UseParametrisedError", false}
private

Use the predicted track position to correct the Error.

See Muon::MdtDriftCircleOnTrack::ErrorAtPredictedPosition The error will be adjusted to be that corresponding to the predicted position. This is useful to fix problems with tracks very close to the wire.

Definition at line 252 of file MdtDriftCircleOnTrackCreator.h.

252{this, "UseParametrisedError", false};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_wasConfigured

Gaudi::Property<bool> Muon::MdtDriftCircleOnTrackCreator::m_wasConfigured
private
Initial value:
{this, "WasConfigured", false,
"This tool is too complicated to rely on defaults. Will fail if not configured."}

Definition at line 274 of file MdtDriftCircleOnTrackCreator.h.

274 {this, "WasConfigured", false,
275 "This tool is too complicated to rely on defaults. Will fail if not configured."};

◆ s_inverseSpeedOfLight

double Muon::MdtDriftCircleOnTrackCreator::s_inverseSpeedOfLight {1. / Gaudi::Units::c_light}
staticconstexprprivate

Definition at line 277 of file MdtDriftCircleOnTrackCreator.h.

277{1. / Gaudi::Units::c_light};

The documentation for this class was generated from the following files: