ATLAS Offline Software
MdtCalibrationTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "MdtCalibrationTool.h"
6 
25 
26 namespace {
27  static double const twoBySqrt12 = 2/std::sqrt(12);
28 }
29 
33 MdtCalibrationTool::MdtCalibrationTool(const std::string& type, const std::string &name, const IInterface* parent) :
34  base_class(type, name, parent) {}
35 
37  ToolSettings settings{};
38  using Property = ToolSettings::Property;
39  settings.setBit(Property::TofCorrection, m_doTof);
40  settings.setBit(Property::PropCorrection, m_doProp);
41  settings.setBit(Property::TempCorrection, m_doTemp);
42  settings.setBit(Property::MagFieldCorrection, m_doField);
43  settings.setBit(Property::WireSagTimeCorrection, m_doWireSag);
44  settings.setBit(Property::SlewCorrection, m_doSlew);
45  settings.setBit(Property::BackgroundCorrection, m_doBkg);
46  settings.window = static_cast<timeWindowMode>(m_windowSetting.value());
47  return settings;
48 }
50  ATH_MSG_DEBUG( "Initializing" );
51 
52  switch(m_windowSetting.value()) {
53  case timeWindowMode::UserDefined:
54  ATH_MSG_DEBUG("Use predefined user values of "<<m_timeWindowLowerBound<<" & "<<m_timeWindowUpperBound);
55  break;
57  ATH_MSG_DEBUG("Use 1000. & 2000. as the lower and upper time window values ");
58  m_timeWindowLowerBound = 1000.;
59  m_timeWindowUpperBound = 2000.;
60  break;
61  case timeWindowMode::CollisionG4:
62  ATH_MSG_DEBUG("Use Geant4 collision time window of 20-30");
65  break;
66  case timeWindowMode::CollisionData:
67  ATH_MSG_DEBUG("Use collision data time window of 10 to 30");
70  break;
71  case timeWindowMode::CollisionFitT0:
72  ATH_MSG_DEBUG("Use collision data time window of 50 to 100 to fit T0 in the end");
75  break;
76  default:
77  ATH_MSG_FATAL("Unknown time window setting "<<m_windowSetting<<" provided.");
78  return StatusCode::FAILURE;
79  };
80 
81  ATH_CHECK(m_idHelperSvc.retrieve());
86  ATH_CHECK(m_t0ShiftTool.retrieve(EnableTool{m_doT0Shift}));
87  ATH_CHECK(m_tMaxShiftTool.retrieve(EnableTool{m_doTMaxShift}));
88  ATH_MSG_DEBUG("Initialization finalized "<<std::endl
89  <<" TimeWindow: ["<< m_timeWindowLowerBound.value()<<";"<<m_timeWindowUpperBound.value()<<"]"<<std::endl
90  <<" Correct time of flight "<<(m_doTof ? "yay" : "nay")<<std::endl
91  <<" Correct propagation time "<<(m_doProp ? "si" : "no")<<std::endl
92  <<" Correct temperature "<<(m_doTemp ? "si" : "no")<<std::endl
93  <<" Correct magnetic field "<<(m_doField ? "si" : "no")<<std::endl
94  <<" Correct wire sagging "<<(m_doWireSag ? "si" : "no")<<std::endl
95  <<" Correct time slew "<<(m_doSlew ? "si" : "no")<<std::endl
96  <<" Correct background "<<(m_doBkg ? "si" : "no"));
97  return StatusCode::SUCCESS;
98 } //end MdtCalibrationTool::initialize
99 
100 
101 
103  const MdtCalibInput& calibIn,
104  bool resolFromRtrack) const {
105 
106  const MdtIdHelper& id_helper{m_idHelperSvc->mdtIdHelper()};
109  if (!readCondHandle.isValid()){
110  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
111  throw std::runtime_error("No calibration constants could be retrieved");
112  }
113 
114  const Identifier& id{calibIn.identify()};
115 
116  const MuonCalib::MdtFullCalibData* calibConstants = readCondHandle->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 
141  MdtCalibOutput calibResult{};
142  // correct for global t0 of rt-region
143 
144  calibResult.setTubeT0(singleTubeData->t0 + rtRelation->t0Global());
145  calibResult.setMeanAdc(singleTubeData->adcCal);
146 
147  // set propagation delay
148  if (m_doProp) {
149  const double propagationDistance = calibIn.signalPropagationDistance();
150  calibResult.setPropagationTime(singleTubeData->inversePropSpeed * 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 || m_doWireSag;
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  ATH_MSG_FATAL("calibrate: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key());
183  throw std::runtime_error("No magnetic field could be retrieved");
184  }
185  readHandle->getInitializedCache(fieldCache);
186 
188  fieldCache.getField(calibIn.closestApproach().data(), globalB.data());
189  const Amg::Vector2D locBField = calibIn.projectMagneticField(globalB);
190  using BFieldComp = MdtCalibInput::BFieldComp;
191  calibResult.setLorentzTime(corrections->bField()->correction(calibResult.driftTime(),
192  locBField[BFieldComp::alongWire],
193  locBField[BFieldComp::alongTrack]));
194  corrTime -= calibResult.lorentzTime();
195  }
196  if(m_doTemp && rt && rt->HasTmaxDiff()) {
197  const int mL = id_helper.multilayer(id);
198  const double tempTime = MuonCalib::RtScaleFunction(calibResult.driftTime(),
199  mL == 2,
200  *rt);
201  calibResult.setTemperatureTime(tempTime);
202  corrTime-=calibResult.temperatureTime();
203  }
204  // background corrections (I guess this is never active)
205  if (m_doBkg && corrections->background()) {
206  double bgLevel{0.};
207  calibResult.setBackgroundTime(corrections->background()->correction(calibResult.driftTime(), bgLevel ));
208  corrTime += calibResult.backgroundTime();
209  }
211  if (m_doWireSag && corrections->wireSag()) {
213  const Amg::Vector3D& saggedSurfPos{calibIn.saggedSurfCenter()};
214  const Amg::Vector3D& nominalSurfPos{calibIn.surfaceCenter()};
217  const double deltaY = calibIn.closestApproach().y() - saggedSurfPos.y();
218 
219  // sign of drift radius (for sag calculation) is +/- of track passes
220  // above/below wire
221  const double signedDriftRadius = deltaY*(std::abs(calibResult.driftRadius()/deltaY));
222 
223  // calculate the magnitude of the wire sag
224  double effectiveSag = nominalSurfPos.y()
225  - saggedSurfPos.y();
226 
227  calibResult.setSaggingTime(corrections->wireSag()->correction(signedDriftRadius, effectiveSag));
228  // apply the correction
229  corrTime += calibResult.saggingTime();
230  }
231  }
232 
233  calibResult.setDriftTime(calibResult.driftTime() + corrTime);
234 
235  // calculate drift radius + error
236  double r{0.}, reso{0.};
237  double t = calibResult.driftTime();
238  double t_inrange = t;
239  Muon::MdtDriftCircleStatus timeStatus = driftTimeStatus(t, *rtRelation);
240  if(rtRelation->rt()) {
241  r = rtRelation->rt()->radius(t);
242  // apply tUpper gshift
243  if (m_doTMaxShift) {
244  float tShift = m_tMaxShiftTool->getValue(id);
245  r = rtRelation->rt()->radius( t * (1 + tShift) );
246  }
247  // check whether drift times are within range, if not fix them to the min/max range
248  if ( t < rtRelation->rt()->tLower() ) {
249  t_inrange = rtRelation->rt()->tLower();
250  double rmin = rtRelation->rt()->radius( t_inrange );
251  double drdt = (rtRelation->rt()->radius( t_inrange + 30. ) - rmin)/30.;
252 
254  if (timeStatus == Muon::MdtStatusBeforeSpectrum) {
255  t = rtRelation->rt()->tLower() - m_timeWindowLowerBound;
256  }
257  // if we get here we are outside the rt range but inside the window.
258  r = std::max(rmin + drdt*(t-t_inrange), m_unphysicalHitRadiusLowerBound.value());
259  } else if( t > rtRelation->rt()->tUpper() ) {
260  t_inrange = rtRelation->rt()->tUpper();
261  double rmax = rtRelation->rt()->radius( t_inrange );
262  double drdt = (rmax - rtRelation->rt()->radius( t_inrange - 30. ))/30.;
263 
264  // now check whether we are outside the time window
265  if ( timeStatus == Muon::MdtStatusAfterSpectrum ) {
266  t = rtRelation->rt()->tUpper() + m_timeWindowUpperBound;
267  }
268  // if we get here we are outside the rt range but inside the window.
269  r = rmax + drdt*(t-t_inrange);
270  }
271  } else {
272  ATH_MSG_WARNING( "no rt found" );
273  return calibResult;
274  }
275 
276  if (rtRelation->rtRes()) {
277  if (!resolFromRtrack) {
278  reso = rtRelation->rtRes()->resolution( t_inrange );
279  } else {
280  bool boundFlag{false};
281  const double tFromR = rtRelation->tr()->tFromR(std::abs(calibIn.distanceToTrack()),
282  boundFlag);
283  reso = rtRelation->rtRes()->resolution(tFromR);
284  }
285  } else {
286  ATH_MSG_WARNING( "no rtRes found" );
287  return calibResult;
288  }
289  calibResult.setDriftRadius(r, reso);
290  calibResult.setStatus(timeStatus);
291  // summary
292  ATH_MSG_VERBOSE( "Calibration for tube " << m_idHelperSvc->toString(id)
293  <<" passed. "<<std::endl<<"Input: "<<calibIn<<std::endl<<"Extracted calib constants: "<<calibResult<<std::endl);
294  return calibResult;
295 } //end MdtCalibrationTool::calibrate
296 
298  const MdtCalibInput& primHit,
299  const MdtCalibInput& twinHit) const {
300 
301  MdtCalibOutput primResult = calibrate(ctx, primHit);
302  MdtCalibOutput twinResult = calibrate(ctx, twinHit);
303 
304  // get Identifier and MdtReadOutElement for twin tubes
305  const Identifier& primId = primHit.identify();
306  const Identifier& twinId = twinHit.identify();
307  // get 'raw' drifttimes of twin pair; we don't use timeofFlight or propagationTime cause they are irrelevant for twin coordinate
308  double primdriftTime = primHit.tdc()*tdcBinSize - primResult.tubeT0();
309  double twinDriftTime = twinHit.tdc()*tdcBinSize - twinResult.tubeT0();
310 
313  if (!calibDataContainer.isValid()){
314  ATH_MSG_FATAL(__FILE__<<":"<<__LINE__<<" Failed to retrieve the Mdt calibration constants "<<m_calibDbKey.fullKey());
315  throw std::runtime_error("No calibration constants could be retrieved");
316  }
317  // get calibration constants from DbTool
318  const MuonCalib::MdtFullCalibData* data1st = calibDataContainer->getCalibData(primId, msgStream());
319  const MuonCalib::MdtFullCalibData* data2nd = calibDataContainer->getCalibData(twinId, msgStream());
320  if (!data1st || !data2nd) {
321  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Failed to access calibration constants for tubes "<<
322  m_idHelperSvc->toString(primId)<<" & "<<m_idHelperSvc->toString(twinId));
323  return MdtCalibTwinOutput{};
324  }
325  const SingleTubeCalib* calibSingleTube1st = data1st->tubeCalib->getCalib(primId);
326  const SingleTubeCalib* calibSingleTube2nd = data2nd->tubeCalib->getCalib(twinId);
327  if (!calibSingleTube1st || !calibSingleTube2nd) {
328  ATH_MSG_WARNING(__FILE__<<":"<<__LINE__<<" Failed to access calibration constants for tubes "<<
329  m_idHelperSvc->toString(primId)<<" & "<<m_idHelperSvc->toString(twinId));
330  return MdtCalibTwinOutput{};
331  }
332 
333  const double invPropSpeed1st{calibSingleTube1st->inversePropSpeed};
334  const double invPropSpeed2nd{calibSingleTube2nd->inversePropSpeed};
335 
336  // define twin position and error
337  double zTwin{0.}, errZTwin{0.}, twin_timedif{0.};
338  // find out which tube was the prompt
339  // (= actually hit by the muon; not hit by the muon = twinhit_)
340  // in the formula for z_hit_from_twin we take as convention that
341  // twindif = twin_time - prompt_time
342  int prompthit_tdc{0}, twinhit_tdc{0};
343  bool firstIsPrompt{true};
344  if ( primdriftTime < twinDriftTime) {
345  twin_timedif = twinDriftTime - primdriftTime;
346  } else {
347  twin_timedif = primdriftTime - twinDriftTime;
348  firstIsPrompt = false;
349  }
350 
351  // get tubelength and set HV-delay (~6ns)
352  const MdtCalibInput& primaryHit{(firstIsPrompt ? primHit : twinHit)};
353  const double tubelength = primaryHit.tubeLength();
354  constexpr double HVdelay = 6.;
355 
356  // twin_timedif must be between min and max of possible time-difference
357  // between prompt and twin signals
358  // accounting for 5 std.dev. of twin time resolution
359  if ( twin_timedif < (HVdelay - 5.*m_resTwin) ||
360  twin_timedif > (tubelength*(invPropSpeed1st + invPropSpeed2nd)
361  + HVdelay + 5.*m_resTwin)){
362  ATH_MSG_DEBUG( " TIME DIFFERENCE OF TWIN PAIR OUT OF RANGE("
363  << (HVdelay - 5.*m_resTwin)<< "-"
364  << (tubelength*(invPropSpeed1st + invPropSpeed2nd) + HVdelay + 5.*m_resTwin)
365  << ") time difference = " << twin_timedif );
366 
367  }
368 
369  // Make ONLY a twin PrepData if twin time difference is physical (within tubelength)
370  if (twin_timedif < (tubelength* (invPropSpeed1st + invPropSpeed2nd)
371  + HVdelay + 10.*m_resTwin)){
372 
373  //calculate local(!) z of the hit from twin tubes information
374  double z_hit_sign_from_twin = ( 1 / (invPropSpeed2nd *2.)) *
375  (tubelength*invPropSpeed2nd -
376  twin_timedif + HVdelay) ;
378  if (z_hit_sign_from_twin < -tubelength/2.) {
379  ATH_MSG_DEBUG( " TWIN HIT outside acceptance with time difference "
380  << twin_timedif
381  << " Z local hit " << z_hit_sign_from_twin
382  << " Z local minimum " << -tubelength/2 );
383  z_hit_sign_from_twin = - tubelength/2.;
384  }
385  // do sign management just like in MdtDigitizationTool.cxx
386  const double z_hit_geo_from_twin = primaryHit.readOutSide() *z_hit_sign_from_twin;
387 
388  zTwin = z_hit_geo_from_twin;
389  errZTwin = m_resTwin*invPropSpeed1st;
390 
391  ATH_MSG_VERBOSE( " TWIN TUBE "
392  << " tube: " << m_idHelperSvc->toString(primId)
393  << " twintube: " << m_idHelperSvc->toString(twinId)<<endmsg
394  << " prompthit tdc = " << prompthit_tdc//*TDCbinsize
395  << " twinhit tdc = " << twinhit_tdc// *TDCbinsize
396  << " tube driftTime = " << primResult
397  << " second tube driftTime = " << twinResult
398  << " TWIN PAIR time difference = " << twin_timedif << endmsg
399  << " z_hit_sign_from_twin = " << z_hit_sign_from_twin
400  << " z_hit_geo_from_twin = " << z_hit_geo_from_twin);
401 
402  } // end if(twin_timedif < (tubelength*inversePropSpeed + tubelength*inversePropSpeedSecond + HVdelay + 10.*m_resTwin)){
403  else {
404  ATH_MSG_VERBOSE( " TIME DIFFERENCE OF TWIN PAIR UNPHYSICAL OUT OF RANGE("
405  << (HVdelay - 5*m_resTwin) << "-"
406  << (2*tubelength*invPropSpeed1st + HVdelay + 5*m_resTwin)
407  << ") time difference = "
408  << twin_timedif );
409  zTwin = 0.;
410  errZTwin = tubelength/2.;
411  }
412 
413  MdtCalibTwinOutput calibResult{(firstIsPrompt ? primHit : twinHit),
414  (firstIsPrompt ? twinHit : primHit),
415  (firstIsPrompt ? primResult : twinResult),
416  (firstIsPrompt ? twinResult : primResult)};
417 
418 
419  calibResult.setLocZ(zTwin, errZTwin);
420  return calibResult;
421 }
422 
424  const MuonCalib::MdtRtRelation& rtRelation ) const {
425  if (rtRelation.rt()) {
426  if(driftTime < rtRelation.rt()->tLower() - m_timeWindowLowerBound) {
427  ATH_MSG_VERBOSE( " drift time outside time window "
428  << driftTime << ". Mininum time = "
429  << rtRelation.rt()->tLower() - m_timeWindowLowerBound );
431  } else if (driftTime > rtRelation.rt()->tUpper() + m_timeWindowUpperBound) {
432  ATH_MSG_VERBOSE( " drift time outside time window "
433  << driftTime << ". Maximum time = "
434  << rtRelation.rt()->tUpper() + m_timeWindowUpperBound);
436  }
437  } else {
438  ATH_MSG_WARNING( "No valid rt relation supplied for driftTimeStatus method" );
440  }
442 }
443 double MdtCalibrationTool::getResolutionFromRt(const EventContext& ctx, const Identifier& moduleID, const double time) const {
444 
446  if (!calibConstants.isValid()) {
447  ATH_MSG_FATAL("Failed to retrieve the calibration constants "<<m_calibDbKey.fullKey());
448  throw std::runtime_error("Where are my Mdt calibration constants");
449  }
450  const MuonCalib::MdtFullCalibData* moduleConstants = calibConstants->getCalibData(moduleID, msgStream());
451  if (!moduleConstants){
452  ATH_MSG_FATAL("Failed to retrieve set of calibration constants for "<<m_idHelperSvc->toString(moduleID));
453  throw std::runtime_error("No constants for calib container");
454  }
455  const RtRelationPtr& rtRel{moduleConstants->rtRelation};
456  if (!rtRel) {
457  ATH_MSG_FATAL("No rt-relation found for "<<m_idHelperSvc->toString(moduleID));
458  throw std::runtime_error("No rt relation ");
459  }
460  const double t = std::min(std::max(time, rtRel->rt()->tLower()), rtRel->rt()->tUpper());
461  return rtRel->rtRes()->resolution(t);
462 }
MdtCalibInput::tdc
int tdc() const
Returns the tdc counts of the hit.
Definition: MdtCalibInput.cxx:63
MdtCalibInput::distanceToTrack
double distanceToTrack() const
Returns the distance to track (signed)
Definition: MdtCalibInput.cxx:141
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::t0
float t0
< relative t0 in chamber (ns)
Definition: MdtTubeCalibContainer.h:20
beamspotman.r
def r
Definition: beamspotman.py:676
MdtCalibInput::surfaceCenter
const Amg::Vector3D & surfaceCenter() const
Returns the center of the associated surface.
Definition: MdtCalibInput.cxx:85
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 >
MCP::SystVariation::Default
@ Default
Definition: EnumDef.h:72
MdtCalibrationTool::m_doWireSag
Gaudi::Property< bool > m_doWireSag
Definition: MdtCalibrationTool.h:105
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
SingleTubeCalib
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib SingleTubeCalib
Definition: MdtCalibrationTool.cxx:30
MuonCalib::IRtRelation::tUpper
virtual double tUpper(void) const =0
TrRelation.h
max
#define max(a, b)
Definition: cfImp.cxx:41
MdtCalibInput::BFieldComp
BFieldComp
Definition: MdtCalibInput.h:86
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
MdtCalibOutput::MdtDriftCircleStatus
Muon::MdtDriftCircleStatus MdtDriftCircleStatus
Definition: MdtCalibOutput.h:63
MdtCalibInput
Definition: MdtCalibInput.h:27
MdtTubeCalibContainer.h
makeComparison.deltaY
int deltaY
Definition: makeComparison.py:44
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:82
TRT::Hit::signedDriftRadius
@ signedDriftRadius
Definition: HitInfo.h:40
MuonCalib::IRtRelation::HasTmaxDiff
bool HasTmaxDiff() const
Definition: IRtRelation.h:29
MuonCalib::MdtFullCalibData::rtRelation
RtRelationPtr rtRelation
Definition: MdtFullCalibData.h:21
MdtCalibrationTool::m_doTof
Gaudi::Property< bool > m_doTof
Definition: MdtCalibrationTool.h:101
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:107
MdtCalibInput::closestApproach
const Amg::Vector3D & closestApproach() const
Returns the point of closest approach to the wire.
Definition: MdtCalibInput.cxx:69
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:112
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
MuonCalib::MdtRtRelation
class which holds calibration constants per rt-region
Definition: MdtRtRelation.h:18
Muon::MdtStatusDriftTime
@ MdtStatusDriftTime
The tube produced a vaild measurement.
Definition: MdtDriftCircleStatus.h:34
MdtCalibrationTool::m_timeWindowUpperBound
Gaudi::Property< double > m_timeWindowUpperBound
Definition: MdtCalibrationTool.h:100
IMdtSlewCorFunc.h
MdtCalibInput::identify
const Identifier & identify() const
Returns the Identifier of the hit.
Definition: MdtCalibInput.cxx:62
MdtCalibrationTool::getResolutionFromRt
virtual double getResolutionFromRt(const EventContext &ctx, const Identifier &module, const double time) const override final
Definition: MdtCalibrationTool.cxx:443
MuonCalib::MdtFullCalibData::corrections
CorrectionPtr corrections
Definition: MdtFullCalibData.h:20
MdtCalibrationTool::getSettings
virtual ToolSettings getSettings() const override final
Definition: MdtCalibrationTool.cxx:36
MdtCalibrationTool::m_fieldCacheCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
Definition: MdtCalibrationTool.h:130
MdtCalibrationTool::calibrateTwinTubes
virtual MdtCalibTwinOutput calibrateTwinTubes(const EventContext &ctx, const MdtCalibInput &hit, const 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:297
MdtCalibrationTool::initialize
virtual StatusCode initialize() override final
initialization
Definition: MdtCalibrationTool.cxx:49
MuonCalib::MdtFullCalibData::tubeCalib
TubeContainerPtr tubeCalib
Definition: MdtFullCalibData.h:22
MdtCalibrationTool::m_calibDbKey
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > m_calibDbKey
Definition: MdtCalibrationTool.h:123
TRT::Hit::driftTime
@ driftTime
Definition: HitInfo.h:43
MdtCalibInput::adc
int adc() const
Returns the amount of accumulated charge.
Definition: MdtCalibInput.cxx:64
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:143
MdtCalibrationTool::m_unphysicalHitRadiusLowerBound
Gaudi::Property< double > m_unphysicalHitRadiusLowerBound
Definition: MdtCalibrationTool.h:119
MdtCalibrationTool::m_doTemp
Gaudi::Property< bool > m_doTemp
Definition: MdtCalibrationTool.h:103
MdtRtRelation.h
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
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
IMdtBackgroundCorFunc.h
AtlasFieldCache.h
MuonCalib::IRtRelation::tLower
virtual double tLower(void) const =0
MdtCalibrationTool::m_doField
Gaudi::Property< bool > m_doField
Definition: MdtCalibrationTool.h:104
MdtIdHelper
Definition: MdtIdHelper.h:61
MdtCalibrationTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtCalibrationTool.h:132
test_pyathena.parent
parent
Definition: test_pyathena.py:15
MdtCorFuncSet.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IRtResolution.h
MdtCalibInput::signalPropagationDistance
double signalPropagationDistance() const
Calculates the distance that the signal has to travel along the wire.
Definition: MdtCalibInput.cxx:131
MdtCalibOutput
Definition: MdtCalibOutput.h:10
MdtCalibrationTool::m_doSlew
Gaudi::Property< bool > m_doSlew
Definition: MdtCalibrationTool.h:106
min
#define min(a, b)
Definition: cfImp.cxx:40
MdtCalibHit.h
MdtCalibrationTool::m_t0ShiftTool
ToolHandle< MuonCalib::IShiftMapTools > m_t0ShiftTool
Definition: MdtCalibrationTool.h:110
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:24
MdtCalibrationTool::MdtCalibrationTool
MdtCalibrationTool(const std::string &type, const std::string &name, const IInterface *parent)
constructor
Definition: MdtCalibrationTool.cxx:33
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib::inversePropSpeed
float inversePropSpeed
multiplicative correction factor for ADC measurement w.r.t.
Definition: MdtTubeCalibContainer.h:22
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
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
MdtCalibrationTool::m_windowSetting
Gaudi::Property< int > m_windowSetting
Definition: MdtCalibrationTool.h:98
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
IMdtWireSagCorFunc.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MdtFullCalibData.h
MdtCalibrationTool::m_timeWindowLowerBound
Gaudi::Property< double > m_timeWindowLowerBound
Definition: MdtCalibrationTool.h:99
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:116
MdtCalibTwinOutput::setLocZ
void setLocZ(const double locZ, const double locZuncert)
Definition: MdtCalibTwinOutput.cxx:43
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:90
Muon::MdtStatusUnDefined
@ MdtStatusUnDefined
Undefined.
Definition: MdtDriftCircleStatus.h:43
IMdtBFieldCorFunc.h
MuonCalib::MdtTubeCalibContainer::SingleTubeCalib
Definition: MdtTubeCalibContainer.h:18
MdtCalibrationTool::m_doProp
Gaudi::Property< bool > m_doProp
Definition: MdtCalibrationTool.h:102
MdtCalibrationTool::driftTimeStatus
Muon::MdtDriftCircleStatus driftTimeStatus(double driftTime, const MuonCalib::MdtRtRelation &rtRelation) const
Definition: MdtCalibrationTool.cxx:423
MuonCalib::RtScaleFunction
float RtScaleFunction(const float t, const bool ml2, const IRtRelation &rtrelation)
Definition: RtScaleFunction.cxx:20
ToolSettings
MdtCalibrationTool::ToolSettings ToolSettings
Definition: MdtCalibrationTool.cxx:32
MdtCalibInput::timeOfFlight
double timeOfFlight() const
Returns the time of flight.
Definition: MdtCalibInput.cxx:79
MdtCalibInput::saggedSurfCenter
const Amg::Vector3D & saggedSurfCenter() const
Returns the center of the sagged line surface.
Definition: MdtCalibInput.cxx:88
MuonCalib::IRtRelation
generic interface for a rt-relation
Definition: IRtRelation.h:14
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:120
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32