Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Static 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)
 
void setRtRelation (const IRtRelation *rtRel)
 
double getDefaultResolution (double r)
 
bool fit (MuonCalibSegment &seg) const
 
bool fit (MuonCalibSegment &seg, const MuonCalib::IMdtSegmentFitter::HitSelection &selection) const
 

Static Public Member Functions

static std::unique_ptr< IRtRelationgetDefaultRtRelation ()
 

Private Attributes

const IMdtSegmentFitterm_fitter {nullptr}
 
const IRtRelationm_rtRel {nullptr}
 

Detailed Description

Provides the operator to fit ....

Definition at line 23 of file GlobalTimeFitter.h.

Constructor & Destructor Documentation

◆ GlobalTimeFitter() [1/2]

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

Definition at line 25 of file GlobalTimeFitter.h.

25 : m_fitter(fitter) {}

◆ GlobalTimeFitter() [2/2]

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

Definition at line 26 of file GlobalTimeFitter.h.

26 : 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 41 of file GlobalTimeFitter.h.

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

◆ fit() [2/2]

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

Definition at line 42 of file GlobalTimeFitter.h.

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

◆ getDefaultResolution()

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

Definition at line 36 of file GlobalTimeFitter.h.

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

◆ getDefaultRtRelation()

std::unique_ptr< IRtRelation > MuonCalib::GlobalTimeFitter::getDefaultRtRelation ( )
static

Definition at line 134 of file GlobalTimeFitter.cxx.

134  {
135  static const MuonCalib::CalibFunc::ParVec rtPars{
136 
137  -50., // t_Start
138  8., // t_binSize
139 
140  0.2, // r(-50)
141  0.2, // r(-50+8)
142  0.2, // ...
143  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,
144  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,
145  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,
146  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,
147  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,
148  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,
149  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,
150  14.458, 14.516, 14.8312, 14.85, 14.86, 14.87
151 
152  };
153  return std::make_unique<RtRelationLookUp>(rtPars);
154  }

◆ GTFit()

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

Definition at line 18 of file GlobalTimeFitter.cxx.

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

◆ GTFit2()

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

Definition at line 119 of file GlobalTimeFitter.cxx.

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

◆ setRtRelation()

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

Definition at line 34 of file GlobalTimeFitter.h.

34 { m_rtRel = rtRel; };

Member Data Documentation

◆ m_fitter

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

Definition at line 47 of file GlobalTimeFitter.h.

◆ m_rtRel

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

Definition at line 48 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::GlobalTimeFitter::getDefaultResolution
double getDefaultResolution(double r)
Definition: GlobalTimeFitter.h:36
MuonCalib::GlobalTimeFitter::m_fitter
const IMdtSegmentFitter * m_fitter
Definition: GlobalTimeFitter.h:47
MuonCalib::CalibFunc::ParVec
std::vector< double > ParVec
Definition: CalibFunc.h:35
MuonCalib::GlobalTimeFitter::m_rtRel
const IRtRelation * m_rtRel
Definition: GlobalTimeFitter.h:48
selection
const std::string selection
Definition: fbtTestBasics.cxx:74
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