musrfit  1.9.2
PFitter.h
Go to the documentation of this file.
1 /***************************************************************************
2 
3  PFitter.h
4 
5  Author: Andreas Suter
6  e-mail: andreas.suter@psi.ch
7 
8 ***************************************************************************/
9 
10 /***************************************************************************
11  * Copyright (C) 2007-2023 by Andreas Suter *
12  * andreas.suter@psi.ch *
13  * *
14  * This program is free software; you can redistribute it and/or modify *
15  * it under the terms of the GNU General Public License as published by *
16  * the Free Software Foundation; either version 2 of the License, or *
17  * (at your option) any later version. *
18  * *
19  * This program is distributed in the hope that it will be useful, *
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
22  * GNU General Public License for more details. *
23  * *
24  * You should have received a copy of the GNU General Public License *
25  * along with this program; if not, write to the *
26  * Free Software Foundation, Inc., *
27  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
28  ***************************************************************************/
29 
30 #ifndef _PFITTER_H_
31 #define _PFITTER_H_
32 
33 #include <memory>
34 
35 #include "Minuit2/MnUserParameters.h"
36 #include "Minuit2/FunctionMinimum.h"
37 
38 #include "PMusr.h"
39 #include "PMsrHandler.h"
40 #include "PRunListCollection.h"
41 #include "PFitterFcn.h"
42 
43 #define PMN_INTERACTIVE 0
44 #define PMN_CONTOURS 1
45 #define PMN_EIGEN 2
46 #define PMN_FIT_RANGE 3
47 #define PMN_FIX 4
48 #define PMN_HESSE 5
49 #define PMN_MACHINE_PRECISION 6
50 #define PMN_MIGRAD 7
51 #define PMN_MINIMIZE 8
52 #define PMN_MINOS 9
53 #define PMN_PLOT 10
54 #define PMN_RELEASE 11
55 #define PMN_RESTORE 12
56 #define PMN_SAVE 13
57 #define PMN_SCAN 14
58 #define PMN_SIMPLEX 15
59 #define PMN_STRATEGY 16
60 #define PMN_USER_COVARIANCE 17
61 #define PMN_USER_PARAM_STATE 18
62 #define PMN_PRINT 19
63 #define PMN_SECTOR 20
64 
65 //-----------------------------------------------------------------------------
72 {
73  public:
74  PSectorChisq(UInt_t noOfRuns);
75 
76  void SetRunFirstTime(Double_t first, UInt_t idx);
77  void SetSectorTime(Double_t last) { fLast = last; }
78  void SetChisq(Double_t chisq) { fChisq = chisq; }
79  void SetChisq(Double_t chisq, UInt_t idx);
80  void SetExpectedChisq(Double_t expChisq) { fExpectedChisq = expChisq; }
81  void SetExpectedChisq(Double_t chisq, UInt_t idx);
82  void SetNDF(UInt_t ndf) { fNDF = ndf; }
83  void SetNDF(UInt_t ndf, UInt_t idx);
84 
85  Double_t GetTimeRangeFirst(UInt_t idx);
86  Double_t GetTimeRangeLast() { return fLast; }
87  Double_t GetChisq() { return fChisq; }
88  Double_t GetChisq(UInt_t idx);
89  Double_t GetExpectedChisq() { return fExpectedChisq; }
90  Double_t GetExpectedChisq(UInt_t idx);
91  UInt_t GetNDF() { return fNDF; }
92  UInt_t GetNDF(UInt_t idx);
93  UInt_t GetNoRuns() { return fNoOfRuns; }
94 
95  private:
96  UInt_t fNoOfRuns;
97  Double_t fLast;
98  Double_t fChisq;
99  Double_t fExpectedChisq;
100  UInt_t fNDF;
105 };
106 
107 //-----------------------------------------------------------------------------
111 class PFitter
112 {
113  public:
114  PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bool_t chisq_only = false);
115  virtual ~PFitter();
116 
117  Bool_t IsValid() { return fIsValid; }
118  Bool_t IsScanOnly() { return fIsScanOnly; }
119  Bool_t HasConverged() { return fConverged; }
120  Bool_t DoFit();
121 
122  private:
123  Bool_t fIsValid;
124  Bool_t fIsScanOnly;
125  Bool_t fConverged;
126  Bool_t fChisqOnly;
127  Bool_t fUseChi2;
128  UInt_t fPrintLevel;
129 
130  UInt_t fStrategy;
131 
134 
136 
139 
140  std::unique_ptr<PFitterFcn> fFitterFcn;
141 
142  ROOT::Minuit2::MnUserParameters fMnUserParams;
143  std::unique_ptr<ROOT::Minuit2::FunctionMinimum> fFcnMin;
144 
145  // minuit2 scan/contours command relate variables (see MnScan/MnContours in the minuit2 user manual)
146  Bool_t fScanAll;
147  UInt_t fScanParameter[2];
148  UInt_t fScanNoPoints;
149  Double_t fScanLow;
150  Double_t fScanHigh;
152 
154 
156 
157  Bool_t fSectorFlag;
158  std::vector<PSectorChisq> fSector;
159 
160  std::vector<bool> fPhase;
161 
162  // phase related functions
163  void GetPhaseParams();
164  PIntVector GetParFromFun(const TString funStr);
165  PIntVector GetParFromMap(const TString mapStr);
166 
167  // commands
168  Bool_t CheckCommands();
169  Bool_t SetParameters();
170 
171  Bool_t ExecuteContours();
172  Bool_t ExecuteFitRange(UInt_t lineNo);
173  Bool_t ExecuteFix(UInt_t lineNo);
174  Bool_t ExecuteHesse();
175  Bool_t ExecuteMigrad();
176  Bool_t ExecuteMinimize();
177  Bool_t ExecuteMinos();
178  Bool_t ExecutePlot();
179  Bool_t ExecutePrintLevel(UInt_t lineNo);
180  Bool_t ExecuteRelease(UInt_t lineNo);
181  Bool_t ExecuteRestore();
182  Bool_t ExecuteScan();
183  Bool_t ExecuteSave(Bool_t first);
184  Bool_t ExecuteSimplex();
185  void PrepareSector(PDoubleVector &param, PDoubleVector &error);
186  Bool_t ExecuteSector(std::ofstream &fout);
187 
188  Double_t MilliTime();
189 };
190 
191 #endif // _PFITTER_H_
Bool_t fIsValid
flag. true: the fit is valid.
Definition: PFitter.h:123
Bool_t SetParameters()
Definition: PFitter.cpp:1518
PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bool_t chisq_only=false)
Definition: PFitter.cpp:267
Bool_t ExecuteSimplex()
Definition: PFitter.cpp:2536
Double_t GetTimeRangeFirst(UInt_t idx)
Definition: PFitter.cpp:193
Bool_t ExecuteSave(Bool_t first)
Definition: PFitter.cpp:2150
Bool_t ExecuteMinimize()
Definition: PFitter.cpp:1835
PDoubleVector fFirst
time stamp for fgb for a given run
Definition: PFitter.h:101
std::unique_ptr< PFitterFcn > fFitterFcn
pointer to the fitter function object
Definition: PFitter.h:140
PIntPairVector fCmdList
command list, first=cmd, second=cmd line index
Definition: PFitter.h:138
std::vector< bool > fPhase
flag array in which an entry is true if the related parameter value is a phase
Definition: PFitter.h:160
Bool_t fIsScanOnly
flag. true: scan along some parameters (no fitting).
Definition: PFitter.h:124
Bool_t fChisqOnly
flag. true: calculate chi^2 only (no fitting).
Definition: PFitter.h:126
void PrepareSector(PDoubleVector &param, PDoubleVector &error)
Definition: PFitter.cpp:2613
Bool_t ExecuteContours()
Definition: PFitter.cpp:1566
PMsrLines fCmdLines
all the Minuit commands from the msr-file
Definition: PFitter.h:137
PIntVector GetParFromMap(const TString mapStr)
Definition: PFitter.cpp:497
PStringVector fElapsedTime
Definition: PFitter.h:155
Bool_t DoFit()
Definition: PFitter.cpp:546
PDoubleVector fChisqRun
chisq or maxLH for the sector and run
Definition: PFitter.h:102
void SetChisq(Double_t chisq)
Definition: PFitter.h:78
Bool_t ExecuteRelease(UInt_t lineNo)
Definition: PFitter.cpp:2059
PMsrHandler * fRunInfo
pointer to the msr-file handler
Definition: PFitter.h:132
PDoublePairVector fScanData
keeps the scan/contour data
Definition: PFitter.h:151
Bool_t ExecuteFix(UInt_t lineNo)
Definition: PFitter.cpp:1672
std::vector< Int_t > PIntVector
Definition: PMusr.h:178
void SetExpectedChisq(Double_t expChisq)
Definition: PFitter.h:80
UInt_t fStrategy
fitting strategy (see minuit2 manual).
Definition: PFitter.h:130
Bool_t ExecuteMinos()
Definition: PFitter.cpp:1912
Bool_t ExecuteScan()
Definition: PFitter.cpp:2123
std::vector< UInt_t > PUIntVector
Definition: PMusr.h:172
PDoubleVector fExpectedChisqRun
expected chisq or maxLH for the sector and run
Definition: PFitter.h:103
std::vector< PMsrParamStructure > PMsrParamList
Definition: PMusr.h:564
std::vector< Double_t > PDoubleVector
Definition: PMusr.h:196
Bool_t ExecuteSector(std::ofstream &fout)
Definition: PFitter.cpp:2726
Bool_t CheckCommands()
Definition: PFitter.cpp:831
void SetSectorTime(Double_t last)
Definition: PFitter.h:77
UInt_t fNDF
NDF for the sector.
Definition: PFitter.h:100
Double_t fExpectedChisq
keep the expected chisq or maxLH for the sector
Definition: PFitter.h:99
Bool_t fUseChi2
flag. true: chi^2 fit. false: log-max-likelihood
Definition: PFitter.h:127
ROOT::Minuit2::MnUserParameters fMnUserParams
minuit2 input parameter list
Definition: PFitter.h:142
Double_t GetChisq()
Definition: PFitter.h:87
PMsrParamList fParams
msr-file parameters
Definition: PFitter.h:135
virtual ~PFitter()
Definition: PFitter.cpp:326
std::vector< PMsrLineStructure > PMsrLines
Definition: PMusr.h:539
Bool_t HasConverged()
Definition: PFitter.h:119
Double_t fScanHigh
scan range high. default=0.0 which means 2 std dev. (see MnScan/MnContours in the minuit2 user manual...
Definition: PFitter.h:150
Bool_t ExecuteMigrad()
Definition: PFitter.cpp:1759
Double_t GetTimeRangeLast()
Definition: PFitter.h:86
UInt_t fScanNoPoints
number of points in a scan/contour (see MnScan/MnContours in the minuit2 user manual) ...
Definition: PFitter.h:148
Double_t GetExpectedChisq()
Definition: PFitter.h:89
Bool_t ExecutePlot()
Definition: PFitter.cpp:1981
Bool_t fSectorFlag
sector command present flag
Definition: PFitter.h:157
Bool_t IsValid()
Definition: PFitter.h:117
Bool_t IsScanOnly()
Definition: PFitter.h:118
void SetNDF(UInt_t ndf)
Definition: PFitter.h:82
UInt_t GetNDF()
Definition: PFitter.h:91
std::vector< PDoublePair > PDoublePairVector
Definition: PMusr.h:208
UInt_t fNoOfRuns
number of runs presesent
Definition: PFitter.h:96
PSectorChisq(UInt_t noOfRuns)
Definition: PFitter.cpp:79
PRunListCollection * fRunListCollection
pointer to the run list collection
Definition: PFitter.h:133
Bool_t ExecuteFitRange(UInt_t lineNo)
Definition: PFitter.cpp:1601
PUIntVector fNDFRun
NDF for the sector and run.
Definition: PFitter.h:104
void SetRunFirstTime(Double_t first, UInt_t idx)
Definition: PFitter.cpp:107
UInt_t fScanParameter[2]
scan parameter. idx=0: used for scan and contour, idx=1: used for contour (see MnScan/MnContours in t...
Definition: PFitter.h:147
Double_t fScanLow
scan range low. default=0.0 which means 2 std dev. (see MnScan/MnContours in the minuit2 user manual)...
Definition: PFitter.h:149
Double_t fChisq
chisq or maxLH for the sector
Definition: PFitter.h:98
Bool_t fScanAll
flag. false: single parameter scan, true: not implemented yet (see MnScan/MnContours in the minuit2 u...
Definition: PFitter.h:146
PIntVector GetParFromFun(const TString funStr)
Definition: PFitter.cpp:430
Double_t MilliTime()
Definition: PFitter.cpp:2782
std::vector< TString > PStringVector
Definition: PMusr.h:214
UInt_t fPrintLevel
tag, showing the level of messages whished. 0=minimum, 1=standard, 2=maximum
Definition: PFitter.h:128
void GetPhaseParams()
Definition: PFitter.cpp:342
Bool_t fConverged
flag. true: the fit has converged.
Definition: PFitter.h:125
std::vector< PIntPair > PIntPairVector
Definition: PMusr.h:190
Double_t fLast
requested time stamp
Definition: PFitter.h:97
Bool_t ExecutePrintLevel(UInt_t lineNo)
Definition: PFitter.cpp:2001
PDoublePairVector fOriginalFitRange
keeps the original fit range in case there is a range command in the COMMAND block ...
Definition: PFitter.h:153
Bool_t ExecuteRestore()
Definition: PFitter.cpp:2101
UInt_t GetNoRuns()
Definition: PFitter.h:93
std::vector< PSectorChisq > fSector
stores all chisq/maxLH sector information
Definition: PFitter.h:158
std::unique_ptr< ROOT::Minuit2::FunctionMinimum > fFcnMin
function minimum object
Definition: PFitter.h:143
Bool_t ExecuteHesse()
Definition: PFitter.cpp:1710