musrfit 1.10.0
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-2026 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//-------------------------------------------------------------
60
62#define PMN_INTERACTIVE 0
64#define PMN_CONTOURS 1
66#define PMN_EIGEN 2
68#define PMN_FIT_RANGE 3
70#define PMN_FIX 4
72#define PMN_HESSE 5
74#define PMN_MACHINE_PRECISION 6
76#define PMN_MIGRAD 7
78#define PMN_MINIMIZE 8
80#define PMN_MINOS 9
82#define PMN_PLOT 10
84#define PMN_RELEASE 11
86#define PMN_RESTORE 12
88#define PMN_SAVE 13
90#define PMN_SCAN 14
92#define PMN_SIMPLEX 15
94#define PMN_STRATEGY 16
96#define PMN_USER_COVARIANCE 17
98#define PMN_USER_PARAM_STATE 18
100#define PMN_PRINT 19
102#define PMN_SECTOR 20
103
104//-----------------------------------------------------------------------------
124{
125 public:
131 PSectorChisq(UInt_t noOfRuns);
132
136 void SetRunFirstTime(Double_t first, UInt_t idx);
137
140 void SetSectorTime(Double_t last) { fLast = last; }
141
144 void SetChisq(Double_t chisq) { fChisq = chisq; }
145
149 void SetChisq(Double_t chisq, UInt_t idx);
150
153 void SetExpectedChisq(Double_t expChisq) { fExpectedChisq = expChisq; }
154
158 void SetExpectedChisq(Double_t chisq, UInt_t idx);
159
162 void SetNDF(UInt_t ndf) { fNDF = ndf; }
163
167 void SetNDF(UInt_t ndf, UInt_t idx);
168
172 Double_t GetTimeRangeFirst(UInt_t idx);
173
176 Double_t GetTimeRangeLast() { return fLast; }
177
180 Double_t GetChisq() { return fChisq; }
181
185 Double_t GetChisq(UInt_t idx);
186
189 Double_t GetExpectedChisq() { return fExpectedChisq; }
190
194 Double_t GetExpectedChisq(UInt_t idx);
195
198 UInt_t GetNDF() { return fNDF; }
199
203 UInt_t GetNDF(UInt_t idx);
204
207 UInt_t GetNoRuns() { return fNoOfRuns; }
208
209 private:
210 UInt_t fNoOfRuns;
211 Double_t fLast;
212 Double_t fChisq;
213 Double_t fExpectedChisq;
214 UInt_t fNDF;
219};
220
221//-----------------------------------------------------------------------------
257{
258 public:
267 PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bool_t chisq_only = false, Bool_t yaml_out = false);
268
269 virtual ~PFitter();
270
273 Bool_t IsValid() { return fIsValid; }
274
277 Bool_t IsScanOnly() { return fIsScanOnly; }
278
281 Bool_t HasConverged() { return fConverged; }
282
291 Bool_t DoFit();
292
293 private:
294 // State flags
295 Bool_t fIsValid;
296 Bool_t fIsScanOnly;
297 Bool_t fConverged;
298 Bool_t fChisqOnly;
299 Bool_t fYamlOut;
300 Bool_t fUseChi2;
301 UInt_t fPrintLevel;
302
303 UInt_t fStrategy;
304
305 // Core data structures
308
310
313
314 std::unique_ptr<PFitterFcn> fFitterFcn;
315
316 ROOT::Minuit2::MnUserParameters fMnUserParams;
317 std::unique_ptr<ROOT::Minuit2::FunctionMinimum> fFcnMin;
318
319 // Scan and contour analysis
320 Bool_t fScanAll;
321 UInt_t fScanParameter[2];
323 Double_t fScanLow;
324 Double_t fScanHigh;
326
328
330
331 // Sector χ² analysis
332 Bool_t fSectorFlag;
333 std::vector<PSectorChisq> fSector;
334
335 std::vector<bool> fPhase;
336
337 //----------------------------------------------------------------------
338 // Phase parameter identification (private helpers)
339 //----------------------------------------------------------------------
340
348 void GetPhaseParams();
349
359 PIntVector GetParFromFun(const TString funStr);
360
371 PIntVector GetParFromMap(const TString mapStr);
372
373 //----------------------------------------------------------------------
374 // Command validation and execution (private methods)
375 //----------------------------------------------------------------------
376
385 Bool_t CheckCommands();
386
395 Bool_t SetParameters();
396
405 Bool_t ExecuteContours();
406
416 Bool_t ExecuteFitRange(UInt_t lineNo);
417
426 Bool_t ExecuteFix(UInt_t lineNo);
427
436 Bool_t ExecuteHesse();
437
446 Bool_t ExecuteMigrad();
447
456 Bool_t ExecuteMinimize();
457
466 Bool_t ExecuteMinos();
467
475 Bool_t ExecutePlot();
476
485 Bool_t ExecutePrintLevel(UInt_t lineNo);
486
495 Bool_t ExecuteRelease(UInt_t lineNo);
496
504 Bool_t ExecuteRestore();
505
514 Bool_t ExecuteScan();
515
525 Bool_t ExecuteSave(Bool_t first);
526
535 Bool_t ExecuteSimplex();
536
545 void PrepareSector(PDoubleVector &param, PDoubleVector &error);
546
556 Bool_t ExecuteSector(std::ofstream &fout);
557
558 //----------------------------------------------------------------------
559 // Utility functions (private)
560 //----------------------------------------------------------------------
561
569 Double_t MilliTime();
570
582 PDoubleVector ParamRound(const PDoubleVector &par, const PDoubleVector &err, Bool_t &ok);
583};
584
585#endif // _PFITTER_H_
std::vector< UInt_t > PUIntVector
Definition PMusr.h:375
std::vector< PMsrLineStructure > PMsrLines
Definition PMusr.h:1007
std::vector< PDoublePair > PDoublePairVector
Definition PMusr.h:411
std::vector< Int_t > PIntVector
Definition PMusr.h:381
std::vector< PMsrParamStructure > PMsrParamList
Definition PMusr.h:1040
std::vector< PIntPair > PIntPairVector
Definition PMusr.h:393
std::vector< TString > PStringVector
Definition PMusr.h:417
std::vector< Double_t > PDoubleVector
Definition PMusr.h:399
Bool_t ExecuteContours()
Executes CONTOURS command (2D error contours).
Definition PFitter.cpp:1536
Bool_t ExecutePlot()
Executes PLOT command (visualize scan/contour results).
Definition PFitter.cpp:1939
PDoublePairVector fOriginalFitRange
Original fit ranges per run (saved for FIT_RANGE command)
Definition PFitter.h:327
UInt_t fScanNoPoints
Number of scan/contour evaluation points (default=41)
Definition PFitter.h:322
Bool_t IsValid()
Definition PFitter.h:273
UInt_t fStrategy
Minuit2 strategy: 0=fast/low-accuracy, 1=default, 2=careful/high-accuracy.
Definition PFitter.h:303
Double_t fScanHigh
Scan upper bound: 0.0 = auto (2σ above current value)
Definition PFitter.h:324
Bool_t fIsValid
Overall validity flag: true if fitter initialized successfully.
Definition PFitter.h:295
Bool_t HasConverged()
Definition PFitter.h:281
Bool_t ExecutePrintLevel(UInt_t lineNo)
Executes PRINT command (set verbosity level).
Definition PFitter.cpp:1959
PStringVector fElapsedTime
Timing information for each fit command.
Definition PFitter.h:329
PIntPairVector fCmdList
Parsed commands: first=command ID, second=line number.
Definition PFitter.h:312
Double_t MilliTime()
Returns current time in milliseconds.
Definition PFitter.cpp:2849
UInt_t fScanParameter[2]
Parameter indices: [0]=primary scan/contour, [1]=secondary (contours only)
Definition PFitter.h:321
Bool_t DoFit()
Main entry point for executing the fit.
Definition PFitter.cpp:625
PIntVector GetParFromFun(const TString funStr)
Extracts parameter numbers from a FUNCTIONS block entry.
Definition PFitter.cpp:478
Bool_t fSectorFlag
SECTOR command present flag.
Definition PFitter.h:332
Bool_t fYamlOut
Output flag: true to generate YAML output file (MINUIT2.OUTPUT → yaml)
Definition PFitter.h:299
Bool_t ExecuteScan()
Executes SCAN command (1D parameter space scan).
Definition PFitter.cpp:2067
UInt_t fPrintLevel
Verbosity level: 0=quiet, 1=normal, 2=verbose (Minuit output)
Definition PFitter.h:301
Bool_t ExecuteSave(Bool_t first)
Executes SAVE command (store current parameters).
Definition PFitter.cpp:2094
PDoubleVector ParamRound(const PDoubleVector &par, const PDoubleVector &err, Bool_t &ok)
Rounds parameters for output with appropriate precision.
Definition PFitter.cpp:2872
Bool_t fScanAll
Multi-parameter scan flag: false=1D scan, true=2D scan (not fully implemented)
Definition PFitter.h:320
Bool_t fIsScanOnly
Scan mode flag: true if only parameter scans requested (no minimization)
Definition PFitter.h:296
virtual ~PFitter()
Destructor - Cleans up dynamically allocated resources.
Definition PFitter.cpp:351
PRunListCollection * fRunListCollection
Pointer to preprocessed run data collection.
Definition PFitter.h:307
Bool_t IsScanOnly()
Definition PFitter.h:277
Bool_t ExecuteSimplex()
Executes SIMPLEX command (non-gradient minimization).
Definition PFitter.cpp:2603
PMsrLines fCmdLines
Raw command lines from MSR COMMANDS block.
Definition PFitter.h:311
std::vector< PSectorChisq > fSector
Sector analysis results (χ² vs. time windows)
Definition PFitter.h:333
Bool_t SetParameters()
Transfers MSR parameters to Minuit2 parameter state.
Definition PFitter.cpp:1488
Bool_t ExecuteSector(std::ofstream &fout)
Executes SECTOR command (time-dependent χ² analysis).
Definition PFitter.cpp:2793
void GetPhaseParams()
Identifies which parameters represent phase angles.
Definition PFitter.cpp:389
Double_t fScanLow
Scan lower bound: 0.0 = auto (2σ below current value)
Definition PFitter.h:323
PFitter(PMsrHandler *runInfo, PRunListCollection *runListCollection, Bool_t chisq_only=false, Bool_t yaml_out=false)
Constructor for the fitting engine.
Definition PFitter.cpp:289
Bool_t ExecuteHesse()
Executes HESSE command (calculate error matrix).
Definition PFitter.cpp:1668
PMsrParamList fParams
Copy of parameter list from MSR file.
Definition PFitter.h:309
PMsrHandler * fRunInfo
Pointer to MSR file handler (parameters, theory, commands)
Definition PFitter.h:306
Bool_t ExecuteRelease(UInt_t lineNo)
Executes RELEASE command (unfreeze parameters).
Definition PFitter.cpp:2010
Bool_t ExecuteMinos()
Executes MINOS command (asymmetric error analysis).
Definition PFitter.cpp:1870
PIntVector GetParFromMap(const TString mapStr)
Extracts parameter numbers from a map reference.
Definition PFitter.cpp:548
PDoublePairVector fScanData
Scan results: (parameter_value, χ²) pairs.
Definition PFitter.h:325
Bool_t ExecuteMinimize()
Executes MINIMIZE command (automatic algorithm selection).
Definition PFitter.cpp:1793
ROOT::Minuit2::MnUserParameters fMnUserParams
Minuit2 parameter state (values, errors, limits)
Definition PFitter.h:316
Bool_t ExecuteMigrad()
Executes MIGRAD command (gradient descent minimization).
Definition PFitter.cpp:1717
std::unique_ptr< ROOT::Minuit2::FunctionMinimum > fFcnMin
Minuit2 function minimum result.
Definition PFitter.h:317
Bool_t ExecuteRestore()
Executes RESTORE command (reload saved parameters).
Definition PFitter.cpp:2045
Bool_t CheckCommands()
Validates COMMANDS block syntax and builds execution queue.
Definition PFitter.cpp:931
Bool_t fConverged
Convergence flag: true if fit converged to a valid minimum.
Definition PFitter.h:297
Bool_t fChisqOnly
Evaluation-only flag: true to calculate χ² without fitting.
Definition PFitter.h:298
Bool_t ExecuteFitRange(UInt_t lineNo)
Executes FIT_RANGE command (optimal time-window search).
Definition PFitter.cpp:1571
Bool_t ExecuteFix(UInt_t lineNo)
Executes FIX command (freeze parameters).
Definition PFitter.cpp:1637
std::vector< bool > fPhase
Phase parameter flags: true if parameter is a phase angle.
Definition PFitter.h:335
void PrepareSector(PDoubleVector &param, PDoubleVector &error)
Prepares sector χ² analysis data structures.
Definition PFitter.cpp:2680
std::unique_ptr< PFitterFcn > fFitterFcn
Objective function for Minuit2 minimization.
Definition PFitter.h:314
Bool_t fUseChi2
Fit mode: true = χ² minimization, false = log-max-likelihood.
Definition PFitter.h:300
MSR file parser and manager for the musrfit framework.
Manager class for all processed μSR run data during fitting.
void SetChisq(Double_t chisq)
Definition PFitter.h:144
Double_t GetExpectedChisq()
Definition PFitter.h:189
Double_t fLast
requested time stamp
Definition PFitter.h:211
UInt_t GetNDF()
Definition PFitter.h:198
PDoubleVector fFirst
time stamp for fgb for a given run
Definition PFitter.h:215
Double_t GetTimeRangeLast()
Definition PFitter.h:176
void SetNDF(UInt_t ndf)
Definition PFitter.h:162
void SetExpectedChisq(Double_t expChisq)
Definition PFitter.h:153
PUIntVector fNDFRun
NDF for the sector and run.
Definition PFitter.h:218
Double_t fChisq
chisq or maxLH for the sector
Definition PFitter.h:212
void SetSectorTime(Double_t last)
Definition PFitter.h:140
UInt_t fNDF
NDF for the sector.
Definition PFitter.h:214
Double_t GetTimeRangeFirst(UInt_t idx)
Definition PFitter.cpp:194
PSectorChisq(UInt_t noOfRuns)
Definition PFitter.cpp:80
UInt_t GetNoRuns()
Definition PFitter.h:207
Double_t GetChisq()
Definition PFitter.h:180
PDoubleVector fChisqRun
chisq or maxLH for the sector and run
Definition PFitter.h:216
Double_t fExpectedChisq
keep the expected chisq or maxLH for the sector
Definition PFitter.h:213
PDoubleVector fExpectedChisqRun
expected chisq or maxLH for the sector and run
Definition PFitter.h:217
void SetRunFirstTime(Double_t first, UInt_t idx)
Definition PFitter.cpp:108
UInt_t fNoOfRuns
number of runs presesent
Definition PFitter.h:210