ROptFitter.cc
Go to the documentation of this file.
1 #include "ROptFitter.h"
2 
3 #include <Minuit2/FCNBase.h>
4 #include <Minuit2/MnMinimize.h>
5 #include <Minuit2/MnHesse.h>
6 #include <Minuit2/FunctionMinimum.h>
7 #include <Minuit2/MnUserParameters.h>
8 
9 #include <utl/AugerUnits.h>
10 #include <utl/Math.h>
11 
12 #include <cmath>
13 #include <vector>
14 
15 using namespace LDFFinderKG;
16 
17 
18 bool
19 ROptFitter::GetResult(double& rOpt)
20  const
21 {
22  ROOT::Minuit2::MnUserParameters pars;
23  pars.Add("rOpt", 1400*utl::meter, 50*utl::meter);
24  pars.SetLowerLimit("rOpt", 0);
25 
26  ROOT::Minuit2::MnMinimize m(*this, pars, 0);
27 
28  // TODO make minuit verbose
29 
30  ROOT::Minuit2::FunctionMinimum fmin = m();
31 
32  ROOT::Minuit2::MnHesse hesse;
33  hesse(m.Fcnbase(), fmin);
34 
35  if (!fmin.HasValidParameters())
36  return false;
37 
38  rOpt = fmin.UserParameters().Params()[0];
39  return true;
40 }
41 
42 
43 double
44 ROptFitter::operator()(const std::vector<double>& pars)
45  const
46 {
47  const double& ropt = pars[0];
48 
49  const int n = fShowerSize.size();
50  double sum = 0;
51  double sum2 = 0;
52  for (int i = 0; i < n; ++i) {
53  fLDFParameters[0] = fBeta[i];
54  const double s = fShowerSize[i] * fLDFFunction(ropt, fLDFParameters);
55  sum += s;
56  sum2 += utl::Sqr(s);
57  }
58  const double invN = 1./n;
59  const double avg = sum * invN;
60  const double var2 = sum2 * invN - utl::Sqr(avg);
61 
62  return var2 > 0 ? std::sqrt(var2)/avg : 0;
63 }
constexpr T Sqr(const T &x)
const LDF & fLDFFunction
Definition: ROptFitter.h:39
constexpr double s
Definition: AugerUnits.h:163
double operator()(const std::vector< double > &pars) const
Definition: ROptFitter.cc:44
constexpr double meter
Definition: AugerUnits.h:81
std::vector< double > fLDFParameters
Definition: ROptFitter.h:40
std::vector< double > fShowerSize
Definition: ROptFitter.h:43
std::vector< double > fBeta
Definition: ROptFitter.h:42
constexpr double m
Definition: AugerUnits.h:121
bool GetResult(double &rOpt) const
Definition: ROptFitter.cc:19

, generated on Tue Sep 26 2023.