ATLAS Offline Software
ShapeFitter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "TMinuit.h"
7 
8 #include "LArCafJobs/CellInfo.h"
10 
11 #include "LArSamplesMon/History.h"
12 #include "LArSamplesMon/Data.h"
13 #include "LArCafJobs/SimpleShape.h"
14 
15 #include <iostream>
16 using std::cout;
17 using std::endl;
18 
19 using namespace LArSamples;
20 
21 namespace LArSamples {
22  namespace FitterData {
24  const AbsShape* data;
27  unsigned int minNDof;
28  }
29 }
30 
31 
32 bool ShapeFitter::fit(const AbsShape& data, const AbsShape& reference, double& k, double& deltaT, double& chi2,
33  const ScaledErrorData* sed) const
34 {
35  TMinuit* minuit = new TMinuit(1); //initialize TMinuit with 1 param
36  gMinuit->SetFCN(adjusted_reference);
37 
38  FitterData::fitter = this;
42 
43  double nData = (data.time(data.nPoints() - 1) - data.time(0))/Definitions::samplingInterval;
44  double nRef = (reference.time(data.nPoints() - 1) - reference.time(0))/Definitions::samplingInterval;
45 
46  FitterData::minNDof = (nData < nRef ? ((unsigned int)nData+1)/2 : ((unsigned int)nRef+1)/2); // we want at least n/2 samples in range
47  //std::cout << minNDof << std::endl;
48  Double_t arglist[10];
49  Int_t ierflg = 0;
50 
51  arglist[0] = -1;
52  gMinuit->mnexcm("SET PRINT",arglist,1,ierflg);
53  arglist[0] = 0;
54  gMinuit->mnexcm("SET NOW", arglist,0,ierflg);
55 
56  arglist[0] = 1;
57  minuit->mnexcm("SET ERR", arglist, 1, ierflg);
58  minuit->mnparm(0, "deltaT", 0, Definitions::samplingInterval/24, -5*(double)Definitions::samplingInterval, 5*(double)Definitions::samplingInterval, ierflg);
59 
60  arglist[0] = 500;
61  arglist[1] = 1.;
62  minuit->mnexcm("MIGRAD", arglist, 2, ierflg);
63 
64  Double_t edm, errdef;
65  Int_t nvpar, nparx, icstat;
66  minuit->mnstat(chi2, edm, errdef, nvpar, nparx, icstat);
67 
68  double err, low, high;
69  int iuint;
70  TString name;
71  minuit->mnpout(0, name, deltaT, err, low, high, iuint);
72  delete minuit;
73  return m_c2c.bestRescale(data, reference, k, chi2, deltaT, sed);
74 }
75 
76 
77 void ShapeFitter::adjusted_reference(Int_t& /*nPar*/, Double_t* /*grad*/, Double_t& f, Double_t* par, Int_t /*iflag*/)
78 {
79  double deltaT = par[0], k = 1;
80  //std::cout << "Eval at " << deltaT << std::endl;
81  if (!FitterData::fitter->chi2Calc().bestRescale(*FitterData::data, *FitterData::reference, k, f, deltaT,
83  //std::cout << "-> " << k << " " << deltaT << " " << f << std::endl;
84 }
LArSamples::FitterData::fitter
const ShapeFitter * fitter
Definition: ShapeFitter.cxx:23
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
SimpleShape.h
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
LArSamples
Definition: AbsShape.h:24
reference
Definition: hcg.cxx:437
LArSamples::ShapeFitter::adjusted_reference
static void adjusted_reference(Int_t &nPar, Double_t *grad, Double_t &f, Double_t *par, Int_t iflag)
Definition: ShapeFitter.cxx:77
python.compareTCTs.nRef
nRef
Definition: compareTCTs.py:115
LArSamples::ShapeFitter::fit
bool fit(const LArSamples::AbsShape &data, const AbsShape &reference, double &k, double &deltaT, double &chi2, const ScaledErrorData *sed=0) const
Definition: ShapeFitter.cxx:32
LArSamples::ScaledErrorData
Definition: ScaledErrorData.h:17
LArSamples::Chi2Calc::bestRescale
bool bestRescale(const AbsShape &data, const AbsShape &reference, double &k, double &chi2, double deltaT=0, const ScaledErrorData *sed=0, unsigned int minNDof=0) const
Definition: Chi2Calc.cxx:88
DataContainer.h
LArSamples::FitterData::data
const AbsShape * data
Definition: ShapeFitter.cxx:24
LArSamples::FitterData::reference
const AbsShape * reference
Definition: ShapeFitter.cxx:25
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
hist_file_dump.f
f
Definition: hist_file_dump.py:135
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
LArSamples::FitterData::minNDof
unsigned int minNDof
Definition: ShapeFitter.cxx:27
LArSamples::AbsShape
Definition: AbsShape.h:28
LArSamples::ShapeFitter
Definition: ShapeFitter.h:24
LArSamples::ShapeFitter::m_c2c
Chi2Calc m_c2c
Definition: ShapeFitter.h:40
Data.h
History.h
LArSamples::ShapeFitter::chi2Calc
const Chi2Calc & chi2Calc() const
Definition: ShapeFitter.h:36
LArSamples::FitterData::sed
const ScaledErrorData * sed
Definition: ShapeFitter.cxx:26
ShapeFitter.h
LArSamples::Definitions::samplingInterval
static const unsigned int samplingInterval
Definition: LArCalorimeter/LArCafJobs/LArCafJobs/Definitions.h:15
CellInfo.h
fitman.k
k
Definition: fitman.py:528