ATLAS Offline Software
MdtCalibrationTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MdtCalibrationTool.h"
6 
23 
24 #include "GeoModelKernel/throwExcept.h"
25 
29 
30 
32  ToolSettings settings{};
33  using Property = ToolSettings::Property;
34  settings.setBit(Property::TofCorrection, m_doTof);
35  settings.setBit(Property::PropCorrection, m_doProp);
36  settings.setBit(Property::TempCorrection, m_doTemp);
37  settings.setBit(Property::MagFieldCorrection, m_doField);
38  settings.setBit(Property::SlewCorrection, m_doSlew);
39  settings.setBit(Property::BackgroundCorrection, m_doBkg);
40  settings.window = static_cast<timeWindowMode>(m_windowSetting.value());
41  return settings;
42 }
44  ATH_MSG_DEBUG( "Initializing" );
45 
46  switch(m_windowSetting.value()) {
47  case timeWindowMode::UserDefined:
48  ATH_MSG_DEBUG("Use predefined user values of "<<m_timeWindowLowerBound<<" & "<<m_timeWindowUpperBound);
49  break;
50  case timeWindowMode::Default:
51  ATH_MSG_DEBUG("Use 1000. & 2000. as the lower and upper time window values ");
52  m_timeWindowLowerBound = 1000.;
53  m_timeWindowUpperBound = 2000.;
54  break;
55  case timeWindowMode::CollisionG4:
56  ATH_MSG_DEBUG("Use Geant4 collision time window of 20-30");
59  break;
60  case timeWindowMode::CollisionData:
61  ATH_MSG_DEBUG("Use collision data time window of 10 to 30");
64  break;
65  case timeWindowMode::CollisionFitT0:
66  ATH_MSG_DEBUG("Use collision data time window of 50 to 100 to fit T0 in the end");
69  break;
70  default:
71  ATH_MSG_FATAL("Unknown time window setting "<<m_windowSetting<<" provided.");
72  return StatusCode::FAILURE;
73  };
74 
75  ATH_CHECK(m_idHelperSvc.retrieve());
80  ATH_CHECK(m_t0ShiftTool.retrieve(EnableTool{m_doT0Shift}));
81  ATH_CHECK(m_tMaxShiftTool.retrieve(EnableTool{m_doTMaxShift}));
82  ATH_MSG_DEBUG("Initialization finalized "<<std::endl
83  <<" TimeWindow: ["<< m_timeWindowLowerBound.value()<<";"<<m_timeWindowUpperBound.value()<<"]"<<std::endl
84  <<" Correct time of flight "<<(m_doTof ? "yay" : "nay")<<std::endl
85  <<" Correct propagation time "<<(m_doProp ? "si" : "no")<<std::endl
86  <<" Correct temperature "<<(m_doTemp ? "si" : "no")<<std::endl
87  <<" Correct magnetic field "<<(m_doField ? "si" : "no")<<std::endl
88  <<" Correct time slew "<<(m_doSlew ? "si" : "no")<<std::endl
89  <<" Correct background "<<(m_doBkg ? "si" : "no"));
90  return StatusCode::SUCCESS;
91 } //end MdtCalibrationTool::initialize
92 
93 
95  const Identifier& channelId) const {
96  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
97  if (!constantHandle.isValid()){
98  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
99  }
100  return constantHandle->getCalibData(channelId, msgStream());
101 }
103  const MdtCalibInput& calibIn,
104  bool resolFromRtrack) const {
105 
106  const Identifier& id{calibIn.identify()};
107 
108  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
109  if (!constantHandle.isValid()){
110  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
111  }
112 
113  const MuonCalib::MdtFullCalibData* calibConstants = constantHandle->getCalibData(id, msgStream());
114  if (!calibConstants) {
115  ATH_MSG_WARNING("Could not find calibration data for channel "<<m_idHelperSvc->toString(id));
116  return MdtCalibOutput{};
117  }
118 
119  // require at least the MdtRtRelation to be available
120  const RtRelationPtr& rtRelation{calibConstants->rtRelation};
121  // Hardcoded MDT tube radius 14.6mm here - not correct for sMDT
122  // on the other hand it should be rare that a tube does not have an RT
123  if(!rtRelation) {
124  ATH_MSG_WARNING("No rtRelation found, cannot calibrate tube "<<m_idHelperSvc->toString(id));
125  return MdtCalibOutput{};
126  }
127  if (!calibConstants->tubeCalib) {
128  ATH_MSG_WARNING("Cannot extract the single tube calibrations for tube "<<m_idHelperSvc->toString(id));
129  return MdtCalibOutput{};
130  }
132  const SingleTubeCalib* singleTubeData = calibConstants->tubeCalib->getCalib(id);
133  if (!singleTubeData) {
134  ATH_MSG_WARNING("Failed to access tubedata for " << m_idHelperSvc->toString(id));
135  return MdtCalibOutput{};
136  }
137  const float invPropSpeed = constantHandle->inversePropSpeed();
138 
139  MdtCalibOutput calibResult{};
140  // correct for global t0 of rt-region
141 
142  calibResult.setTubeT0(singleTubeData->t0);
143  calibResult.setMeanAdc(singleTubeData->adcCal);
144 
145  // set propagation delay
146  if (m_doProp) {
147  const double propagationDistance = calibIn.signalPropagationDistance();
148  ATH_MSG_VERBOSE("Calibration of "<<m_idHelperSvc->toString(id)<<", propagation distance: "<<propagationDistance<<" -> "
149  <<(invPropSpeed * propagationDistance));
150  calibResult.setPropagationTime(invPropSpeed * propagationDistance);
151  }
152 
154  const double driftTime = calibIn.tdc() * tdcBinSize
155  - (m_doTof ? calibIn.timeOfFlight() : 0.)
156  - calibIn.triggerTime()
157  - calibResult.tubeT0()
158  - calibResult.signalPropagationTime();
159 
160  calibResult.setDriftTime(driftTime);
161  // apply corrections
162  double corrTime{0.};
163  const bool doCorrections = m_doField || m_doTemp || m_doBkg;
164  if (doCorrections) {
165  const CorrectionPtr& corrections{calibConstants->corrections};
166  const RtRelationPtr& rtRelation{calibConstants->rtRelation};
167  const MuonCalib::IRtRelation* rt = rtRelation->rt();
168  ATH_MSG_VERBOSE("There are correction functions.");
170  if (m_doSlew && corrections->slewing()) {
171  double slewTime=corrections->slewing()->correction(calibResult.driftTime(), calibIn.adc());
172  corrTime -= slewTime;
173  calibResult.setSlewingTime(slewTime);
174  }
175 
176 
177  if (m_doField && corrections->bField()) {
178  MagField::AtlasFieldCache fieldCache{};
179 
181  if (!readHandle.isValid()) {
182  THROW_EXCEPTION("calibrate: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
183  }
184  readHandle->getInitializedCache(fieldCache);
185 
187  fieldCache.getField(calibIn.closestApproach().data(), globalB.data());
188  const Amg::Vector2D locBField = calibIn.projectMagneticField(globalB);
189  using BFieldComp = MdtCalibInput::BFieldComp;
190  calibResult.setLorentzTime(corrections->bField()->correction(calibResult.driftTime(),
191  locBField[static_cast<int>(BFieldComp::alongWire)],
192  locBField[static_cast<int>(BFieldComp::alongTrack)]));
193  corrTime -= calibResult.lorentzTime();
194  }
195  if(m_doTemp && rt && rt->hasTmaxDiff()) {
196  const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
197  const int mL = id_helper.multilayer(id);
198  const double tempTime = MuonCalib::RtScaleFunction(calibResult.driftTime(), mL == 2, *rt);
199  calibResult.setTemperatureTime(tempTime);
200  corrTime-=calibResult.temperatureTime();
201  }
202  // background corrections (I guess this is never active)
203  if (m_doBkg && corrections->background()) {
204  double bgLevel{0.};
205  calibResult.setBackgroundTime(corrections->background()->correction(calibResult.driftTime(), bgLevel ));
206  corrTime += calibResult.backgroundTime();
207  }
208  }
209 
210  calibResult.setDriftTime(calibResult.driftTime() + corrTime);
211 
212  // calculate drift radius + error
213  double r{0.}, reso{0.};
214  double t = calibResult.driftTime();
215  double t_inrange = t;
216  Muon::MdtDriftCircleStatus timeStatus = driftTimeStatus(t, *rtRelation);
217 
218  assert(rtRelation->rt() != nullptr);
219  r = rtRelation->rt()->radius(t);
220  // apply tUpper gshift
221  if (m_doTMaxShift) {
222  float tShift = m_tMaxShiftTool->getValue(id);
223  r = rtRelation->rt()->radius( t * (1 + tShift) );
224  }
225  // check whether drift times are within range, if not fix them to the min/max range
226  if ( t < rtRelation->rt()->tLower()) {
227  t_inrange = rtRelation->rt()->tLower();
228  double rmin = rtRelation->rt()->radius( t_inrange );
229  double drdt = rtRelation->rt()->driftVelocity( t_inrange);
231  if (timeStatus == Muon::MdtStatusBeforeSpectrum) {
232  t = rtRelation->rt()->tLower() - m_timeWindowLowerBound;
233  }
235  r = rmin + drdt*(t-t_inrange);
236  } else if( t > rtRelation->rt()->tUpper() ) {
237  t_inrange = rtRelation->rt()->tUpper();
238  double rmax = rtRelation->rt()->radius( t_inrange );
239  double drdt = rtRelation->rt()->driftVelocity(t_inrange);
240  // now check whether we are outside the time window
241  if ( timeStatus == Muon::MdtStatusAfterSpectrum ) {
242  t = rtRelation->rt()->tUpper() + m_timeWindowUpperBound;
243  }
245  r = rmax + drdt*(t-t_inrange);
246  }
247 
248  assert(rtRelation->rtRes() != nullptr);
249 
252  ATH_MSG_VERBOSE("Calibrated radius below physical limit "<<r<<" vs. "<<calibIn.innerTubeR());
253  timeStatus = Muon::MdtStatusBeforeSpectrum;
255  reso = std::pow(calibIn.innerTubeR(), 2);
256  } else if (r > calibIn.innerTubeR()) {
257  ATH_MSG_VERBOSE("Calibrated radius outside tube ."<<r<<" vs. "<<calibIn.innerTubeR());
258  timeStatus = Muon::MdtStatusAfterSpectrum;
259  r = calibIn.innerTubeR();
260  reso = std::pow(calibIn.innerTubeR(), 2);
261  } else if (!resolFromRtrack) {
262  reso = rtRelation->rtRes()->resolution( t_inrange );
263  } else {
264  const std::optional<double> tFromR = rtRelation->tr()->driftTime(std::abs(calibIn.distanceToTrack()));
265  reso = rtRelation->rtRes()->resolution(tFromR.value_or(0.));
266  }
267 
268  if (m_doPropUncert && !calibIn.trackDirHasPhi()) {
269  assert(rtRelation->rt() != nullptr);
270  const double driftTimeUp = std::min(rtRelation->rt()->tUpper(),
271  calibIn.tdc() * tdcBinSize
272  - (m_doTof ? calibIn.timeOfFlight() : 0.)
273  - calibIn.triggerTime()
274  - calibResult.tubeT0());
275 
276  const double driftTimeDn = std::max(rtRelation->rt()->tLower(),
277  calibIn.tdc() * tdcBinSize
278  - (m_doTof ? calibIn.timeOfFlight() : 0.)
279  - calibIn.triggerTime()
280  - calibResult.tubeT0()
281  - calibIn.tubeLength() * invPropSpeed);
282 
283  const double radiusUp = rtRelation->rt()->radius(driftTimeUp);
284  const double radiusDn = rtRelation->rt()->radius(driftTimeDn);
285  ATH_MSG_VERBOSE("Measurement "<<m_idHelperSvc->toString(calibIn.identify())
286  <<" nominal drift time "<<calibResult.driftTime()<<", down: "<<driftTimeDn<<", up: "<<driftTimeUp
287  <<" --> driftRadius: "<<r<<" pm "<<reso<<", prop-up: "<<radiusUp<<", prop-dn: "<<radiusDn
288  <<" delta: "<<(radiusUp-radiusDn));
289  calibResult.setDriftUncertSigProp(0.5*std::abs(radiusUp - radiusDn));
290  reso = std::hypot(reso, calibResult.driftUncertSigProp());
291  }
292 
293  calibResult.setDriftRadius(r, reso);
294  calibResult.setStatus(timeStatus);
295  // summary
296  ATH_MSG_VERBOSE( "Calibration for tube " << m_idHelperSvc->toString(id)
297  <<" passed. "<<std::endl<<"Input: "<<calibIn<<std::endl<<"Extracted calib constants: "<<calibResult<<std::endl);
298  return calibResult;
299 } //end MdtCalibrationTool::calibrate
300 
302  MdtCalibInput&& primHit,
303  MdtCalibInput&& twinHit) const {
304 
305  MdtCalibOutput primResult = calibrate(ctx, primHit);
306  MdtCalibOutput twinResult = calibrate(ctx, twinHit);
307 
308  // get Identifier and MdtReadOutElement for twin tubes
309  // get 'raw' drifttimes of twin pair; we don't use timeofFlight or propagationTime cause they are irrelevant for twin coordinate
310  double primdriftTime = primHit.tdc()*tdcBinSize - primResult.tubeT0();
311  double twinDriftTime = twinHit.tdc()*tdcBinSize - twinResult.tubeT0();
313  if (primdriftTime >= twinDriftTime) {
314  ATH_MSG_VERBOSE("Swap "<<m_idHelperSvc->toString(primHit.identify())<<" & "<<m_idHelperSvc->toString(twinHit.identify())
315  <<" primDriftTime: "<<primdriftTime<<", secondTime: "<<twinDriftTime);
316  std::swap(primdriftTime, twinDriftTime);
317  std::swap(primResult, twinResult);
318  std::swap(primHit, twinHit);
319  }
320  const Identifier& primId = primHit.identify();
321  const Identifier& twinId = twinHit.identify();
322 
323  // get calibration constants from DbTool
324  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
325  if (!constantHandle.isValid()){
326  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
327  }
328 
329 
330  const MuonCalib::MdtFullCalibData* data1st = constantHandle->getCalibData(primId, msgStream());
331  const MuonCalib::MdtFullCalibData* data2nd = constantHandle->getCalibData(twinId, msgStream());
332  if (!data1st || !data2nd) {
333  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Failed to access calibration constants for tubes "<<
334  m_idHelperSvc->toString(primId)<<" & "<<m_idHelperSvc->toString(twinId));
335  return MdtCalibTwinOutput{};
336  }
337  const SingleTubeCalib* calibSingleTube1st = data1st->tubeCalib->getCalib(primId);
338  const SingleTubeCalib* calibSingleTube2nd = data2nd->tubeCalib->getCalib(twinId);
339  const double invPropSpeed = constantHandle->inversePropSpeed();
340  if (!calibSingleTube1st || !calibSingleTube2nd) {
341  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Failed to access calibration constants for tubes "<<
342  m_idHelperSvc->toString(primId)<<" & "<<m_idHelperSvc->toString(twinId));
343  return MdtCalibTwinOutput{};
344  }
345 
346  // get tubelength and set HV-delay (~6ns)
347  constexpr double HVdelay = 6.;
348 
350  double twin_timedif = twinDriftTime - primdriftTime - invPropSpeed * twinHit.tubeLength() - HVdelay;
353 
354  const double tubeHalfLength = 0.5*primHit.tubeLength();
355  const double zTwin = std::clamp(0.5* primHit.readOutSide()* twin_timedif / invPropSpeed, -tubeHalfLength, tubeHalfLength);
356  const double errZTwin = m_resTwin / invPropSpeed;
357 
358  ATH_MSG_VERBOSE( "Twin calibration - tube: " << m_idHelperSvc->toString(primId)<< " twintube: " << m_idHelperSvc->toString(twinId)<<endmsg
359  << " prompthit tdc = " << primHit.tdc() << " twinhit tdc = " << twinHit.tdc()
360  << " tube driftTime = " << primResult<< " second tube driftTime = " << twinResult<<endmsg
361  << " Time difference =" << twin_timedif << " zTwin=" << zTwin<<", errorZ="<<errZTwin);
362  MdtCalibTwinOutput calibResult{primHit,twinHit,primResult, twinResult};
363 
364 
365  calibResult.setLocZ(zTwin, errZTwin);
366  return calibResult;
367 }
368 
370  const MuonCalib::MdtRtRelation& rtRelation ) const {
371  if (rtRelation.rt()) {
372  if(driftTime < rtRelation.rt()->tLower() - m_timeWindowLowerBound) {
373  ATH_MSG_VERBOSE( " drift time outside time window "
374  << driftTime << ". Mininum time = "
375  << rtRelation.rt()->tLower() - m_timeWindowLowerBound );
377  } else if (driftTime > rtRelation.rt()->tUpper() + m_timeWindowUpperBound) {
378  ATH_MSG_VERBOSE( " drift time outside time window "
379  << driftTime << ". Maximum time = "
380  << rtRelation.rt()->tUpper() + m_timeWindowUpperBound);
382  }
383  } else {
384  ATH_MSG_WARNING( "No valid rt relation supplied for driftTimeStatus method" );
386  }
388 }
389 double MdtCalibrationTool::getResolutionFromRt(const EventContext& ctx, const Identifier& moduleID, const double time) const {
390 
391  const MuonCalib::MdtFullCalibData* moduleConstants = getCalibConstants(ctx, moduleID);
392  if (!moduleConstants){
393  THROW_EXCEPTION("Failed to retrieve set of calibration constants for "<<m_idHelperSvc->toString(moduleID));
394  }
395  const RtRelationPtr& rtRel{moduleConstants->rtRelation};
396  if (!rtRel) {
397  THROW_EXCEPTION("No rt-relation found for "<<m_idHelperSvc->toString(moduleID));
398  }
399  const double t = std::min(std::max(time, rtRel->rt()->tLower()), rtRel->rt()->tUpper());
400  return rtRel->rtRes()->resolution(t);
401 }
MdtCalibInput::distanceToTrack
double distanceToTrack() const
Returns the distance to track (signed)
Definition: MdtCalibInput.cxx:156
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::t0
float t0
< relative t0 in chamber (ns)
Definition: MdtTubeCalibContainer.h:21
beamspotman.r
def r
Definition: beamspotman.py:674
MdtReadoutElement.h
RtScaleFunction.h
MdtCalibrationTool::calibrate
virtual MdtCalibOutput calibrate(const EventContext &ctx, const MdtCalibInput &hit, bool resolFromRtrack=false) const override final
Convert the raw MDT time (+charge) into a drift radius + error.
Definition: MdtCalibrationTool.cxx:102
GeoModel::TransientConstSharedPtr< MdtRtRelation >
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SingleTubeCalib
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib SingleTubeCalib
Definition: MdtCalibrationTool.cxx:26
MdtCalibInput::BFieldComp
BFieldComp
Definition: MdtCalibInput.h:124
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
MdtCalibOutput::MdtDriftCircleStatus
Muon::MdtDriftCircleStatus MdtDriftCircleStatus
Definition: MdtCalibOutput.h:63
MdtCalibInput
Definition: MdtCalibInput.h:34
MdtTubeCalibContainer.h
MdtCalibInput::trackDirHasPhi
bool trackDirHasPhi() const
Returns whether the track has a phi constaint or not.
Definition: MdtCalibInput.cxx:114
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
MdtCalibInput::triggerTime
double triggerTime() const
Returns the trigger offset time.
Definition: MdtCalibInput.cxx:118
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
MuonCalib::MdtFullCalibData::rtRelation
RtRelationPtr rtRelation
Definition: MdtFullCalibData.h:21
MdtCalibrationTool::m_doTof
Gaudi::Property< bool > m_doTof
Definition: MdtCalibrationTool.h:105
MuonCalib::IRtRelation::hasTmaxDiff
bool hasTmaxDiff() const
Definition: IRtRelation.h:42
Muon::MdtStatusAfterSpectrum
@ MdtStatusAfterSpectrum
The tube produced a hit that is inconsistent with the drift time spectrum, the drift time is larger t...
Definition: MdtDriftCircleStatus.h:40
Muon::MdtDriftCircleStatus
MdtDriftCircleStatus
Enum to represent the 'status' of Mdt measurements e.g.
Definition: MdtDriftCircleStatus.h:25
MdtCalibrationTool::m_doBkg
Gaudi::Property< bool > m_doBkg
Definition: MdtCalibrationTool.h:110
MdtCalibInput::closestApproach
const Amg::Vector3D & closestApproach() const
Returns the point of closest approach to the wire.
Definition: MdtCalibInput.cxx:105
MdtCalibrationTool.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
MdtCalibrationTool::m_tMaxShiftTool
ToolHandle< MuonCalib::IShiftMapTools > m_tMaxShiftTool
Definition: MdtCalibrationTool.h:115
MdtCalibrationTool::calibrateTwinTubes
virtual MdtCalibTwinOutput calibrateTwinTubes(const EventContext &ctx, MdtCalibInput &&hit, MdtCalibInput &&twinHit) const override final
Convert the raw MDT times of two twin hits into a Twin position (coordinate along tube) It returns wh...
Definition: MdtCalibrationTool.cxx:301
Property
Support class for PropertyMgr.
Definition: Property.h:23
python.SystemOfUnits.mL
float mL
Definition: SystemOfUnits.py:95
MuonCalib::MdtFullCalibData
class which holds the full set of calibration constants for a given tube
Definition: MdtFullCalibData.h:15
MuonCalib::MdtRtRelation
class which holds calibration constants per rt-region
Definition: MdtRtRelation.h:19
Muon::MdtStatusDriftTime
@ MdtStatusDriftTime
The tube produced a vaild measurement.
Definition: MdtDriftCircleStatus.h:34
MdtCalibrationTool::m_timeWindowUpperBound
Gaudi::Property< double > m_timeWindowUpperBound
Definition: MdtCalibrationTool.h:104
IMdtSlewCorFunc.h
MdtCalibInput::identify
const Identifier & identify() const
Returns the Identifier of the hit.
Definition: MdtCalibInput.cxx:84
MdtCalibrationTool::getResolutionFromRt
virtual double getResolutionFromRt(const EventContext &ctx, const Identifier &module, const double time) const override final
Definition: MdtCalibrationTool.cxx:389
MuonCalib::MdtFullCalibData::corrections
CorrectionPtr corrections
Definition: MdtFullCalibData.h:20
MdtCalibrationTool::getSettings
virtual ToolSettings getSettings() const override final
Definition: MdtCalibrationTool.cxx:31
MdtCalibrationTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: MdtCalibrationTool.h:132
MdtCalibrationTool::initialize
virtual StatusCode initialize() override final
initialization
Definition: MdtCalibrationTool.cxx:43
MuonCalib::MdtFullCalibData::tubeCalib
TubeContainerPtr tubeCalib
Definition: MdtFullCalibData.h:22
MdtCalibrationTool::m_calibDbKey
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > m_calibDbKey
Definition: MdtCalibrationTool.h:125
TRT::Hit::driftTime
@ driftTime
Definition: HitInfo.h:43
Muon::MdtStatusBeforeSpectrum
@ MdtStatusBeforeSpectrum
The tube produced a hit that is inconsistent with the drift time spectrum, the drift time is smaller ...
Definition: MdtDriftCircleStatus.h:37
MdtCalibInput::tubeLength
double tubeLength() const
Returns the tube length.
Definition: MdtCalibInput.cxx:158
MdtCalibrationTool::m_unphysicalHitRadiusLowerBound
Gaudi::Property< double > m_unphysicalHitRadiusLowerBound
Definition: MdtCalibrationTool.h:121
MdtCalibrationTool::m_doTemp
Gaudi::Property< bool > m_doTemp
Definition: MdtCalibrationTool.h:107
MdtRtRelation.h
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MdtCalibrationTool::m_doPropUncert
Gaudi::Property< bool > m_doPropUncert
Definition: MdtCalibrationTool.h:111
IMdtBackgroundCorFunc.h
AtlasFieldCache.h
MdtCalibrationTool::m_doField
Gaudi::Property< bool > m_doField
Definition: MdtCalibrationTool.h:108
MdtIdHelper
Definition: MdtIdHelper.h:61
MdtCalibrationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtCalibrationTool.h:134
MdtCorFuncSet.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MdtCalibInput::innerTubeR
double innerTubeR() const
Returns the inner tube radius.
Definition: MdtCalibInput.cxx:169
MuonCalib::IRtRelation::tUpper
virtual double tUpper() const =0
Returns the upper time covered by the r-t.
IRtResolution.h
MdtCalibInput::signalPropagationDistance
double signalPropagationDistance() const
Calculates the distance that the signal has to travel along the wire.
Definition: MdtCalibInput.cxx:143
MdtCalibOutput
Definition: MdtCalibOutput.h:10
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:121
WriteCalibToCool.swap
swap
Definition: WriteCalibToCool.py:94
MdtCalibrationTool::m_doSlew
Gaudi::Property< bool > m_doSlew
Definition: MdtCalibrationTool.h:109
MdtCalibHit.h
MdtCalibrationTool::m_t0ShiftTool
ToolHandle< MuonCalib::IShiftMapTools > m_t0ShiftTool
Definition: MdtCalibrationTool.h:113
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::adcCal
float adcCal
quality flag for the SingleTubeCalib constants: 0 all ok, 1 no hits found, 2 too few hits,...
Definition: MdtTubeCalibContainer.h:23
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
IMdtTempCorFunc.h
MdtCalibOutput::setTubeT0
void setTubeT0(const double T0)
Sets the tube T0.
Definition: MdtCalibOutput.cxx:44
MdtCalibInput::adc
int16_t adc() const
Returns the amount of accumulated charge.
Definition: MdtCalibInput.cxx:86
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
MuonDetectorManager.h
MdtCalibrationTool::m_windowSetting
Gaudi::Property< int > m_windowSetting
Definition: MdtCalibrationTool.h:102
MuonCalib::IRtRelation::tLower
virtual double tLower() const =0
Returns the lower time covered by the r-t.
MuonCalib::MdtRtRelation::rt
const IRtRelation * rt() const
rt relation
Definition: MdtRtRelation.h:23
MdtCalibTwinOutput
Definition: MdtCalibTwinOutput.h:11
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
IRtRelation.h
MdtFullCalibData.h
MdtCalibrationTool::m_timeWindowLowerBound
Gaudi::Property< double > m_timeWindowLowerBound
Definition: MdtCalibrationTool.h:103
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
GeoPrimitivesToStringConverter.h
MdtCalibrationTool::m_doTMaxShift
Gaudi::Property< bool > m_doTMaxShift
Definition: MdtCalibrationTool.h:119
MdtCalibInput::projectMagneticField
Amg::Vector2D projectMagneticField(const Amg::Vector3D &fieldInGlob) const
Splits the B-field into the components that point along the transverse track direction & along the tu...
Definition: MdtCalibInput.cxx:125
Muon::MdtStatusUnDefined
@ MdtStatusUnDefined
Undefined.
Definition: MdtDriftCircleStatus.h:43
IMdtBFieldCorFunc.h
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib
Definition: MdtTubeCalibContainer.h:19
MdtCalibrationTool::m_doProp
Gaudi::Property< bool > m_doProp
Definition: MdtCalibrationTool.h:106
MdtCalibrationTool::driftTimeStatus
Muon::MdtDriftCircleStatus driftTimeStatus(double driftTime, const MuonCalib::MdtRtRelation &rtRelation) const
Definition: MdtCalibrationTool.cxx:369
MuonCalib::RtScaleFunction
float RtScaleFunction(const float t, const bool ml2, const IRtRelation &rtrelation)
Definition: RtScaleFunction.cxx:20
ToolSettings
MdtCalibrationTool::ToolSettings ToolSettings
Definition: MdtCalibrationTool.cxx:28
MdtCalibInput::tdc
int16_t tdc() const
Returns the tdc counts of the hit.
Definition: MdtCalibInput.cxx:85
MdtCalibInput::timeOfFlight
double timeOfFlight() const
Returns the time of flight.
Definition: MdtCalibInput.cxx:115
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
MdtCalibrationTool::getCalibConstants
virtual const MuonCalib::MdtFullCalibData * getCalibConstants(const EventContext &ctx, const Identifier &channelId) const override final
Definition: MdtCalibrationTool.cxx:94
MuonCalib::IRtRelation
generic interface for a rt-relation
Definition: IRtRelation.h:19
MdtCalibOutput::tubeT0
double tubeT0() const
Returns the point in time where the muon typically enters the chamber.
Definition: MdtCalibOutput.cxx:43
MdtCalibrationTool::m_resTwin
Gaudi::Property< double > m_resTwin
Definition: MdtCalibrationTool.h:122
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Identifier
Definition: IdentifierFieldParser.cxx:14