FitModels.h
Go to the documentation of this file.
1 #ifndef _FitModels_h_
2 #define _FitModels_h_
3 
4 #include <iostream>
5 #include <cmath>
6 #include <vector>
7 #include <limits>
8 
9 #include <Minuit2/FCNBase.h>
10 
11 #include <utl/CoordinateSystemPtr.h>
12 #include <utl/Vector.h>
13 #include <utl/Point.h>
14 #include <utl/Math.h>
15 #include <utl/PhysicalFunctions.h>
16 #include <utl/Vector.h>
17 #include <fwk/LocalCoordinateSystem.h>
18 
19 namespace RdGlobalFit {
20 
21 struct FitConfig {
22  bool fitTwoDLDF;
24  bool fixCore;
31  std::string useCS;
33  fitTwoDLDF(false),
34  fitArrivalTime(false),
35  fixCore(false),
37  fitShowerMaxAsRMax(false),
38  fitShowerMaxAsXMAX(false),
39  fitShowerMaxAsDXMax(false),
40  SaveCoreContourData(false),
41  printMinuitScans(false),
42  useCS("MAN")
43  {
44  }
45 };
46 
48  double A_scale;
49  double C3;
50  double C4;
51  double C1theta_0_10;
52  double C2theta_0_10;
53  double C1theta_10_20;
54  double C2theta_10_20;
55  double C1theta_20_30;
56  double C2theta_20_30;
57  double C1theta_30_40;
58  double C2theta_30_40;
59  double C1theta_40_50;
60  double C2theta_40_50;
61  double C1theta_50_55;
62  double C2theta_50_55;
63  double A_scale_50_55;
64  double C1theta_55;
65  double C2theta_55;
66  double A_scale_55;
68  A_scale(0.),
69  C3(0.),
70  C4(0.),
71  C1theta_0_10(0.),
72  C2theta_0_10(0.),
73  C1theta_10_20(0.),
74  C2theta_10_20(0.),
75  C1theta_20_30(0.),
76  C2theta_20_30(0.),
77  C1theta_30_40(0.),
78  C2theta_30_40(0.),
79  C1theta_40_50(0.),
80  C2theta_40_50(0.),
81  C1theta_50_55(0.),
82  C2theta_50_55(0.),
83  A_scale_50_55(0.),
84  C1theta_55(0.),
85  C2theta_55(0.),
86  A_scale_55(0.)
87  {
88  }
89 };
90 
91 struct calcLDFConsts {
92  double A_scale;
93  double C0;
94  double C3;
95  double C4;
96  double C1theta;
97  double C2theta;
99  A_scale(0.),
100  C0(0.),
101  C3(0.),
102  C4(0.),
103  C1theta(0.),
104  C2theta(0.)
105  {
106  }
107 };
108 
112  double x_vxB;
113  double y_vxB;
114  double z_vxB;
117  double signalTime;
122 
124  stationId(0),
125  stationPosition(),
126  x_vxB(0),
127  y_vxB(0),
128  z_vxB(0),
129  energyFluence(0),
131  signalTime(0),
132  signalTimeError(0),
133  fittedProjTime(0),
136  {
137  }
138 };
139 
140 struct FitData {
141  bool isFix;
142  bool hasLimits;
143  std::string startValueFrom;
144  double startValue;
145  double startError;
146  double lowLimit;
147  double highLimit;
148 
150  isFix(false),
151  hasLimits(false),
152  startValueFrom("MAN"),
153  startValue(0),
154  startError(0),
155  lowLimit(0),
156  highLimit(0)
157  {
158  }
159 
160  FitData(bool isfix, bool haslimits, double startvalue, double starterror, double lowlimit,
161  double highlimit) :
162  isFix(isfix),
163  hasLimits(haslimits),
164  startValue(startvalue),
165  startError(starterror),
166  lowLimit(lowlimit),
167  highLimit(highlimit)
168  {
169  }
170 };
171 
189  bool fitSucess;
190 
192  Aplus(),
193  core_x(),
194  core_y(),
195  core_z(),
196  sigmaPlus(),
197  C2Theta(),
198  C1Theta(),
199  CTheta(),
200  C1(),
201  C2(),
202  gamma(),
203  b(),
204  t0(),
207  showerMax(),
208  fitSucess(false)
209  {
210  }
211 };
212 
213 struct EventFitData {
215 
217  fLocalCS()
218  {
219  }
220 
221 };
222 
223 class RdGlobalFitMinimizationCriterion : public ROOT::Minuit2::FCNBase {
224 
225  public:
226  RdGlobalFitMinimizationCriterion(FitConfig& fitconfig, const EventFitData eventData,
227  std::vector<StationFitData>& stationData,
228  const utl::Vector magneticFieldVector,
229  const LDFConstsTable ldfConstsTable,
231 
232  double operator()(const std::vector<double>& pars) const;
233 
234  double Up() const
235  {
236  return fTheErrorDef;
237  }
238 
239  void SetErrorDef(double def)
240  {
241  fTheErrorDef = def;
242  }
243 
244  void setVerbose(bool verbose)
245  {
246  fVerbose = verbose;
247  }
248 
250  {
251  return fArrivalTimeLikelihood;
252  }
253 
255  {
256  return fTwoDLDFLikelyhood;
257  }
258 
259  std::vector<StationFitData>& getStationData()
260  {
261  return fStationData;
262  }
263 
264  protected:
265 
266  private:
267  void calcShowerCoordinates(const double arrivalDirection_phi, const double arrivalDirection_theta,
268  const double core_x, const double core_y, const double core_z,
269  utl::Vector magneticFieldVector) const;
270 
271  double calcTimeMinCrit(const double gamma, const double DXmax, const double b, const double t0,
272  const double x_vxB, const double y_vxvxB, const double z_vxvxB,
273  const double signalTime, const double signalTimeError,
274  std::vector<StationFitData>::iterator sIt) const;
275 
276  double calc2dLDFMinCrit(const double Aplus, const double sigma_max, const double DXmax,
277  const double C2Theta, const double C1Theta, const double CTheta,
278  const double C1, const double C2, const double x_vxB,
279  const double y_vxvxB, const double signal, const double signalError,
280  std::vector<StationFitData>::iterator sIt) const;
281 
282  void calc2dLDFConstants(double zenith) const;
283 
284  // These functions are needed, if one wants to fit the shower maximum "directly" in the global fit.
285  // Its functioning is not yet validated. May be removed at some point.
286  double sigmaPlusFromDXmax(double DXmax, double a1, double a2, double a3, double a4) const;
287  double gammaFromRmax(double DXmax, double alpha_1, double alpha_2, double alpha_3,
288  double c) const;
289 
291 
293  std::vector<StationFitData>& fStationData;
295  double fTheErrorDef;
296  bool fVerbose;
298  calcLDFConsts& fcalcLDFConsts;
299  mutable double fTwoDLDFLikelyhood;
300  mutable double fArrivalTimeLikelihood;
301 };
302 
303 }
304 
305 #endif
std::string useCS
Definition: FitModels.h:31
Point object.
Definition: Point.h:32
double calc2dLDFMinCrit(const double Aplus, const double sigma_max, const double DXmax, const double C2Theta, const double C1Theta, const double CTheta, const double C1, const double C2, const double x_vxB, const double y_vxvxB, const double signal, const double signalError, std::vector< StationFitData >::iterator sIt) const
Definition: FitModels.cc:174
void calc2dLDFConstants(double zenith) const
Definition: FitModels.cc:273
RdGlobalFitMinimizationCriterion(FitConfig &fitconfig, const EventFitData eventData, std::vector< StationFitData > &stationData, const utl::Vector magneticFieldVector, const LDFConstsTable ldfConstsTable, calcLDFConsts &calcLDFConsts)
Definition: FitModels.cc:28
double gammaFromRmax(double DXmax, double alpha_1, double alpha_2, double alpha_3, double c) const
Definition: FitModels.cc:163
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
double sigmaPlusFromDXmax(double DXmax, double a1, double a2, double a3, double a4) const
Definition: FitModels.cc:126
FitData(bool isfix, bool haslimits, double startvalue, double starterror, double lowlimit, double highlimit)
Definition: FitModels.h:160
utl::CoordinateSystemPtr fLocalCS
Definition: FitModels.h:214
double operator()(const std::vector< double > &pars) const
Definition: FitModels.cc:76
std::string startValueFrom
Definition: FitModels.h:143
double calcTimeMinCrit(const double gamma, const double DXmax, const double b, const double t0, const double x_vxB, const double y_vxvxB, const double z_vxvxB, const double signalTime, const double signalTimeError, std::vector< StationFitData >::iterator sIt) const
Definition: FitModels.cc:233
void calcShowerCoordinates(const double arrivalDirection_phi, const double arrivalDirection_theta, const double core_x, const double core_y, const double core_z, utl::Vector magneticFieldVector) const
Definition: FitModels.cc:43
std::vector< StationFitData > & getStationData()
Definition: FitModels.h:259
Vector object.
Definition: Vector.h:30
bool fitGammaAndSigmaPlusIndependently
Definition: FitModels.h:25
std::vector< StationFitData > & fStationData
Definition: FitModels.h:293

, generated on Tue Sep 26 2023.