ATLAS Offline Software
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MdtCalibrationTool Class Reference

#include <MdtCalibrationTool.h>

Inheritance diagram for MdtCalibrationTool:
Collaboration diagram for MdtCalibrationTool:

Public Types

using CorrectionPtr = MuonCalib::MdtFullCalibData::CorrectionPtr
 
using RtRelationPtr = MuonCalib::MdtFullCalibData::RtRelationPtr
 
using TubeContainerPtr = MuonCalib::MdtFullCalibData::TubeContainerPtr
 

Public Member Functions

virtual ~MdtCalibrationTool ()=default
 destructor More...
 
virtual StatusCode initialize () override final
 initialization More...
 
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. More...
 
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 whether the conversion was successful. More...
 
virtual double getResolutionFromRt (const EventContext &ctx, const Identifier &module, const double time) const override final
 
virtual ToolSettings getSettings () const override final
 
virtual const MuonCalib::MdtFullCalibDatagetCalibConstants (const EventContext &ctx, const Identifier &channelId) const override final
 

Private Member Functions

Muon::MdtDriftCircleStatus driftTimeStatus (double driftTime, const MuonCalib::MdtRtRelation &rtRelation) const
 

Private Attributes

Gaudi::Property< int > m_windowSetting {this, "TimeWindowSetting", timeWindowMode::Default}
 
Gaudi::Property< double > m_timeWindowLowerBound {this, "TimeWindowLowerBound", 0.}
 
Gaudi::Property< double > m_timeWindowUpperBound {this, "TimeWindowUpperBound", 0.}
 
Gaudi::Property< bool > m_doTof {this, "DoTofCorrection", true}
 
Gaudi::Property< bool > m_doProp {this, "DoPropagationCorrection", true}
 
Gaudi::Property< bool > m_doTemp {this, "DoTemperatureCorrection", false}
 
Gaudi::Property< bool > m_doField {this,"DoMagneticFieldCorrection", false}
 
Gaudi::Property< bool > m_doSlew {this, "DoSlewingCorrection", false}
 
Gaudi::Property< bool > m_doBkg {this, "DoBackgroundCorrection", false}
 
Gaudi::Property< bool > m_doPropUncert {this, "DoPropagationTimeUncert", false}
 
ToolHandle< MuonCalib::IShiftMapToolsm_t0ShiftTool {this, "T0ShiftTool", ""}
 
ToolHandle< MuonCalib::IShiftMapToolsm_tMaxShiftTool {this, "TShiftMaxTool", ""}
 
Gaudi::Property< bool > m_doT0Shift {this, "DoT0Shift", false}
 
Gaudi::Property< bool > m_doTMaxShift {this, "DoTMaxShift", false}
 
Gaudi::Property< double > m_unphysicalHitRadiusLowerBound {this, "LowerBoundHitRadius" , 0.}
 
Gaudi::Property< double > m_resTwin {this, "ResolutionTwinTube" , 1.05, "Twin tube resolution"}
 
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainerm_calibDbKey
 
SG::ReadCondHandleKey< AtlasFieldCacheCondObjm_fieldCacheCondObjInputKey
 
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 

Detailed Description

the Mdt Calib Service provides, on request, the drift radius and its error, computed applying the proper calibration, for any hit in Mdt chambers

Author
Martin Woudstra, Niels van Eldik

Definition at line 35 of file MdtCalibrationTool.h.

Member Typedef Documentation

◆ CorrectionPtr

Definition at line 39 of file MdtCalibrationTool.h.

◆ RtRelationPtr

Definition at line 40 of file MdtCalibrationTool.h.

◆ TubeContainerPtr

Definition at line 41 of file MdtCalibrationTool.h.

Constructor & Destructor Documentation

◆ ~MdtCalibrationTool()

virtual MdtCalibrationTool::~MdtCalibrationTool ( )
virtualdefault

destructor

Member Function Documentation

◆ calibrate()

MdtCalibOutput MdtCalibrationTool::calibrate ( const EventContext &  ctx,
const MdtCalibInput hit,
bool  resolFromRtrack = false 
) const
finaloverridevirtual

Convert the raw MDT time (+charge) into a drift radius + error.

It returns whether the conversion was successful.

Parameters
[in,out]hitHit must have pointer set to the MdtDigit, as well as the global hit position (including the position along the tube!)
[in]signedTracklengththe track length from the 'triggerpoint' to the hit. It is used for the time-of-flight correction. This triggerpoint is the I.P. for ATLAS p-p collisions, typically scintillators in test-beam and cosmic teststands, and not clear yet what is it is for cosmics in ATLAS. The sign is for determining the sign of the time-of-flight correction. If a muon first passes the triggerpoint, and then the MDT tube, the sign should be positive (the case for ATLAS p-p and H8 test-beam). If a muon first passes the MDT tube, and then de triggerpoint, the sign should be negative (typically the case for cosmic-ray teststands).
[in]triggerTimethe time of the 'triggerpoint' in ns. This is the time (measured with the same clock as the MDT TDC's) when the muon passed a known point in space: the 'triggerpoint'. For ATLAS this is 0.0 since the TDC's are synchonised w.r.t. the bunch-crossings. For H8 test-beam it is the trigger time, which is time when the muon passed the trigger scintillators. For cosmic-ray teststands it is usually also the time when the muon passed the trigger scintillators. For cosmics in ATLAS it is not clear yet.
[in]resolFromRtrackindicates the method to provide the resolution as a function of the distance of the reconstructed track from the anode wire instead of the drift radius

Retrieve the constants for the specific tube

calculate drift time

slewing corrections

now check whether we are outside the time window

Try an analytic continuation of the rt relation

Linearly expand the r-t relation

Calibrated radius too low

Definition at line 102 of file MdtCalibrationTool.cxx.

104  {
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

◆ calibrateTwinTubes()

MdtCalibTwinOutput MdtCalibrationTool::calibrateTwinTubes ( const EventContext &  ctx,
MdtCalibInput &&  hit,
MdtCalibInput &&  twinHit 
) const
finaloverridevirtual

Convert the raw MDT times of two twin hits into a Twin position (coordinate along tube) It returns whether the conversion was successful.

The primary hit has a smaller tdc...

Propagation time difference inside the primary tube

HVPropTime - ROPropTime = invPropSpeed*(twinZ - HVPos) - (ROPos - twinZ) = 2*invPropSpeed*twinZ - (HVPos + ROPos)

Definition at line 301 of file MdtCalibrationTool.cxx.

303  {
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 }

◆ driftTimeStatus()

Muon::MdtDriftCircleStatus MdtCalibrationTool::driftTimeStatus ( double  driftTime,
const MuonCalib::MdtRtRelation rtRelation 
) const
private

Definition at line 369 of file MdtCalibrationTool.cxx.

370  {
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 }

◆ getCalibConstants()

const MuonCalib::MdtFullCalibData * MdtCalibrationTool::getCalibConstants ( const EventContext &  ctx,
const Identifier channelId 
) const
finaloverridevirtual

Definition at line 94 of file MdtCalibrationTool.cxx.

95  {
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 }

◆ getResolutionFromRt()

double MdtCalibrationTool::getResolutionFromRt ( const EventContext &  ctx,
const Identifier module,
const double  time 
) const
finaloverridevirtual

Definition at line 389 of file MdtCalibrationTool.cxx.

389  {
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 }

◆ getSettings()

ToolSettings MdtCalibrationTool::getSettings ( ) const
finaloverridevirtual

Definition at line 31 of file MdtCalibrationTool.cxx.

31  {
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 }

◆ initialize()

StatusCode MdtCalibrationTool::initialize ( )
finaloverridevirtual

initialization

Ensure that the conditions dependency is properly declared

Shifting tools to evaluate systematic uncertainties on the T0 timing

Definition at line 43 of file MdtCalibrationTool.cxx.

43  {
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

Member Data Documentation

◆ m_calibDbKey

SG::ReadCondHandleKey<MuonCalib::MdtCalibDataContainer> MdtCalibrationTool::m_calibDbKey
private
Initial value:
{this, "CalibDataKey", "MdtCalibConstants",
"Conditions object containing the calibrations"}

Definition at line 125 of file MdtCalibrationTool.h.

◆ m_doBkg

Gaudi::Property<bool> MdtCalibrationTool::m_doBkg {this, "DoBackgroundCorrection", false}
private

Definition at line 110 of file MdtCalibrationTool.h.

◆ m_doField

Gaudi::Property<bool> MdtCalibrationTool::m_doField {this,"DoMagneticFieldCorrection", false}
private

Definition at line 108 of file MdtCalibrationTool.h.

◆ m_doProp

Gaudi::Property<bool> MdtCalibrationTool::m_doProp {this, "DoPropagationCorrection", true}
private

Definition at line 106 of file MdtCalibrationTool.h.

◆ m_doPropUncert

Gaudi::Property<bool> MdtCalibrationTool::m_doPropUncert {this, "DoPropagationTimeUncert", false}
private

Definition at line 111 of file MdtCalibrationTool.h.

◆ m_doSlew

Gaudi::Property<bool> MdtCalibrationTool::m_doSlew {this, "DoSlewingCorrection", false}
private

Definition at line 109 of file MdtCalibrationTool.h.

◆ m_doT0Shift

Gaudi::Property<bool> MdtCalibrationTool::m_doT0Shift {this, "DoT0Shift", false}
private

Definition at line 118 of file MdtCalibrationTool.h.

◆ m_doTemp

Gaudi::Property<bool> MdtCalibrationTool::m_doTemp {this, "DoTemperatureCorrection", false}
private

Definition at line 107 of file MdtCalibrationTool.h.

◆ m_doTMaxShift

Gaudi::Property<bool> MdtCalibrationTool::m_doTMaxShift {this, "DoTMaxShift", false}
private

Definition at line 119 of file MdtCalibrationTool.h.

◆ m_doTof

Gaudi::Property<bool> MdtCalibrationTool::m_doTof {this, "DoTofCorrection", true}
private

Definition at line 105 of file MdtCalibrationTool.h.

◆ m_fieldCacheCondObjInputKey

SG::ReadCondHandleKey<AtlasFieldCacheCondObj> MdtCalibrationTool::m_fieldCacheCondObjInputKey
private
Initial value:
{this, "AtlasFieldCacheCondObj", "fieldCondObj",
"Name of the Magnetic Field conditions object key"}

Definition at line 132 of file MdtCalibrationTool.h.

◆ m_idHelperSvc

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

Definition at line 134 of file MdtCalibrationTool.h.

◆ m_resTwin

Gaudi::Property<double> MdtCalibrationTool::m_resTwin {this, "ResolutionTwinTube" , 1.05, "Twin tube resolution"}
private

Definition at line 122 of file MdtCalibrationTool.h.

◆ m_t0ShiftTool

ToolHandle<MuonCalib::IShiftMapTools> MdtCalibrationTool::m_t0ShiftTool {this, "T0ShiftTool", ""}
private

Definition at line 113 of file MdtCalibrationTool.h.

◆ m_timeWindowLowerBound

Gaudi::Property<double> MdtCalibrationTool::m_timeWindowLowerBound {this, "TimeWindowLowerBound", 0.}
private

Definition at line 103 of file MdtCalibrationTool.h.

◆ m_timeWindowUpperBound

Gaudi::Property<double> MdtCalibrationTool::m_timeWindowUpperBound {this, "TimeWindowUpperBound", 0.}
private

Definition at line 104 of file MdtCalibrationTool.h.

◆ m_tMaxShiftTool

ToolHandle<MuonCalib::IShiftMapTools> MdtCalibrationTool::m_tMaxShiftTool {this, "TShiftMaxTool", ""}
private

Definition at line 115 of file MdtCalibrationTool.h.

◆ m_unphysicalHitRadiusLowerBound

Gaudi::Property<double> MdtCalibrationTool::m_unphysicalHitRadiusLowerBound {this, "LowerBoundHitRadius" , 0.}
private

Definition at line 121 of file MdtCalibrationTool.h.

◆ m_windowSetting

Gaudi::Property<int> MdtCalibrationTool::m_windowSetting {this, "TimeWindowSetting", timeWindowMode::Default}
private

Definition at line 102 of file MdtCalibrationTool.h.


The documentation for this class was generated from the following files:
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::t0
float t0
< relative t0 in chamber (ns)
Definition: MdtTubeCalibContainer.h:21
beamspotman.r
def r
Definition: beamspotman.py:674
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< MdtCorFuncSet >
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MdtCalibInput::BFieldComp
BFieldComp
Definition: MdtCalibInput.h:124
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
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
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
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
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
MdtCalibInput::identify
const Identifier & identify() const
Returns the Identifier of the hit.
Definition: MdtCalibInput.cxx:84
MuonCalib::MdtFullCalibData::corrections
CorrectionPtr corrections
Definition: MdtFullCalibData.h:20
MdtCalibrationTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: MdtCalibrationTool.h:132
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
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MdtCalibrationTool::m_doPropUncert
Gaudi::Property< bool > m_doPropUncert
Definition: MdtCalibrationTool.h:111
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
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonCalib::IRtRelation::tUpper
virtual double tUpper() const =0
Returns the upper time covered by the r-t.
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
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
MdtCalibrationTool::RtRelationPtr
MuonCalib::MdtFullCalibData::RtRelationPtr RtRelationPtr
Definition: MdtCalibrationTool.h:40
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
MdtCalibOutput::setTubeT0
void setTubeT0(const double T0)
Sets the tube T0.
Definition: MdtCalibOutput.cxx:44
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
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
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
MdtCalibrationTool::m_doTMaxShift
Gaudi::Property< bool > m_doTMaxShift
Definition: MdtCalibrationTool.h:119
Muon::MdtStatusUnDefined
@ MdtStatusUnDefined
Undefined.
Definition: MdtDriftCircleStatus.h:43
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
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