CMS 3D CMS Logo

Chi2VertexFitter.cc
Go to the documentation of this file.
1 /* From SimpleFits Package
2  * Designed an written by
3  * author: Ian M. Nugent
4  * Humboldt Foundations
5  */
9 #include "Minuit2/FunctionMinimum.h"
10 #include "Minuit2/MnUserParameters.h"
11 #include "Minuit2/MnPrint.h"
12 #include "Minuit2/MnMigrad.h"
13 #include "Minuit2/MnSimplex.h"
14 #include "Minuit2/CombinedMinimizer.h"
15 #include "Minuit2/MnMinimize.h"
16 #include "Minuit2/MnMinos.h"
17 #include "Minuit2/MnHesse.h"
18 #include "Minuit2/MnContours.h"
19 #include "Minuit2/MnPlot.h"
20 #include "Minuit2/MinosError.h"
21 #include "Minuit2/ContoursError.h"
22 #include <iostream>
23 
24 using namespace tauImpactParameter;
25 
27  if (isFit_ == true)
28  return true; // do not refit
29  if (!isConfigured_)
30  return false; // do not fit if configuration failed
32  ROOT::Minuit2::MnUserParameters MnPar;
33  for (int i = 0; i < par_.GetNrows(); i++) {
34  TString name = freeParName(i);
35  // if not limited (vhigh <= vlow)
36  MnPar.Add(name.Data(),
37  par_(i),
38  sqrt(fabs(parcov_(i, i))),
39  par_(i) - nsigma_ * sqrt(fabs(parcov_(i, i))),
40  par_(i) + nsigma_ * sqrt(fabs(parcov_(i, i))));
41  }
42 
43  unsigned int max = 10;
44  int numberofcalls = 200 + par_.GetNrows() * 100 + par_.GetNrows() * par_.GetNrows() * 5;
45  double tolerance(0.01);
46  double edmMin(0.001 * updator.Up() * tolerance);
47 
48  ROOT::Minuit2::MnMinimize minimize(updator, MnPar);
49  ROOT::Minuit2::FunctionMinimum min = minimize(numberofcalls, tolerance);
50  for (unsigned int i = 0; i <= max && min.Edm() > edmMin; i++) {
51  if (i == max)
52  return false;
53  min = minimize(i * numberofcalls, tolerance);
54  }
55  // give return flag based on status
56  if (min.IsAboveMaxEdm()) {
57  edm::LogWarning("Chi2VertexFitter::Fit") << "Found Vertex that is above EDM " << std::endl;
58  return false;
59  }
60  if (!min.IsValid()) {
61  edm::LogWarning("Chi2VertexFitter::Fit") << "Failed min.IsValid()" << std::endl;
62  if (!min.HasValidParameters()) {
63  edm::LogWarning("Chi2VertexFitter::Fit") << "Failed min.HasValidParameters()" << std::endl;
64  }
65  if (!min.HasValidCovariance()) {
66  edm::LogWarning("Chi2VertexFitter::Fit") << "Failed min.HasValidCovariance()" << std::endl;
67  }
68  if (!min.HesseFailed()) {
69  edm::LogWarning("Chi2VertexFitter::Fit") << "Failed min.HesseFailed()" << std::endl;
70  }
71  if (!min.HasReachedCallLimit()) {
72  edm::LogWarning("Chi2VertexFitter::Fit") << "Failed min.HasReachedCallLimit()" << std::endl;
73  }
74  return false;
75  }
76  chi2_ = min.Fval();
77  // Get output parameters
78  for (int i = 0; i < par_.GetNrows(); i++) {
79  par_(i) = min.UserParameters().Value(i);
80  }
81  // Get output covariance
82  for (int i = 0; i < par_.GetNrows(); i++) {
83  for (int j = 0; j < par_.GetNrows(); j++) {
84  parcov_(i, j) = min.UserCovariance()(i, j);
85  }
86  }
87 
88  isFit_ = true;
89  return isFit_;
90 }
mps_fire.i
i
Definition: mps_fire.py:355
MessageLogger.h
min
T min(T a, T b)
Definition: MathUtil.h:58
tauImpactParameter
Definition: Chi2VertexFitter.h:14
tauImpactParameter::TrackHelixVertexFitter::parcov_
TMatrixTSym< double > parcov_
Definition: TrackHelixVertexFitter.h:59
tauImpactParameter::TrackHelixVertexFitter::isConfigured_
bool isConfigured_
Definition: TrackHelixVertexFitter.h:57
tauImpactParameter::TrackHelixVertexFitter::chi2_
double chi2_
Definition: TrackHelixVertexFitter.h:61
HLT_2018_cff.updator
updator
Definition: HLT_2018_cff.py:123
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
tauImpactParameter::TrackHelixVertexFitter::freeParName
virtual TString freeParName(int Par)
Definition: TrackHelixVertexFitter.cc:265
edm::LogWarning
Definition: MessageLogger.h:141
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
tolerance
const double tolerance
Definition: HGCalGeomParameters.cc:27
tauImpactParameter::Chi2VertexFitter::fit
bool fit() override
Definition: Chi2VertexFitter.cc:26
Chi2VertexFitter.h
tauImpactParameter::ChiSquareFunctionUpdator
Definition: ChiSquareFunctionUpdator.h:17
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
tauImpactParameter::TrackHelixVertexFitter::isFit_
bool isFit_
Definition: TrackHelixVertexFitter.h:57
tauImpactParameter::TrackHelixVertexFitter::par_
TVectorT< double > par_
Definition: TrackHelixVertexFitter.h:58
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
ChiSquareFunctionUpdator.h
tauImpactParameter::Chi2VertexFitter::nsigma_
double nsigma_
Definition: Chi2VertexFitter.h:25