ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
MuonCalib::GlobalTimeFitter Class Reference

#include <GlobalTimeFitter.h>

Collaboration diagram for MuonCalib::GlobalTimeFitter:

Public Member Functions

 GlobalTimeFitter (const IMdtSegmentFitter *fitter)
 
 GlobalTimeFitter (const IMdtSegmentFitter *fitter, const IRtRelation *rtRel)
 
 ~GlobalTimeFitter ()=default
 
double GTFit (MuonCalibSegment *seg)
 
double GTFit2 (MuonCalibSegment *seg)
 
IRtRelationgetDefaultRtRelation ()
 
void setRtRelation (const IRtRelation *rtRel)
 
double getDefaultResolution (double r)
 
bool fit (MuonCalibSegment &seg) const
 
bool fit (MuonCalibSegment &seg, const MuonCalib::IMdtSegmentFitter::HitSelection &selection) const
 

Private Attributes

const IMdtSegmentFitterm_fitter {nullptr}
 
const IRtRelationm_rtRel {nullptr}
 

Detailed Description

Provides the operator to fit ....

Definition at line 22 of file GlobalTimeFitter.h.

Constructor & Destructor Documentation

◆ GlobalTimeFitter() [1/2]

MuonCalib::GlobalTimeFitter::GlobalTimeFitter ( const IMdtSegmentFitter fitter)
inline

Definition at line 24 of file GlobalTimeFitter.h.

24 : m_fitter(fitter) {}

◆ GlobalTimeFitter() [2/2]

MuonCalib::GlobalTimeFitter::GlobalTimeFitter ( const IMdtSegmentFitter fitter,
const IRtRelation rtRel 
)
inline

Definition at line 25 of file GlobalTimeFitter.h.

25 : m_fitter(fitter), m_rtRel(rtRel) {}

◆ ~GlobalTimeFitter()

MuonCalib::GlobalTimeFitter::~GlobalTimeFitter ( )
default

Member Function Documentation

◆ fit() [1/2]

bool MuonCalib::GlobalTimeFitter::fit ( MuonCalibSegment seg) const
inline

Definition at line 40 of file GlobalTimeFitter.h.

40 { return m_fitter->fit(seg); }

◆ fit() [2/2]

bool MuonCalib::GlobalTimeFitter::fit ( MuonCalibSegment seg,
const MuonCalib::IMdtSegmentFitter::HitSelection selection 
) const
inline

Definition at line 41 of file GlobalTimeFitter.h.

41  {
42  return m_fitter->fit(seg, selection);
43  }

◆ getDefaultResolution()

double MuonCalib::GlobalTimeFitter::getDefaultResolution ( double  r)
inline

Definition at line 35 of file GlobalTimeFitter.h.

35  {
36  double resolH8 = 0.164 * std::exp(-r / 4.43) + 0.043; // resolution from H8 TestBeam
37  return 2. * resolH8; // resolution from Cosmics in the pit
38  // return 2.0 ; // FLAT 2 mm resolution
39  };

◆ getDefaultRtRelation()

IRtRelation * MuonCalib::GlobalTimeFitter::getDefaultRtRelation ( )

Definition at line 131 of file GlobalTimeFitter.cxx.

131  {
132  static const MuonCalib::CalibFunc::ParVec rtPars{
133 
134  -50., // t_Start
135  8., // t_binSize
136 
137  0.2, // r(-50)
138  0.2, // r(-50+8)
139  0.2, // ...
140  0.25, 0.294403, 0.311703, 0.485873, 0.804235, 1.19624, 1.5562, 1.91466, 2.3147, 2.66996, 3.05436, 3.40371, 3.80574,
141  4.13506, 4.45473, 4.77338, 5.05294, 5.33755, 5.58459, 5.8718, 6.09389, 6.37129, 6.56824, 6.73359, 6.96923, 7.16944,
142  7.38872, 7.55627, 7.73885, 7.86403, 8.07223, 8.26818, 8.39531, 8.54069, 8.69377, 8.86487, 9.01724, 9.16516, 9.24791,
143  9.45596, 9.56237, 9.69553, 9.80647, 9.9432, 10.039, 10.207, 10.2884, 10.3977, 10.6045, 10.6181, 10.7883, 10.9057,
144  10.9908, 11.1615, 11.2359, 11.3409, 11.4451, 11.5412, 11.6896, 11.7487, 11.8853, 11.9571, 12.0381, 12.1739, 12.2601,
145  12.3892, 12.4406, 12.5809, 12.6297, 12.7495, 12.8314, 12.9463, 13.0487, 13.1337, 13.2417, 13.2706, 13.3917, 13.5107,
146  13.60, 13.69, 13.71, 13.8088, 13.8577, 14.0212, 14.0671, 14.1225, 14.2112, 14.3113, 14.3747, 14.3531, 14.4799,
147  14.458, 14.516, 14.8312, 14.85, 14.86, 14.87
148 
149  };
150 
151  IRtRelation* rt = MuonCalib::MdtCalibrationFactory::createRtRelation("RtRelationLookUp", rtPars);
152 
153  return rt;
154  }

◆ GTFit()

double MuonCalib::GlobalTimeFitter::GTFit ( MuonCalibSegment seg)

Definition at line 16 of file GlobalTimeFitter.cxx.

16  {
17  double timeShift = 0;
18  float tdcmin = FLT_MAX;
19  double timeoffset = 0.;
20  int stepf, stepff[13], stepl, stepr, dtt, dttbuono(0);
21  double chi2r, chi2l;
22  double chi2min = FLT_MAX;
23  double bestchi2 = FLT_MAX;
24 
25  stepff[0] = 512;
26  stepff[1] = 256;
27  stepff[2] = 128;
28  stepff[3] = 64;
29  stepff[4] = 32;
30  stepff[5] = 16;
31  stepff[6] = 8;
32  stepff[7] = 4;
33  stepff[8] = 2;
34  stepff[9] = 1;
35  stepff[10] = 1;
36  stepff[11] = 1;
37  stepff[12] = 1;
38 
39  for (const MuonCalibSegment::MdtHitPtr& mdt_hit : seg->mdtHOT()) {
40  if (mdt_hit->tdcCount() < tdcmin) tdcmin = mdt_hit->tdcCount();
41  }
42 
43  stepl = 512;
44  stepr = 512;
45  stepf = 512;
46  for (int jj = 0; jj < 11; jj++) {
47  bool outofrange{false};
48  for (const MuonCalibSegment::MdtHitPtr& mdt_hit : seg->mdtHOT()) {
49  double newtime = (mdt_hit->tdcCount() - tdcmin + stepl) * tdc_bc_conv;
51  if (newtime < 0. || newtime > max_drift_time_30mm) { outofrange = true; }
52  mdt_hit->setDriftTime(newtime);
53  double r = m_rtRel->radius(newtime);
54  double dr = getDefaultResolution(r); // get H8 resolution
55  mdt_hit->setDriftRadius(r, dr);
56  }
57  if (!outofrange) {
58  m_fitter->fit(*seg);
59  chi2l = seg->chi2();
60  } else {
61  chi2l = FLT_MAX;
62  }
63  outofrange = false;
64  for (const MuonCalibSegment::MdtHitPtr& mdt_hit : seg->mdtHOT()) {
65  double newtime = (mdt_hit->tdcCount() - tdcmin + stepr) * tdc_bc_conv;
66 
67  if (newtime < 0. || newtime > max_drift_time_30mm) { outofrange = true; }
68  mdt_hit->setDriftTime(newtime);
69  double r = m_rtRel->radius(newtime);
70  double dr = getDefaultResolution(r); // get H8 resolution
71  mdt_hit->setDriftRadius(r, dr);
72  }
73  if (!outofrange) {
74  m_fitter->fit(*seg);
75  chi2r = seg->chi2();
76  } else {
77  chi2r = FLT_MAX;
78  }
79  chi2min = chi2l;
80  stepf = stepl;
81  dtt = stepl;
82  if (chi2r < chi2l) {
83  chi2min = chi2r;
84  stepf = stepr;
85  dtt = stepr;
86  }
87  if (chi2min < bestchi2) {
88  bestchi2 = chi2min;
89  dttbuono = dtt;
90  stepl = stepf - stepff[jj];
91  stepr = stepff[jj] + stepf;
92  if (stepl < 0) stepl = 0;
93  if (stepr < 0) stepr = 0;
94  } else {
95  stepl = stepf - stepff[jj];
96  stepr = stepff[jj] + stepf;
97  if (stepl < 0) stepl = 0;
98  if (stepr < 0) stepr = 0;
99  }
100  timeoffset = dttbuono;
101  }
102 
103  for (const MuonCalibSegment::MdtHitPtr& mdt_hit : seg->mdtHOT()) {
104  double newtime = (mdt_hit->tdcCount() - tdcmin + timeoffset) * tdc_bc_conv;
105  mdt_hit->setDriftTime(newtime);
106  double r = m_rtRel->radius(newtime);
107  double dr = getDefaultResolution(r); // get H8 resolution
108  mdt_hit->setDriftRadius(r, dr);
109  }
110  m_fitter->fit(*seg);
111 
112  timeShift = -(timeoffset - tdcmin) * tdc_bc_conv;
113  return timeShift;
114  }

◆ GTFit2()

double MuonCalib::GlobalTimeFitter::GTFit2 ( MuonCalibSegment seg)

Definition at line 116 of file GlobalTimeFitter.cxx.

116  {
117  double timeShift = 999.;
118  for (const MuonCalibSegment::MdtHitPtr& mdt_hit : seg->mdtHOT()) {
119  mdt_hit->setDriftTime(400.);
120  double t = mdt_hit->driftTime();
121  double r = m_rtRel->radius(t);
122  double dr = mdt_hit->sigmaDriftRadius();
123  mdt_hit->setDriftRadius(r, dr);
124 
125  timeShift = t;
126  }
127 
128  return timeShift;
129  }

◆ setRtRelation()

void MuonCalib::GlobalTimeFitter::setRtRelation ( const IRtRelation rtRel)
inline

Definition at line 33 of file GlobalTimeFitter.h.

33 { m_rtRel = rtRel; };

Member Data Documentation

◆ m_fitter

const IMdtSegmentFitter* MuonCalib::GlobalTimeFitter::m_fitter {nullptr}
private

Definition at line 46 of file GlobalTimeFitter.h.

◆ m_rtRel

const IRtRelation* MuonCalib::GlobalTimeFitter::m_rtRel {nullptr}
private

Definition at line 47 of file GlobalTimeFitter.h.


The documentation for this class was generated from the following files:
MuonCalib::IMdtSegmentFitter::fit
virtual bool fit(MuonCalibSegment &seg) const =0
fit using all hits
beamspotman.r
def r
Definition: beamspotman.py:676
LArSamples::FitterData::fitter
const ShapeFitter * fitter
Definition: ShapeFitter.cxx:23
TBH6ByteStream-Monitor-EventStorage.tdcmin
tdcmin
Definition: TBH6ByteStream-Monitor-EventStorage.py:143
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
MuonCalib::CalibFunc::ParVec
std::vector< double > ParVec
Definition: CalibFunc.h:36
MuonCalib::GlobalTimeFitter::getDefaultResolution
double getDefaultResolution(double r)
Definition: GlobalTimeFitter.h:35
MuonCalib::GlobalTimeFitter::m_fitter
const IMdtSegmentFitter * m_fitter
Definition: GlobalTimeFitter.h:46
selection
std::string selection
Definition: fbtTestBasics.cxx:73
MuonCalib::MdtCalibrationFactory::createRtRelation
static IRtRelation * createRtRelation(const std::string &name, const ParVec &pars)
Definition: MdtCalibrationFactory.cxx:71
MuonCalib::GlobalTimeFitter::m_rtRel
const IRtRelation * m_rtRel
Definition: GlobalTimeFitter.h:47
MuonCalib::IRtRelation::radius
virtual double radius(double t) const =0
returns drift radius for a given time
MuonCalib::MuonCalibSegment::MdtHitPtr
std::shared_ptr< MdtCalibHitBase > MdtHitPtr
typedef for a collection of MdtCalibHitBase s
Definition: MuonCalibSegment.h:44