musrfit 1.12.1
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
154 virtual Int_t WriteMsrLogFile(const Bool_t messages = true, const Bool_t addMissingT0s = false);
155
170 virtual Int_t WriteMsrFile(const Char_t *filename, std::map<UInt_t, TString> *commentsPAR = 0, std::map<UInt_t, TString> *commentsTHE = 0, \
171 std::map<UInt_t, TString> *commentsFUN = 0, std::map<UInt_t, TString> *commentsRUN = 0);
172
174 virtual TString* GetMsrTitle() { return &fTitle; }
176 virtual PMsrParamList* GetMsrParamList() { return &fParam; }
178 virtual PMsrLines* GetMsrTheory() { return &fTheory; }
180 virtual PMsrLines* GetMsrFunctions() { return &fFunctions; }
182 virtual PMsrGlobalBlock* GetMsrGlobal() { return &fGlobal; }
184 virtual PMsrRunList* GetMsrRunList() { return &fRuns; }
186 virtual PMsrLines* GetMsrCommands() { return &fCommands; }
190 virtual PMsrPlotList* GetMsrPlotList() { return &fPlots; }
193
195 virtual TString* GetMsrFileDirectoryPath() { return &fMsrFileDirectoryPath; }
196
198 virtual UInt_t GetNoOfRuns() { return fRuns.size(); }
199
201 virtual UInt_t GetNoOfParams() { return fParam.size(); }
203 virtual const TString& GetFileName() const { return fFileName; }
204
207 virtual void SetMsrTitle(const TString &title) { fTitle = title; }
208
216 virtual Bool_t SetMsrParamValue(UInt_t i, Double_t value);
217
225 virtual Bool_t SetMsrParamStep(UInt_t i, Double_t value);
226
234 virtual Bool_t SetMsrParamPosErrorPresent(UInt_t i, Bool_t value);
235
243 virtual Bool_t SetMsrParamPosError(UInt_t i, Double_t value);
244
252 virtual void SetMsrT0Entry(UInt_t runNo, UInt_t idx, Double_t bin);
253
262 virtual void SetMsrAddT0Entry(UInt_t runNo, UInt_t addRunIdx, UInt_t histoIdx, Double_t bin);
263
271 virtual void SetMsrDataRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
272
280 virtual void SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
281
284
287 virtual void SetMsrStatisticConverged(Bool_t converged) { fStatistic.fValid = converged; }
288
291 virtual void SetMsrStatisticMin(Double_t min) { fStatistic.fMin = min; }
292
295 virtual void SetMsrStatisticNdf(UInt_t ndf) { fStatistic.fNdf = ndf; }
296
298 virtual Int_t GetNoOfFuncs() { return fFuncHandler->GetNoOfFuncs(); }
299
306 virtual UInt_t GetFuncNo(Int_t idx) { return fFuncHandler->GetFuncNo(idx); }
307
314 virtual UInt_t GetFuncIndex(Int_t funNo) { return fFuncHandler->GetFuncIndex(funNo); }
315
323 virtual Bool_t CheckMapAndParamRange(UInt_t mapSize, UInt_t paramSize)
324 { return fFuncHandler->CheckMapAndParamRange(mapSize, paramSize); }
325
335 virtual Double_t EvalFunc(UInt_t i, std::vector<Int_t> map, std::vector<Double_t> param, PMetaData metaData)
336 { return fFuncHandler->Eval(i, map, param, metaData); }
337
344 virtual UInt_t GetNoOfFitParameters(UInt_t idx);
345
352 virtual Int_t ParameterInUse(UInt_t paramNo);
353
361 virtual void GetGroupingString(Int_t runNo, TString detector, TString &groupingStr);
362
371 virtual Bool_t EstimateN0();
372
375 virtual std::string GetLastErrorMsg() { return fLastErrorMsg.str(); }
376
377 private:
380
381 TString fFileName;
383 TString fTitle;
393
395
396 std::unique_ptr<PFunctionHandler> fFuncHandler;
397
399
401
402 std::stringstream fLastErrorMsg;
403
405 virtual Bool_t HandleFitParameterEntry(PMsrLines &line);
407 virtual Bool_t HandleTheoryEntry(PMsrLines &line);
409 virtual Bool_t HandleFunctionsEntry(PMsrLines &line);
411 virtual Bool_t HandleGlobalEntry(PMsrLines &line);
413 virtual Bool_t HandleRunEntry(PMsrLines &line);
415 virtual Bool_t HandleCommandsEntry(PMsrLines &line);
417 virtual Bool_t HandleFourierEntry(PMsrLines &line);
419 virtual Bool_t HandlePlotEntry(PMsrLines &line);
421 virtual Bool_t HandleStatisticEntry(PMsrLines &line);
422
424 virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run);
425
429 virtual void RemoveComment(const TString &str, TString &truncStr);
431 virtual Bool_t ParseFourierPhaseValueVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
433 virtual Bool_t ParseFourierPhaseParVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
435 virtual Bool_t ParseFourierPhaseParIterVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
436
438 virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no);
439
441 virtual UInt_t NeededPrecision(Double_t dval, UInt_t precLimit=13);
443 virtual UInt_t LastSignificant(Double_t dval, UInt_t precLimit=6);
444
446 virtual void MakeDetectorGroupingString(TString str, PIntVector &group, TString &result, Bool_t includeDetector = true);
448 virtual TString BeautifyFourierPhaseParameterString();
449
451 virtual void CheckLegacyLifetimecorrection();
453 virtual Bool_t CheckRunBlockIntegrity();
455 virtual Bool_t CheckUniquenessOfParamNames(UInt_t &parX, UInt_t &parY);
457 virtual Bool_t CheckMaps();
459 virtual Bool_t CheckFuncs();
461 virtual Bool_t CheckHistoGrouping();
463 virtual Bool_t CheckAddRunParameters();
465 virtual Bool_t CheckRRFSettings();
467 virtual Bool_t CheckRealFFT();
469 virtual void CheckMaxLikelihood();
470};
471
472#endif // _PMSRHANDLER_H_
std::vector< PMsrRunBlock > PMsrRunList
Definition PMusr.h:1263
std::vector< PMsrPlotStructure > PMsrPlotList
Definition PMusr.h:1330
std::vector< PMsrLineStructure > PMsrLines
Definition PMusr.h:1007
std::vector< Int_t > PIntVector
Definition PMusr.h:381
std::vector< PMsrParamStructure > PMsrParamList
Definition PMusr.h:1040
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, const Bool_t addMissingT0s=false)
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.