UnivFitterKG.h
Go to the documentation of this file.
1 #ifndef _UnivFitterKG_UnivFitterKG_h_
2 #define _UnivFitterKG_UnivFitterKG_h_
3 
4 #include <tls/UnivParam.h>
5 #include <tls/UnivParamTime.h>
6 #include <tls/Atmosphere.h>
7 #include <tls/UnivCalibConstants.h>
8 
9 #include "Minuit2/FCNBase.h"
10 #include "Minuit2/MnUserParameters.h"
11 #include "Minuit2/FunctionMinimum.h"
12 
13 #include <utl/Point.h>
14 #include <utl/Vector.h>
15 #include <utl/TimeStamp.h>
16 
17 #include <tls/UnivTimeKG.h>
18 
19 #include <FitterUtil.h>
20 
21 
22 namespace UnivFitterKG {
23 
24  enum InitMode {
25  eMC,
26  eSD,
28  };
29 
30 
31  struct fitConstraint {
32  double mean = 0;
33  double sigma = 0;
34  };
35 
36 
37  struct StationFitData {
38  int stationId = 0;
39  double totalSignal = 0;
40  double traceSum = 0;
41  double Smaxbin = 0;
42  double recoveredSignal = 0;
44  bool isSaturated = false;
45  bool useUnsaturatedTrace = false;
46 
47  double muonSignal = 0;
48  double muonSignalError = 0;
49  std::vector<double> muonTimes; // time referred to MC core
50  bool useForMuonTimeFit = false;
51 
52  std::vector<double> trace;
54  int firstFitBin = 0;
55  int lastFitBin = 0;
56 
58  int startBin = 0;
59  int stopBin = 0;
60 
61  double t10 = 0;
62  double t50 = 0;
63  double t90 = 0;
64 
66 
67  bool isDense = false;
68  double denseRho = 0;
69  double densePsi = 0;
70 
71  bool useForLDFFit = false;
72  bool useForShapeFit = false;
73  bool useForStartTimeFit = false;
74 
75  // the fields below are set mutable so they can be modified from within FitFunction
76  // the values are set after the last step of the minimization
77  mutable double signalUncertainty = 0;
78 
79  mutable double LDFLikelihood = 0;
80  mutable double ShapeLikelihood = 0;
81  mutable double StartTimeLikelihood = 0;
82 
83  // atmosphere integrated parallel to the shower axis (see GAP 2011-087)
84  mutable double DX_diffusive = 0;
85  // atmosphere integrated along the straight line that connects the position of the shower maximum and the station
86  mutable double DX_rectilinear = 0;
87  // atmosphere integrated along the straight line that connects the position of the muonic shower maximum and the station
88  mutable double DX_mu_rectilinear = 0;
89  mutable double height = 0;
90  mutable double planeFrontTime = 0;
91  mutable double distToFirstInteraction = 0;
92  mutable std::vector<double> firstParticleTimes; // referred to plane front
93  mutable std::vector<double> compSignals; // estimated component signals
94  };
95 
96 
97  struct Parameters {
98  bool valid = false;
99 
100  double xmax = 0;
101  double xmaxUnc = 0;
102 
103  double xmaxMu = 0;
104  double xmaxMuUnc = 0;
105 
106  double x0 = 0;
107  double x0Unc = 0;
108 
109  double hfi = 0;
110 
111  double showersize = 0;
112  double showersizeUnc = 0;
113 
114  double energy = 0;
115  double energyUnc = 0;
116 
117  double Nmu = 0;
118  double NmuUnc = 0;
119 
120  double TimeModelOffset = 0;
121  double TimeModelOffsetUnc = 0;
122 
124  double axisUncTheta = 0;
125  double axisUncPhi = 0;
126 
128  double coreUncX = 0;
129  double coreUncY = 0;
130 
131  utl::CoordinateSystemPtr coreCS; // perpendicular to the ground, x-axis (E), y-axis (N)
132  utl::CoordinateSystemPtr showerCS; // aligned with the shower, x-axis (early)
133 
135  };
136 
137 
138  enum fitMode {
142  };
143 
144 
145  struct minScan1D {
146  std::vector<double> x;
147  std::vector<double> f;
148  std::vector<double> fLDF;
149  std::vector<double> fShape;
150  std::vector<double> fStartTime;
151  };
152 
153 
154  struct minScan2D {
155  std::vector<double> x;
156  std::vector<double> y;
157  std::vector<double> f; // one-dimensional to make it work with swig, has to be reshaped to two dimensions
158  };
159 
160 
161  class Fitter;
162 
163 
164  struct FitFunction : public ROOT::Minuit2::FCNBase {
165  FitFunction(const Fitter& theEf);
166  double Up() const;
167  double operator()(const std::vector<double>& pars) const;
168 
169  const Fitter& ef;
170  };
171 
172 
173  struct WCDFitFunction {
174  WCDFitFunction(const Fitter& theEf);
175  double operator()(const std::vector<double>& pars) const;
176 
177  const Fitter& ef;
178  };
179 
180 
182  AMIGAFitFunction(const Fitter& theEf);
183  double operator()(const std::vector<double>& pars) const;
184  };
185 
186 
188  double operator()(const std::vector<double>& pars) const;
189  };
190 
191 
192  class Fitter {
193  public:
194  minScan1D scanMinimum1D(const int parIndex, const double val, const double delta, const int nSteps);
195  minScan2D scanMinimum2D(const int parIndexx, const int parIndexy, const double valx, const double valy,
196  const double deltaX, const double deltaY, const int nSteps);
197  void writeMinScan();
198 
199  Fitter();
200  ~Fitter();
201  void reset();
202  void initTimeModel(const unsigned int version);
203  void clearTimeModel();
204  void setRecType(const unsigned int type);
205 
206  void addStationFitData(const StationFitData& sdata);
207  StationFitData& getStationFitData(const int stationId);
208  bool isShapeFitCandidate(const int stationId);
209  bool isLDFFitCandidate(const int stationId);
210  bool isStartTimeFitCandidate(const int stationId);
211  bool isCandidateStation(const int stationId);
212 
213  void setupMinuit(ROOT::Minuit2::MnUserParameters& upar);
214  void init();
215  bool run();
216  bool isFitOk(const ROOT::Minuit2::FunctionMinimum& min);
217  void printResults();
218 
219  static double getAngle(const utl::Vector& v1, const utl::Vector& v2) { return Angle(v1, v2); }
220 
221  std::unique_ptr<UnivParamNS::UnivParam> fUnivParam;
222  std::unique_ptr<UnivParamTimeNS::UnivParamTime> fUnivParamTime;
223  std::unique_ptr<AtmosphereNS::Atmosphere> fAtmosphere;
224  std::unique_ptr<UnivCalibConstantsNS::UnivCalibConstants> fUnivCalibConstants;
225  // mutable: not nice, but necessary to access timeModels from within the FitFunction
226  mutable std::vector<UnivTimeKG::TimeModel*> timeModels;
227 
232 
233  std::vector<StationFitData> fitData;
234  std::vector<double> fFittedMinuitParams;
235  std::unique_ptr<FitFunction> fFunc;
236  std::unique_ptr<WCDFitFunction> fWCDFunc;
237  //std::unique_ptr<AMIGAFitFunction> fAMIGAFunc;
238  //std::unique_ptr<ASCIIFitFunction> fASCIIFunc;
239 
241  int atmModel;
242  std::string atmType;
245  double fDensity;
247 
250 
256 
262 
269 
274 
275  double fMigradTol;
278  double fEnergyScale;
281 
286 
294 
295  bool isMCEvent;
296 
297  bool doLDFFit;
306 
307  bool coreFixed;
308  bool axisFixed;
309  bool xmaxFixed;
311  bool NmuFixed;
315 
321 
331 
332  mutable double fLDFLikelihood;
333  mutable double fShapeLikelihood;
334  mutable double fStartTimeLikelihood;
335 
339  };
340 
341 }
342 
343 
344 #endif
std::vector< double > fFittedMinuitParams
Definition: UnivFitterKG.h:234
void initTimeModel(const unsigned int version)
void setupMinuit(ROOT::Minuit2::MnUserParameters &upar)
fitConstraint fNmuConstraint
Definition: UnivFitterKG.h:329
Point object.
Definition: Point.h:32
double Angle(const double theta1, const double phi1, const double theta2, const double phi2)
utl::CoordinateSystemPtr fSiteCS
Definition: UnivFitterKG.h:228
fitConstraint fXmaxMuConstraint
Definition: UnivFitterKG.h:328
std::vector< double > f
Definition: UnivFitterKG.h:157
std::vector< double > f
Definition: UnivFitterKG.h:147
utl::CoordinateSystemPtr showerCS
Definition: UnivFitterKG.h:132
void addStationFitData(const StationFitData &sdata)
double operator()(const std::vector< double > &pars) const
std::vector< double > trace
Definition: UnivFitterKG.h:52
AMIGAFitFunction(const Fitter &theEf)
std::vector< UnivTimeKG::TimeModel * > timeModels
Definition: UnivFitterKG.h:226
std::vector< double > y
Definition: UnivFitterKG.h:156
std::unique_ptr< UnivParamTimeNS::UnivParamTime > fUnivParamTime
Definition: UnivFitterKG.h:222
const double tracebinning
Definition: FitterUtil.h:11
std::unique_ptr< FitFunction > fFunc
Definition: UnivFitterKG.h:235
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
utl::Point fBarycenter
Definition: UnivFitterKG.h:231
fitConstraint fXmaxConstraint
Definition: UnivFitterKG.h:327
minScan2D scanMinimum2D(const int parIndexx, const int parIndexy, const double valx, const double valy, const double deltaX, const double deltaY, const int nSteps)
double operator()(const std::vector< double > &pars) const
boost::shared_ptr< const CoordinateTransformer > CoordinateSystemPtr
Shared pointer for coordinate systems.
utl::TimeStamp coretime
Definition: UnivFitterKG.h:134
double operator()(const std::vector< double > &pars) const
void setRecType(const unsigned int type)
std::unique_ptr< WCDFitFunction > fWCDFunc
Definition: UnivFitterKG.h:236
minScan1D scanMinimum1D(const int parIndex, const double val, const double delta, const int nSteps)
std::vector< double > x
Definition: UnivFitterKG.h:155
std::vector< double > muonTimes
Definition: UnivFitterKG.h:49
fitConstraint fCoreTimeConstraint
Definition: UnivFitterKG.h:323
double fMaxBinContentForSatShapeFit
Definition: UnivFitterKG.h:261
utl::CoordinateSystemPtr coreCS
Definition: UnivFitterKG.h:131
WCDFitFunction(const Fitter &theEf)
FitFunction(const Fitter &theEf)
bool isLDFFitCandidate(const int stationId)
double fMinBinContentForSatShapeFit
Definition: UnivFitterKG.h:260
StationFitData & getStationFitData(const int stationId)
std::vector< double > firstParticleTimes
Definition: UnivFitterKG.h:92
bool isCandidateStation(const int stationId)
double operator()(const std::vector< double > &pars) const
fitConstraint fCoreConstraint
Definition: UnivFitterKG.h:322
std::unique_ptr< UnivParamNS::UnivParam > fUnivParam
Definition: UnivFitterKG.h:221
std::unique_ptr< UnivCalibConstantsNS::UnivCalibConstants > fUnivCalibConstants
Definition: UnivFitterKG.h:224
std::vector< double > fStartTime
Definition: UnivFitterKG.h:150
Vector object.
Definition: Vector.h:30
double fMinBinContentForShapeFit
Definition: UnivFitterKG.h:258
fitConstraint fThetaConstraint
Definition: UnivFitterKG.h:324
static double getAngle(const utl::Vector &v1, const utl::Vector &v2)
Definition: UnivFitterKG.h:219
std::vector< double > compSignals
Definition: UnivFitterKG.h:93
fitConstraint fX0Constraint
Definition: UnivFitterKG.h:330
std::unique_ptr< AtmosphereNS::Atmosphere > fAtmosphere
Definition: UnivFitterKG.h:223
utl::CoordinateSystemPtr fHottestStationCS
Definition: UnivFitterKG.h:230
std::vector< double > x
Definition: UnivFitterKG.h:146
std::vector< StationFitData > fitData
Definition: UnivFitterKG.h:233
fitConstraint fPhiConstraint
Definition: UnivFitterKG.h:325
fitConstraint fEnergyConstraint
Definition: UnivFitterKG.h:326
bool isFitOk(const ROOT::Minuit2::FunctionMinimum &min)
std::vector< double > fLDF
Definition: UnivFitterKG.h:148
utl::CoordinateSystemPtr fBaryCS
Definition: UnivFitterKG.h:229
double fMaxBinContentForShapeFit
Definition: UnivFitterKG.h:259
std::vector< double > fShape
Definition: UnivFitterKG.h:149
bool isStartTimeFitCandidate(const int stationId)
bool isShapeFitCandidate(const int stationId)

, generated on Tue Sep 26 2023.