Loading [MathJax]/jax/input/TeX/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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_unphysicalHitRadiusUpperBound {this, "UpperBoundHitRadius", 20.}
 
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

Definition at line 105 of file MdtCalibrationTool.cxx.

107  {
108 
109  const Identifier& id{calibIn.identify()};
110 
111  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
112  if (!constantHandle.isValid()){
113  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
114  }
115 
116  const MuonCalib::MdtFullCalibData* calibConstants = constantHandle->getCalibData(id, msgStream());
117  if (!calibConstants) {
118  ATH_MSG_WARNING("Could not find calibration data for channel "<<m_idHelperSvc->toString(id));
119  return MdtCalibOutput{};
120  }
121 
122  // require at least the MdtRtRelation to be available
123  const RtRelationPtr& rtRelation{calibConstants->rtRelation};
124  // Hardcoded MDT tube radius 14.6mm here - not correct for sMDT
125  // on the other hand it should be rare that a tube does not have an RT
126  if(!rtRelation) {
127  ATH_MSG_WARNING("No rtRelation found, cannot calibrate tube "<<m_idHelperSvc->toString(id));
128  return MdtCalibOutput{};
129  }
130  if (!calibConstants->tubeCalib) {
131  ATH_MSG_WARNING("Cannot extract the single tube calibrations for tube "<<m_idHelperSvc->toString(id));
132  return MdtCalibOutput{};
133  }
135  const SingleTubeCalib* singleTubeData = calibConstants->tubeCalib->getCalib(id);
136  if (!singleTubeData) {
137  ATH_MSG_WARNING("Failed to access tubedata for " << m_idHelperSvc->toString(id));
138  return MdtCalibOutput{};
139  }
140  const float invPropSpeed = constantHandle->inversePropSpeed();
141 
142  MdtCalibOutput calibResult{};
143  // correct for global t0 of rt-region
144 
145  calibResult.setTubeT0(singleTubeData->t0);
146  calibResult.setMeanAdc(singleTubeData->adcCal);
147 
148  // set propagation delay
149  if (m_doProp) {
150  const double propagationDistance = calibIn.signalPropagationDistance();
151  ATH_MSG_VERBOSE("Calibration of "<<m_idHelperSvc->toString(id)<<", propagation distance: "<<propagationDistance<<" -> "
152  <<(invPropSpeed * propagationDistance));
153  calibResult.setPropagationTime(invPropSpeed * propagationDistance);
154  }
155 
157  const double driftTime = calibIn.tdc() * tdcBinSize
158  - (m_doTof ? calibIn.timeOfFlight() : 0.)
159  - calibIn.triggerTime()
160  - calibResult.tubeT0()
161  - calibResult.signalPropagationTime();
162 
163  calibResult.setDriftTime(driftTime);
164  // apply corrections
165  double corrTime{0.};
166  const bool doCorrections = m_doField || m_doTemp || m_doBkg;
167  if (doCorrections) {
168  const CorrectionPtr& corrections{calibConstants->corrections};
169  const RtRelationPtr& rtRelation{calibConstants->rtRelation};
170  const MuonCalib::IRtRelation* rt = rtRelation->rt();
171  ATH_MSG_VERBOSE("There are correction functions.");
173  if (m_doSlew && corrections->slewing()) {
174  double slewTime=corrections->slewing()->correction(calibResult.driftTime(), calibIn.adc());
175  corrTime -= slewTime;
176  calibResult.setSlewingTime(slewTime);
177  }
178 
179 
180  if (m_doField && corrections->bField()) {
181  MagField::AtlasFieldCache fieldCache{};
182 
184  if (!readHandle.isValid()) {
185  THROW_EXCEPTION("calibrate: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
186  }
187  readHandle->getInitializedCache(fieldCache);
188 
190  fieldCache.getField(calibIn.closestApproach().data(), globalB.data());
191  const Amg::Vector2D locBField = calibIn.projectMagneticField(globalB);
192  using BFieldComp = MdtCalibInput::BFieldComp;
193  calibResult.setLorentzTime(corrections->bField()->correction(calibResult.driftTime(),
194  locBField[static_cast<int>(BFieldComp::alongWire)],
195  locBField[static_cast<int>(BFieldComp::alongTrack)]));
196  corrTime -= calibResult.lorentzTime();
197  }
198  if(m_doTemp && rt && rt->hasTmaxDiff()) {
199  const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
200  const int mL = id_helper.multilayer(id);
201  const double tempTime = MuonCalib::RtScaleFunction(calibResult.driftTime(), mL == 2, *rt);
202  calibResult.setTemperatureTime(tempTime);
203  corrTime-=calibResult.temperatureTime();
204  }
205  // background corrections (I guess this is never active)
206  if (m_doBkg && corrections->background()) {
207  double bgLevel{0.};
208  calibResult.setBackgroundTime(corrections->background()->correction(calibResult.driftTime(), bgLevel ));
209  corrTime += calibResult.backgroundTime();
210  }
211  }
212 
213  calibResult.setDriftTime(calibResult.driftTime() + corrTime);
214 
215  // calculate drift radius + error
216  double r{0.}, reso{0.};
217  double t = calibResult.driftTime();
218  double t_inrange = t;
219  Muon::MdtDriftCircleStatus timeStatus = driftTimeStatus(t, *rtRelation);
220 
221  assert(rtRelation->rt() != nullptr);
222  r = rtRelation->rt()->radius(t);
223  // apply tUpper gshift
224  if (m_doTMaxShift) {
225  float tShift = m_tMaxShiftTool->getValue(id);
226  r = rtRelation->rt()->radius( t * (1 + tShift) );
227  }
228  // check whether drift times are within range, if not fix them to the min/max range
229  if ( t < rtRelation->rt()->tLower() ) {
230  t_inrange = rtRelation->rt()->tLower();
231  double rmin = rtRelation->rt()->radius( t_inrange );
232  double drdt = (rtRelation->rt()->radius( t_inrange + 30. ) - rmin)/30.;
234  if (timeStatus == Muon::MdtStatusBeforeSpectrum) {
235  t = rtRelation->rt()->tLower() - m_timeWindowLowerBound;
236  }
237  // if we get here we are outside the rt range but inside the window.
238  r = std::max(rmin + drdt*(t-t_inrange), m_unphysicalHitRadiusLowerBound.value());
239  } else if( t > rtRelation->rt()->tUpper() ) {
240  t_inrange = rtRelation->rt()->tUpper();
241  double rmax = rtRelation->rt()->radius( t_inrange );
242  double drdt = (rmax - rtRelation->rt()->radius( t_inrange - 30. ))/30.;
243  // now check whether we are outside the time window
244  if ( timeStatus == Muon::MdtStatusAfterSpectrum ) {
245  t = rtRelation->rt()->tUpper() + m_timeWindowUpperBound;
246  }
247  // if we get here we are outside the rt range but inside the window.
248  r = rmax + drdt*(t-t_inrange);
249  }
250 
251  assert(rtRelation->rtRes() != nullptr);
252  if (!resolFromRtrack) {
253  reso = rtRelation->rtRes()->resolution( t_inrange );
254  } else {
255  const std::optional<double> tFromR = rtRelation->tr()->driftTime(std::abs(calibIn.distanceToTrack()));
256  reso = rtRelation->rtRes()->resolution(tFromR.value_or(0.));
257  }
258 
259 
260  if (m_doPropUncert && !calibIn.trackDirHasPhi()) {
261  assert(rtRelation->rt() != nullptr);
262  const double driftTimeUp = std::min(rtRelation->rt()->tUpper(),
263  calibIn.tdc() * tdcBinSize
264  - (m_doTof ? calibIn.timeOfFlight() : 0.)
265  - calibIn.triggerTime()
266  - calibResult.tubeT0());
267 
268  const double driftTimeDn = std::max(rtRelation->rt()->tLower(),
269  calibIn.tdc() * tdcBinSize
270  - (m_doTof ? calibIn.timeOfFlight() : 0.)
271  - calibIn.triggerTime()
272  - calibResult.tubeT0()
273  - calibIn.tubeLength() * invPropSpeed);
274 
275  const double radiusUp = rtRelation->rt()->radius(driftTimeUp);
276  const double radiusDn = rtRelation->rt()->radius(driftTimeDn);
277  ATH_MSG_VERBOSE("Measurement "<<m_idHelperSvc->toString(calibIn.identify())
278  <<" nominal drift time "<<driftTime<<", down: "<<driftTimeDn<<", up: "<<driftTimeUp
279  <<" --> driftRadius: "<<r<<" pm "<<reso<<", prop-up: "<<radiusUp<<", prop-dn: "<<radiusDn
280  <<" delta: "<<(radiusUp-radiusDn));
281  calibResult.setDriftUncertSigProp(0.5*std::abs(radiusUp - radiusDn));
282  reso = std::hypot(reso, calibResult.driftUncertSigProp());
283  }
284 
285  calibResult.setDriftRadius(r, reso);
286  calibResult.setStatus(timeStatus);
287  // summary
288  ATH_MSG_VERBOSE( "Calibration for tube " << m_idHelperSvc->toString(id)
289  <<" passed. "<<std::endl<<"Input: "<<calibIn<<std::endl<<"Extracted calib constants: "<<calibResult<<std::endl);
290  return calibResult;
291 } //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 293 of file MdtCalibrationTool.cxx.

295  {
296 
297  MdtCalibOutput primResult = calibrate(ctx, primHit);
298  MdtCalibOutput twinResult = calibrate(ctx, twinHit);
299 
300  // get Identifier and MdtReadOutElement for twin tubes
301  // get 'raw' drifttimes of twin pair; we don't use timeofFlight or propagationTime cause they are irrelevant for twin coordinate
302  double primdriftTime = primHit.tdc()*tdcBinSize - primResult.tubeT0();
303  double twinDriftTime = twinHit.tdc()*tdcBinSize - twinResult.tubeT0();
305  if (primdriftTime >= twinDriftTime) {
306  ATH_MSG_VERBOSE("Swap "<<m_idHelperSvc->toString(primHit.identify())<<" & "<<m_idHelperSvc->toString(twinHit.identify())
307  <<" primDriftTime: "<<primdriftTime<<", secondTime: "<<twinDriftTime);
308  std::swap(primdriftTime, twinDriftTime);
309  std::swap(primResult, twinResult);
310  std::swap(primHit, twinHit);
311  }
312  const Identifier& primId = primHit.identify();
313  const Identifier& twinId = twinHit.identify();
314 
315  // get calibration constants from DbTool
316  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
317  if (!constantHandle.isValid()){
318  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
319  }
320 
321 
322  const MuonCalib::MdtFullCalibData* data1st = constantHandle->getCalibData(primId, msgStream());
323  const MuonCalib::MdtFullCalibData* data2nd = constantHandle->getCalibData(twinId, msgStream());
324  if (!data1st || !data2nd) {
325  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Failed to access calibration constants for tubes "<<
326  m_idHelperSvc->toString(primId)<<" & "<<m_idHelperSvc->toString(twinId));
327  return MdtCalibTwinOutput{};
328  }
329  const SingleTubeCalib* calibSingleTube1st = data1st->tubeCalib->getCalib(primId);
330  const SingleTubeCalib* calibSingleTube2nd = data2nd->tubeCalib->getCalib(twinId);
331  const double invPropSpeed = constantHandle->inversePropSpeed();
332  if (!calibSingleTube1st || !calibSingleTube2nd) {
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 
338  // get tubelength and set HV-delay (~6ns)
339  constexpr double HVdelay = 6.;
340 
342  double twin_timedif = twinDriftTime - primdriftTime - invPropSpeed * twinHit.tubeLength() - HVdelay;
345 
346  const double tubeHalfLength = 0.5*primHit.tubeLength();
347  const double zTwin = std::clamp(0.5* primHit.readOutSide()* twin_timedif / invPropSpeed, -tubeHalfLength, tubeHalfLength);
348  const double errZTwin = m_resTwin / invPropSpeed;
349 
350  ATH_MSG_VERBOSE( "Twin calibration - tube: " << m_idHelperSvc->toString(primId)<< " twintube: " << m_idHelperSvc->toString(twinId)<<endmsg
351  << " prompthit tdc = " << primHit.tdc() << " twinhit tdc = " << twinHit.tdc()
352  << " tube driftTime = " << primResult<< " second tube driftTime = " << twinResult<<endmsg
353  << " Time difference =" << twin_timedif << " zTwin=" << zTwin<<", errorZ="<<errZTwin);
354  MdtCalibTwinOutput calibResult{primHit,twinHit,primResult, twinResult};
355 
356 
357  calibResult.setLocZ(zTwin, errZTwin);
358  return calibResult;
359 }

◆ driftTimeStatus()

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

Definition at line 361 of file MdtCalibrationTool.cxx.

362  {
363  if (rtRelation.rt()) {
364  if(driftTime < rtRelation.rt()->tLower() - m_timeWindowLowerBound) {
365  ATH_MSG_VERBOSE( " drift time outside time window "
366  << driftTime << ". Mininum time = "
367  << rtRelation.rt()->tLower() - m_timeWindowLowerBound );
369  } else if (driftTime > rtRelation.rt()->tUpper() + m_timeWindowUpperBound) {
370  ATH_MSG_VERBOSE( " drift time outside time window "
371  << driftTime << ". Maximum time = "
372  << rtRelation.rt()->tUpper() + m_timeWindowUpperBound);
374  }
375  } else {
376  ATH_MSG_WARNING( "No valid rt relation supplied for driftTimeStatus method" );
378  }
380 }

◆ getCalibConstants()

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

Definition at line 97 of file MdtCalibrationTool.cxx.

98  {
99  SG::ReadCondHandle constantHandle{m_calibDbKey, ctx};
100  if (!constantHandle.isValid()){
101  THROW_EXCEPTION("Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
102  }
103  return constantHandle->getCalibData(channelId, msgStream());
104 }

◆ getResolutionFromRt()

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

Definition at line 381 of file MdtCalibrationTool.cxx.

381  {
382 
383  const MuonCalib::MdtFullCalibData* moduleConstants = getCalibConstants(ctx, moduleID);
384  if (!moduleConstants){
385  THROW_EXCEPTION("Failed to retrieve set of calibration constants for "<<m_idHelperSvc->toString(moduleID));
386  }
387  const RtRelationPtr& rtRel{moduleConstants->rtRelation};
388  if (!rtRel) {
389  THROW_EXCEPTION("No rt-relation found for "<<m_idHelperSvc->toString(moduleID));
390  }
391  const double t = std::min(std::max(time, rtRel->rt()->tLower()), rtRel->rt()->tUpper());
392  return rtRel->rtRes()->resolution(t);
393 }

◆ getSettings()

ToolSettings MdtCalibrationTool::getSettings ( ) const
finaloverridevirtual

Definition at line 34 of file MdtCalibrationTool.cxx.

34  {
35  ToolSettings settings{};
36  using Property = ToolSettings::Property;
37  settings.setBit(Property::TofCorrection, m_doTof);
38  settings.setBit(Property::PropCorrection, m_doProp);
39  settings.setBit(Property::TempCorrection, m_doTemp);
40  settings.setBit(Property::MagFieldCorrection, m_doField);
41  settings.setBit(Property::SlewCorrection, m_doSlew);
42  settings.setBit(Property::BackgroundCorrection, m_doBkg);
43  settings.window = static_cast<timeWindowMode>(m_windowSetting.value());
44  return settings;
45 }

◆ 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 46 of file MdtCalibrationTool.cxx.

46  {
47  ATH_MSG_DEBUG( "Initializing" );
48 
49  switch(m_windowSetting.value()) {
50  case timeWindowMode::UserDefined:
51  ATH_MSG_DEBUG("Use predefined user values of "<<m_timeWindowLowerBound<<" & "<<m_timeWindowUpperBound);
52  break;
54  ATH_MSG_DEBUG("Use 1000. & 2000. as the lower and upper time window values ");
55  m_timeWindowLowerBound = 1000.;
56  m_timeWindowUpperBound = 2000.;
57  break;
58  case timeWindowMode::CollisionG4:
59  ATH_MSG_DEBUG("Use Geant4 collision time window of 20-30");
62  break;
63  case timeWindowMode::CollisionData:
64  ATH_MSG_DEBUG("Use collision data time window of 10 to 30");
67  break;
68  case timeWindowMode::CollisionFitT0:
69  ATH_MSG_DEBUG("Use collision data time window of 50 to 100 to fit T0 in the end");
72  break;
73  default:
74  ATH_MSG_FATAL("Unknown time window setting "<<m_windowSetting<<" provided.");
75  return StatusCode::FAILURE;
76  };
77 
78  ATH_CHECK(m_idHelperSvc.retrieve());
83  ATH_CHECK(m_t0ShiftTool.retrieve(EnableTool{m_doT0Shift}));
84  ATH_CHECK(m_tMaxShiftTool.retrieve(EnableTool{m_doTMaxShift}));
85  ATH_MSG_DEBUG("Initialization finalized "<<std::endl
86  <<" TimeWindow: ["<< m_timeWindowLowerBound.value()<<";"<<m_timeWindowUpperBound.value()<<"]"<<std::endl
87  <<" Correct time of flight "<<(m_doTof ? "yay" : "nay")<<std::endl
88  <<" Correct propagation time "<<(m_doProp ? "si" : "no")<<std::endl
89  <<" Correct temperature "<<(m_doTemp ? "si" : "no")<<std::endl
90  <<" Correct magnetic field "<<(m_doField ? "si" : "no")<<std::endl
91  <<" Correct time slew "<<(m_doSlew ? "si" : "no")<<std::endl
92  <<" Correct background "<<(m_doBkg ? "si" : "no"));
93  return StatusCode::SUCCESS;
94 } //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 126 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 133 of file MdtCalibrationTool.h.

◆ m_idHelperSvc

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

Definition at line 135 of file MdtCalibrationTool.h.

◆ m_resTwin

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

Definition at line 123 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 122 of file MdtCalibrationTool.h.

◆ m_unphysicalHitRadiusUpperBound

Gaudi::Property<double> MdtCalibrationTool::m_unphysicalHitRadiusUpperBound {this, "UpperBoundHitRadius", 20.}
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:676
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:105
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
MuonCalib::MdtFullCalibData
class which holds the full set of calibration constants for a given tube
Definition: MdtFullCalibData.h:15
MCP::SystVariation::Default
@ Default
Definition: EnumDef.h:73
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:133
MuonCalib::MdtFullCalibData::tubeCalib
TubeContainerPtr tubeCalib
Definition: MdtFullCalibData.h:22
MdtCalibrationTool::m_calibDbKey
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > m_calibDbKey
Definition: MdtCalibrationTool.h:126
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:122
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:135
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:122
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:361
MuonCalib::RtScaleFunction
float RtScaleFunction(const float t, const bool ml2, const IRtRelation &rtrelation)
Definition: RtScaleFunction.cxx:20
ToolSettings
MdtCalibrationTool::ToolSettings ToolSettings
Definition: MdtCalibrationTool.cxx:31
MdtCalibInput::tdc
int16_t tdc() const
Returns the tdc counts of the hit.
Definition: MdtCalibInput.cxx:85
MdtCalibrationTool::getCalibConstants
virtual const MuonCalib::MdtFullCalibData * getCalibConstants(const EventContext &ctx, const Identifier &channelId) const override final
Definition: MdtCalibrationTool.cxx:97
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:123
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Identifier
Definition: IdentifierFieldParser.cxx:14