HighLAND
ToFCorrection.cxx
1 #include "ToFCorrection.hxx"
2 #include "VersioningUtils.hxx"
3 #include "ND280AnalysisUtils.hxx"
4 #include "TRandom3.h"
5 #include "Parameters.hxx"
6 //#define DEBUG
7 
8 
9 //********************************************************************
10 ToFCorrection::ToFCorrection() : CorrectionBase(){
11  //********************************************************************
12  _RandomGenerator = NULL;
13 
14  InitializeRandomGenerator();
15 
16  // Read various parameters
17  _P0D_FGD1_ToF_MC_TrueFwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_MC_TrueFwd_Track_Mean");
18  _P0D_FGD1_ToF_MC_TrueFwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_MC_TrueFwd_Track_Sigma");
19  _P0D_FGD1_ToF_MC_TrueBwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_MC_TrueBwd_Track_Mean");
20  _P0D_FGD1_ToF_MC_TrueBwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_MC_TrueBwd_Track_Sigma");
21  _P0D_FGD1_ToF_Sand_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_Sand_Track_Mean");
22  _P0D_FGD1_ToF_Sand_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.P0D_FGD1_Sand_Track_Sigma");
23 
24  _FGD1_FGD2_ToF_MC_TrueFwd_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_MC_TrueFwd_Mean");
25  _FGD1_FGD2_ToF_MC_TrueFwd_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_MC_TrueFwd_Sigma");
26  _FGD1_FGD2_ToF_MC_TrueBwd_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_MC_TrueBwd_Mean");
27  _FGD1_FGD2_ToF_MC_TrueBwd_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_MC_TrueBwd_Sigma");
28  _FGD1_FGD2_ToF_Sand_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_Sand_Mean");
29  _FGD1_FGD2_ToF_Sand_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.FGD1_FGD2_Sand_Sigma");
30 
31  _ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueFwd_Shower_Mean");
32  _ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueFwd_Shower_Sigma");
33  _ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueBwd_Shower_Mean");
34  _ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueBwd_Shower_Sigma");
35  _ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueFwd_Track_Mean");
36  _ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueFwd_Track_Sigma");
37  _ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueBwd_Track_Mean");
38  _ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAStartFgd_TrueBwd_Track_Sigma");
39  _ECal_FGD1_ToF_Sand_LAStartFgd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_LAStartFgd_Shower_Mean");
40  _ECal_FGD1_ToF_Sand_LAStartFgd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_LAStartFgd_Shower_Sigma");
41  _ECal_FGD1_ToF_Sand_LAStartFgd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_LAStartFgd_Track_Mean");
42  _ECal_FGD1_ToF_Sand_LAStartFgd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_LAStartFgd_Track_Sigma");
43 
44  _ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueFwd_Shower_Mean");
45  _ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueFwd_Shower_Sigma");
46  _ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueBwd_Shower_Mean");
47  _ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueBwd_Shower_Sigma");
48  _ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueFwd_Track_Mean");
49  _ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueFwd_Track_Sigma");
50  _ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueBwd_Track_Mean");
51  _ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_LAEndFgd_TrueBwd_Track_Sigma");
52 
53  _ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueFwd_Shower_Mean");
54  _ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueFwd_Shower_Sigma");
55  _ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueBwd_Shower_Mean");
56  _ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueBwd_Shower_Sigma");
57  _ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueFwd_Track_Mean");
58  _ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueFwd_Track_Sigma");
59  _ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueBwd_Track_Mean");
60  _ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAStartFgd_TrueBwd_Track_Sigma");
61  _ECal_FGD1_ToF_Sand_HAStartFgd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAStartFgd_Shower_Mean");
62  _ECal_FGD1_ToF_Sand_HAStartFgd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAStartFgd_Shower_Sigma");
63  _ECal_FGD1_ToF_Sand_HAStartFgd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAStartFgd_Track_Mean");
64  _ECal_FGD1_ToF_Sand_HAStartFgd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAStartFgd_Track_Sigma");
65 
66  _ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueFwd_Shower_Mean");
67  _ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueFwd_Shower_Sigma");
68  _ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueBwd_Shower_Mean");
69  _ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueBwd_Shower_Sigma");
70  _ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueFwd_Track_Mean");
71  _ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueFwd_Track_Sigma");
72  _ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueBwd_Track_Mean");
73  _ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_MC_HAEndFgd_TrueBwd_Track_Sigma");
74  _ECal_FGD1_ToF_Sand_HAEndFgd_Shower_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAEndFgd_Shower_Mean");
75  _ECal_FGD1_ToF_Sand_HAEndFgd_Shower_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAEndFgd_Shower_Sigma");
76  _ECal_FGD1_ToF_Sand_HAEndFgd_Track_Mean = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAEndFgd_Track_Mean");
77  _ECal_FGD1_ToF_Sand_HAEndFgd_Track_Sigma = (Float_t)ND::params().GetParameterD("highlandCorrections.ToF.ECal_FGD1_Sand_HAEndFgd_Track_Sigma");
78 
79  _apply_ToF_based_Flip = (bool)ND::params().GetParameterI("psycheSystematics.ToF.ApplyToFFlip");
80 
81 }
82 
83 //********************************************************************
84 ToFCorrection::~ToFCorrection() {
85  //********************************************************************
86  if (_RandomGenerator)
87  delete _RandomGenerator;
88 }
89 
90 //********************************************************************
91 void ToFCorrection::InitializeRandomGenerator(){
92  //********************************************************************
93  if (!_RandomGenerator){
94  _RandomGenerator = new TRandom3();
95  SetRandomSeed(ND::params().GetParameterI("highlandCorrections.ToF.RandomSeed"));
96 
97  }
98 }
99 
100 //********************************************************************
102  //********************************************************************
103  if (_RandomGenerator)
104  return _RandomGenerator->GetSeed();
105  return 0XDEADBEEF;
106 }
107 
108 //********************************************************************
110  //********************************************************************
111  if (_RandomGenerator)
112  _RandomGenerator->SetSeed(seed);
113 }
114 
115 
116 //********************************************************************
118  //********************************************************************
119 
120  AnaSpill& spill = *static_cast<AnaSpill*>(&spillBB);
121 
122  // Data or MC
123  bool isMC = spill.GetIsMC();
124  bool isSandMC = spill.GetIsSandMC();
125 
126  if (!isMC && !isSandMC) return;
127 
128  for (UInt_t i = 0; i < spill.Bunches.size(); i++) {
129  AnaBunch* bunch = static_cast<AnaBunch*>(spill.Bunches[i]);
130  for (UInt_t j = 0; j < bunch->Particles.size(); j++) {
131  AnaTrack* track = static_cast<AnaTrack*>(bunch->Particles[j]);
132  if (!track) continue;
133 
135 
136  if (topo == ToFSenseCorrector::kToFInvalid) continue;
137 
138  ApplyToFSmear(*track, topo, isSandMC);
139 
140  if (!_apply_ToF_based_Flip) continue;
141 
142  if (_tofCorrector.CheckNeedApplyToFBasedFlip(*track, topo)) ToFSenseCorrector::FlipTrack(*track);
143 
144  }
145 
146  }
147 
148 }
149 
150 //********************************************************************
151 void ToFCorrection::ApplyToFSmear(AnaTrack& track, ToFSenseCorrector::ToFTopology topo, bool IsSandMC) const {
152  //********************************************************************
153 
154  // should have a corresponding true track
155  AnaTrueParticleB* trueTrack = track.GetTrueParticle();
156  if(!trueTrack) return;
157 
158  // apply the smearing
159  if (!IsSandMC){
160 
161  // fwd or bwd track
162  bool TrueIsFwd = ToFSenseCorrector::IsForward(*trueTrack);
163 
164  //FGD1-FGD2
165  if(topo == ToFSenseCorrector::kToFTopo_FGD1FGD2)
166  track.ToF.FGD1_FGD2 += TrueIsFwd ? _RandomGenerator->Gaus(_FGD1_FGD2_ToF_MC_TrueFwd_Mean,
167  TMath::Sqrt(_FGD1_FGD2_ToF_MC_TrueFwd_Sigma)):
168  _RandomGenerator->Gaus(_FGD1_FGD2_ToF_MC_TrueBwd_Mean, TMath::Sqrt(_FGD1_FGD2_ToF_MC_TrueBwd_Sigma));
169 
170  // P0D-FGD1 -> only apply smearing to trak like cases
171  if(topo == ToFSenseCorrector::kToFTopo_FGD1P0D_Track)
172  track.ToF.P0D_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_P0D_FGD1_ToF_MC_TrueFwd_Track_Mean,
173  TMath::Sqrt(_P0D_FGD1_ToF_MC_TrueFwd_Track_Sigma) ):
174  _RandomGenerator->Gaus(_P0D_FGD1_ToF_MC_TrueBwd_Track_Mean, TMath::Sqrt(_P0D_FGD1_ToF_MC_TrueBwd_Track_Sigma));
175 
176  // ECal-FGD1
177  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track)
178  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Track_Mean,
179  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Track_Sigma)):
180  _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Track_Mean,
181  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Track_Sigma));
182  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower)
183  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Shower_Mean,
184  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAStartFgd_TrueFwd_Shower_Sigma)):
185  _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Shower_Mean,
186  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAStartFgd_TrueBwd_Shower_Sigma));
187  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Track)
188  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Track_Mean,
189  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Track_Sigma)) :
190  _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Track_Mean ,
191  TMath::Sqrt(_ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Track_Sigma));
192  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAEndFgd_Shower)
193  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Shower_Mean, TMath::Sqrt(_ECal_FGD1_ToF_MC_LAEndFgd_TrueFwd_Shower_Sigma)) : _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_MC_LAEndFgd_TrueBwd_Shower_Sigma));
194  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track)
195  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Track_Mean, TMath::Sqrt(_ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Track_Sigma)) : _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Track_Mean , TMath::Sqrt(_ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Track_Sigma));
196  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower)
197  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Shower_Mean, TMath::Sqrt(_ECal_FGD1_ToF_MC_HAStartFgd_TrueFwd_Shower_Sigma)) : _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_MC_HAStartFgd_TrueBwd_Shower_Sigma));
198  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track)
199  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Track_Mean, TMath::Sqrt(_ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Track_Sigma)) : _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Track_Mean , TMath::Sqrt(_ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Track_Sigma));
200  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower)
201  track.ToF.ECal_FGD1 += TrueIsFwd ? _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Shower_Mean, TMath::Sqrt(_ECal_FGD1_ToF_MC_HAEndFgd_TrueFwd_Shower_Sigma)) : _RandomGenerator->Gaus(_ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_MC_HAEndFgd_TrueBwd_Shower_Sigma));
202 
203  }
204  else {
205 
206  //FGD1-FGD2
207  if(topo == ToFSenseCorrector::kToFTopo_FGD1FGD2)
208  track.ToF.FGD1_FGD2 += _RandomGenerator->Gaus(_FGD1_FGD2_ToF_Sand_Mean , TMath::Sqrt(_FGD1_FGD2_ToF_Sand_Sigma));
209 
210  // P0D-FGD1 -> only apply smearing to trak like cases
211  if(topo == ToFSenseCorrector::kToFTopo_FGD1P0D_Track)
212  track.ToF.P0D_FGD1 += _RandomGenerator->Gaus(_P0D_FGD1_ToF_Sand_Track_Mean , TMath::Sqrt(_P0D_FGD1_ToF_Sand_Track_Sigma) );
213 
214  // ECal-FGD1 -> only apply smearing for cases in which we have enough statistic to compute the correction factors
215  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Track)
216  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_LAStartFgd_Track_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_LAStartFgd_Track_Sigma));
217  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_LAStartFgd_Shower)
218  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_LAStartFgd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_LAStartFgd_Shower_Sigma));
219  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Track)
220  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_HAStartFgd_Track_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_HAStartFgd_Track_Sigma));
221  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAStartFgd_Shower)
222  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_HAStartFgd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_HAStartFgd_Shower_Sigma));
223  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Track)
224  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_HAEndFgd_Track_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_HAEndFgd_Track_Sigma));
225  if(topo == ToFSenseCorrector::kToFTopo_FGD1ECAL_HAEndFgd_Shower)
226  track.ToF.ECal_FGD1 += _RandomGenerator->Gaus(_ECal_FGD1_ToF_Sand_HAEndFgd_Shower_Mean , TMath::Sqrt(_ECal_FGD1_ToF_Sand_HAEndFgd_Shower_Sigma));
227 
228  }
229 
230 
231 }
void SetRandomSeed(UInt_t seed)
And change the seed.
Representation of a global track.
static bool IsForward(const AnaTrackB &track)
Check whether a track is forward going.
std::vector< AnaBunchC * > Bunches
The reconstructed objects, split into timing bunches.
void Apply(AnaSpillC &spill)
Apply the correction to all relevant tracks.
AnaToF ToF
Times of flight between pairs of detectors.
All corrections should be registered with the CorrectionManager.
static void FlipTrack(AnaTrackB &track)
Flip a track.
Representation of a true Monte Carlo trajectory/particle.
static ToFTopology GetToFTopology(const AnaTrackB &track)
bool GetIsMC() const
Return whether this spill is from Monte Carlo or not.
UInt_t GetRandomSeed() const
The only thing we allow for the generator is to get the seed.
bool GetIsSandMC() const
Return whether this spill is from Sand Monte Carlo or not.
std::vector< AnaParticleB * > Particles
AnaTrueParticleB * GetTrueParticle() const
Return a casted version of the AnaTrueObject associated.