musrfit 1.10.0
PMsrHandler.h
Go to the documentation of this file.
1/***************************************************************************
2
3 PMsrHandler.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 _PMSRHANDLER_H_
31#define _PMSRHANDLER_H_
32
33#include <memory>
34#include <sstream>
35#include <string>
36
37#include <TString.h>
38#include <TComplex.h>
39
40#include "PMusr.h"
41#include "PFunctionHandler.h"
42#include "PFunctionGrammar.h"
43#include "PFunction.h"
44
45//-------------------------------------------------------------
116{
117 public:
125 PMsrHandler(const Char_t *fileName, PStartupOptions *startupOptions=0, const Bool_t fourierOnly=false);
126
127 virtual ~PMsrHandler();
128
142 virtual Int_t ReadMsrFile();
143
153 virtual Int_t WriteMsrLogFile(const Bool_t messages = true);
154
169 virtual Int_t WriteMsrFile(const Char_t *filename, std::map<UInt_t, TString> *commentsPAR = 0, std::map<UInt_t, TString> *commentsTHE = 0, \
170 std::map<UInt_t, TString> *commentsFUN = 0, std::map<UInt_t, TString> *commentsRUN = 0);
171
173 virtual TString* GetMsrTitle() { return &fTitle; }
175 virtual PMsrParamList* GetMsrParamList() { return &fParam; }
177 virtual PMsrLines* GetMsrTheory() { return &fTheory; }
179 virtual PMsrLines* GetMsrFunctions() { return &fFunctions; }
181 virtual PMsrGlobalBlock* GetMsrGlobal() { return &fGlobal; }
183 virtual PMsrRunList* GetMsrRunList() { return &fRuns; }
185 virtual PMsrLines* GetMsrCommands() { return &fCommands; }
189 virtual PMsrPlotList* GetMsrPlotList() { return &fPlots; }
192
194 virtual TString* GetMsrFileDirectoryPath() { return &fMsrFileDirectoryPath; }
195
197 virtual UInt_t GetNoOfRuns() { return fRuns.size(); }
198
200 virtual UInt_t GetNoOfParams() { return fParam.size(); }
202 virtual const TString& GetFileName() const { return fFileName; }
203
206 virtual void SetMsrTitle(const TString &title) { fTitle = title; }
207
215 virtual Bool_t SetMsrParamValue(UInt_t i, Double_t value);
216
224 virtual Bool_t SetMsrParamStep(UInt_t i, Double_t value);
225
233 virtual Bool_t SetMsrParamPosErrorPresent(UInt_t i, Bool_t value);
234
242 virtual Bool_t SetMsrParamPosError(UInt_t i, Double_t value);
243
251 virtual void SetMsrT0Entry(UInt_t runNo, UInt_t idx, Double_t bin);
252
261 virtual void SetMsrAddT0Entry(UInt_t runNo, UInt_t addRunIdx, UInt_t histoIdx, Double_t bin);
262
270 virtual void SetMsrDataRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
271
279 virtual void SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
280
283
286 virtual void SetMsrStatisticConverged(Bool_t converged) { fStatistic.fValid = converged; }
287
290 virtual void SetMsrStatisticMin(Double_t min) { fStatistic.fMin = min; }
291
294 virtual void SetMsrStatisticNdf(UInt_t ndf) { fStatistic.fNdf = ndf; }
295
297 virtual Int_t GetNoOfFuncs() { return fFuncHandler->GetNoOfFuncs(); }
298
305 virtual UInt_t GetFuncNo(Int_t idx) { return fFuncHandler->GetFuncNo(idx); }
306
313 virtual UInt_t GetFuncIndex(Int_t funNo) { return fFuncHandler->GetFuncIndex(funNo); }
314
322 virtual Bool_t CheckMapAndParamRange(UInt_t mapSize, UInt_t paramSize)
323 { return fFuncHandler->CheckMapAndParamRange(mapSize, paramSize); }
324
334 virtual Double_t EvalFunc(UInt_t i, std::vector<Int_t> map, std::vector<Double_t> param, PMetaData metaData)
335 { return fFuncHandler->Eval(i, map, param, metaData); }
336
343 virtual UInt_t GetNoOfFitParameters(UInt_t idx);
344
351 virtual Int_t ParameterInUse(UInt_t paramNo);
352
360 virtual void GetGroupingString(Int_t runNo, TString detector, TString &groupingStr);
361
370 virtual Bool_t EstimateN0();
371
374 virtual std::string GetLastErrorMsg() { return fLastErrorMsg.str(); }
375
376 private:
379
380 TString fFileName;
382 TString fTitle;
392
394
395 std::unique_ptr<PFunctionHandler> fFuncHandler;
396
398
400
401 std::stringstream fLastErrorMsg;
402
404 virtual Bool_t HandleFitParameterEntry(PMsrLines &line);
406 virtual Bool_t HandleTheoryEntry(PMsrLines &line);
408 virtual Bool_t HandleFunctionsEntry(PMsrLines &line);
410 virtual Bool_t HandleGlobalEntry(PMsrLines &line);
412 virtual Bool_t HandleRunEntry(PMsrLines &line);
414 virtual Bool_t HandleCommandsEntry(PMsrLines &line);
416 virtual Bool_t HandleFourierEntry(PMsrLines &line);
418 virtual Bool_t HandlePlotEntry(PMsrLines &line);
420 virtual Bool_t HandleStatisticEntry(PMsrLines &line);
421
423 virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run);
424
428 virtual void RemoveComment(const TString &str, TString &truncStr);
430 virtual Bool_t ParseFourierPhaseValueVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
432 virtual Bool_t ParseFourierPhaseParVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
434 virtual Bool_t ParseFourierPhaseParIterVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
435
437 virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no);
438
440 virtual UInt_t NeededPrecision(Double_t dval, UInt_t precLimit=13);
442 virtual UInt_t LastSignificant(Double_t dval, UInt_t precLimit=6);
443
445 virtual void MakeDetectorGroupingString(TString str, PIntVector &group, TString &result, Bool_t includeDetector = true);
447 virtual TString BeautifyFourierPhaseParameterString();
448
450 virtual void CheckLegacyLifetimecorrection();
452 virtual Bool_t CheckRunBlockIntegrity();
454 virtual Bool_t CheckUniquenessOfParamNames(UInt_t &parX, UInt_t &parY);
456 virtual Bool_t CheckMaps();
458 virtual Bool_t CheckFuncs();
460 virtual Bool_t CheckHistoGrouping();
462 virtual Bool_t CheckAddRunParameters();
464 virtual Bool_t CheckRRFSettings();
466 virtual Bool_t CheckRealFFT();
468 virtual void CheckMaxLikelihood();
469};
470
471#endif // _PMSRHANDLER_H_
std::vector< PMsrRunBlock > PMsrRunList
Definition PMusr.h:1245
std::vector< PMsrPlotStructure > PMsrPlotList
Definition PMusr.h:1312
std::vector< PMsrLineStructure > PMsrLines
Definition PMusr.h:989
std::vector< Int_t > PIntVector
Definition PMusr.h:367
std::vector< PMsrParamStructure > PMsrParamList
Definition PMusr.h:1022
virtual Bool_t CheckMaps()
Validates that all map indices are within parameter range.
virtual UInt_t GetNoOfFitParameters(UInt_t idx)
virtual UInt_t NeededPrecision(Double_t dval, UInt_t precLimit=13)
Calculates precision needed for formatting a double value.
virtual Double_t EvalFunc(UInt_t i, std::vector< Int_t > map, std::vector< Double_t > param, PMetaData metaData)
virtual Bool_t ParseFourierPhaseValueVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)
Parses Fourier phase value vector.
virtual Bool_t CheckHistoGrouping()
Checks histogram grouping consistency across runs.
virtual void SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin)
virtual Bool_t SetMsrParamStep(UInt_t i, Double_t value)
virtual Bool_t CheckRRFSettings()
Validates RRF (Rotating Reference Frame) settings.
virtual Bool_t EstimateN0()
Bool_t fFourierOnly
Flag indicating Fourier transform only mode (for musrFT)
virtual PMsrLines * GetMsrFunctions()
Returns pointer to FUNCTIONS block lines.
virtual PMsrLines * GetMsrCommands()
Returns pointer to COMMANDS block lines.
std::stringstream fLastErrorMsg
Stream accumulating error messages during parsing.
virtual UInt_t GetFuncNo(Int_t idx)
std::unique_ptr< PFunctionHandler > fFuncHandler
Handler for parsing and evaluating user-defined functions.
virtual UInt_t GetNoOfParams()
Returns the number of fit parameters in FITPARAMETER block.
virtual void SetMsrAddT0Entry(UInt_t runNo, UInt_t addRunIdx, UInt_t histoIdx, Double_t bin)
virtual Bool_t HandleGlobalEntry(PMsrLines &line)
Parses GLOBAL block entries.
TString fTitle
MSR file title string.
virtual void SetMsrT0Entry(UInt_t runNo, UInt_t idx, Double_t bin)
virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run)
Determines which parameters are used in theory and functions.
virtual void SetMsrDataRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin)
virtual Int_t GetNoOfFuncs()
Returns the number of user-defined functions in FUNCTIONS block.
virtual PMsrGlobalBlock * GetMsrGlobal()
Returns pointer to GLOBAL block settings.
virtual Bool_t HandleFourierEntry(PMsrLines &line)
Parses FOURIER block entries.
virtual Bool_t HandleFitParameterEntry(PMsrLines &line)
Parses FITPARAMETER block entries.
PMsrGlobalBlock fGlobal
Global block settings (fit type, data format, etc.)
virtual ~PMsrHandler()
Destructor that cleans up all data structures.
virtual Bool_t CheckRunBlockIntegrity()
Validates RUN block structure and consistency.
virtual TString * GetMsrTitle()
Returns pointer to MSR file title string.
Bool_t fCopyStatisticsBlock
If true, copy old statistics block (musrt0); if false, write new one (musrfit)
virtual Bool_t CheckAddRunParameters()
Validates addrun parameter references.
virtual PMsrParamList * GetMsrParamList()
Returns pointer to fit parameter list.
virtual Bool_t SetMsrParamPosError(UInt_t i, Double_t value)
PMsrStatisticStructure fStatistic
Fit statistics (χ², NDF, convergence status)
virtual Bool_t HandleTheoryEntry(PMsrLines &line)
Parses THEORY block entries.
virtual Bool_t ParseFourierPhaseParIterVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)
Parses Fourier phase parameter iteration vector.
virtual Bool_t SetMsrParamValue(UInt_t i, Double_t value)
virtual Bool_t SetMsrParamPosErrorPresent(UInt_t i, Bool_t value)
PIntVector fParamInUse
Flags indicating which parameters are actually used in theory/functions.
virtual TString BeautifyFourierPhaseParameterString()
Formats Fourier phase parameter string for display.
virtual void SetMsrStatisticConverged(Bool_t converged)
virtual void SetMsrStatisticMin(Double_t min)
virtual Bool_t CheckMapAndParamRange(UInt_t mapSize, UInt_t paramSize)
PMsrLines fFunctions
User-defined functions block lines.
virtual std::string GetLastErrorMsg()
virtual Int_t WriteMsrFile(const Char_t *filename, std::map< UInt_t, TString > *commentsPAR=0, std::map< UInt_t, TString > *commentsTHE=0, std::map< UInt_t, TString > *commentsFUN=0, std::map< UInt_t, TString > *commentsRUN=0)
Writes an MSR file from internal data structures.
virtual Bool_t HandleCommandsEntry(PMsrLines &line)
Parses COMMANDS block entries.
virtual void SetMsrTitle(const TString &title)
virtual TString * GetMsrFileDirectoryPath()
Returns pointer to MSR file directory path.
virtual Bool_t CheckRealFFT()
Checks if real FFT requirements are met.
virtual Bool_t HandleStatisticEntry(PMsrLines &line)
Parses STATISTIC block entries.
virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no)
Extracts number from string with specific filter pattern.
virtual Bool_t HandleRunEntry(PMsrLines &line)
Parses RUN block entries.
virtual UInt_t GetNoOfRuns()
Returns the number of RUN blocks in MSR file.
virtual PMsrLines * GetMsrTheory()
Returns pointer to THEORY block lines.
virtual PMsrRunList * GetMsrRunList()
Returns pointer to list of RUN blocks.
virtual PMsrPlotList * GetMsrPlotList()
Returns pointer to list of PLOT blocks.
virtual UInt_t LastSignificant(Double_t dval, UInt_t precLimit=6)
Finds position of last significant digit in a double value.
virtual Int_t ReadMsrFile()
Reads and parses the MSR file.
virtual Bool_t ParseFourierPhaseParVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)
Parses Fourier phase parameter vector.
virtual void CheckMaxLikelihood()
Validates maximum likelihood fit settings.
virtual const TString & GetFileName() const
Returns the MSR file name.
virtual void RemoveComment(const TString &str, TString &truncStr)
Removes comments from MSR file line.
PMsrRunList fRuns
List of RUN blocks with data file specifications.
virtual Bool_t HandleFunctionsEntry(PMsrLines &line)
Parses FUNCTIONS block entries.
virtual Int_t WriteMsrLogFile(const Bool_t messages=true)
Writes an MSR log file (.mlog) with parsed MSR content.
virtual void GetGroupingString(Int_t runNo, TString detector, TString &groupingStr)
TString fMsrFileDirectoryPath
Directory path of the MSR file.
PMsrLines fTheory
Theory block lines defining asymmetry/relaxation functions.
PStartupOptions * fStartupOptions
Pointer to startup options from musrfit_startup.xml.
virtual void SetMsrStatisticNdf(UInt_t ndf)
virtual PMsrFourierStructure * GetMsrFourierList()
Returns pointer to FOURIER block settings.
TString fFileName
MSR file name (with path)
virtual UInt_t GetFuncIndex(Int_t funNo)
PMsrFourierStructure fFourier
Fourier transform parameters and settings.
virtual Bool_t CheckFuncs()
Validates user-defined functions syntax and parameter usage.
PMsrHandler(const Char_t *fileName, PStartupOptions *startupOptions=0, const Bool_t fourierOnly=false)
Constructor that initializes the MSR handler.
virtual PMsrStatisticStructure * GetMsrStatistic()
Returns pointer to STATISTIC block.
virtual Int_t ParameterInUse(UInt_t paramNo)
virtual void MakeDetectorGroupingString(TString str, PIntVector &group, TString &result, Bool_t includeDetector=true)
Creates detector grouping string from integer vector.
virtual void CopyMsrStatisticBlock()
Flags that STATISTIC block should be copied as-is (for musrt0)
virtual void InitFourierParameterStructure(PMsrFourierStructure &fourier)
Initializes Fourier parameter structure with default values.
Int_t fMsrBlockCounter
Counter to track current MSR block during parsing.
virtual void CheckLegacyLifetimecorrection()
Checks for deprecated lifetimecorrection syntax and warns user.
PMsrLines fCommands
MINUIT commands block lines.
PMsrParamList fParam
List of fit parameters with values, errors, constraints.
virtual Bool_t HandlePlotEntry(PMsrLines &line)
Parses PLOT block entries.
PMsrPlotList fPlots
List of PLOT blocks with plotting parameters.
virtual Bool_t CheckUniquenessOfParamNames(UInt_t &parX, UInt_t &parY)
Checks that all parameter names are unique.