musrfit  1.9.2
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-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 _PMSRHANDLER_H_
31 #define _PMSRHANDLER_H_
32 
33 #include <memory>
34 
35 #include <TString.h>
36 #include <TComplex.h>
37 
38 #include "PMusr.h"
39 #include "PFunctionHandler.h"
40 #include "PFunctionGrammar.h"
41 #include "PFunction.h"
42 
43 //-------------------------------------------------------------
48 {
49  public:
50  PMsrHandler(const Char_t *fileName, PStartupOptions *startupOptions=0, const Bool_t fourierOnly=false);
51  virtual ~PMsrHandler();
52 
53  virtual Int_t ReadMsrFile();
54  virtual Int_t WriteMsrLogFile(const Bool_t messages = true);
55  virtual Int_t WriteMsrFile(const Char_t *filename, std::map<UInt_t, TString> *commentsPAR = 0, std::map<UInt_t, TString> *commentsTHE = 0, \
56  std::map<UInt_t, TString> *commentsFUN = 0, std::map<UInt_t, TString> *commentsRUN = 0);
57 
58  virtual TString* GetMsrTitle() { return &fTitle; }
59  virtual PMsrParamList* GetMsrParamList() { return &fParam; }
60  virtual PMsrLines* GetMsrTheory() { return &fTheory; }
61  virtual PMsrLines* GetMsrFunctions() { return &fFunctions; }
62  virtual PMsrGlobalBlock* GetMsrGlobal() { return &fGlobal; }
63  virtual PMsrRunList* GetMsrRunList() { return &fRuns; }
64  virtual PMsrLines* GetMsrCommands() { return &fCommands; }
66  virtual PMsrPlotList* GetMsrPlotList() { return &fPlots; }
68 
69  virtual TString* GetMsrFileDirectoryPath() { return &fMsrFileDirectoryPath; }
70 
71  virtual UInt_t GetNoOfRuns() { return fRuns.size(); }
72 
73  virtual UInt_t GetNoOfParams() { return fParam.size(); }
74  virtual const TString& GetFileName() const { return fFileName; }
75 
76  virtual void SetMsrTitle(const TString &title) { fTitle = title; }
77 
78  virtual Bool_t SetMsrParamValue(UInt_t i, Double_t value);
79  virtual Bool_t SetMsrParamStep(UInt_t i, Double_t value);
80  virtual Bool_t SetMsrParamPosErrorPresent(UInt_t i, Bool_t value);
81  virtual Bool_t SetMsrParamPosError(UInt_t i, Double_t value);
82 
83  virtual void SetMsrT0Entry(UInt_t runNo, UInt_t idx, Double_t bin);
84  virtual void SetMsrAddT0Entry(UInt_t runNo, UInt_t addRunIdx, UInt_t histoIdx, Double_t bin);
85  virtual void SetMsrDataRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
86  virtual void SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin);
87 
88  virtual void CopyMsrStatisticBlock() { fCopyStatisticsBlock = true; }
89  virtual void SetMsrStatisticConverged(Bool_t converged) { fStatistic.fValid = converged; }
90  virtual void SetMsrStatisticMin(Double_t min) { fStatistic.fMin = min; }
91  virtual void SetMsrStatisticNdf(UInt_t ndf) { fStatistic.fNdf = ndf; }
92 
93  virtual Int_t GetNoOfFuncs() { return fFuncHandler->GetNoOfFuncs(); }
94  virtual UInt_t GetFuncNo(Int_t idx) { return fFuncHandler->GetFuncNo(idx); }
95  virtual UInt_t GetFuncIndex(Int_t funNo) { return fFuncHandler->GetFuncIndex(funNo); }
96  virtual Bool_t CheckMapAndParamRange(UInt_t mapSize, UInt_t paramSize)
97  { return fFuncHandler->CheckMapAndParamRange(mapSize, paramSize); }
98  virtual Double_t EvalFunc(UInt_t i, std::vector<Int_t> map, std::vector<Double_t> param, PMetaData metaData)
99  { return fFuncHandler->Eval(i, map, param, metaData); }
100  virtual UInt_t GetNoOfFitParameters(UInt_t idx);
101  virtual Int_t ParameterInUse(UInt_t paramNo);
102  virtual Bool_t CheckRunBlockIntegrity();
103  virtual Bool_t CheckUniquenessOfParamNames(UInt_t &parX, UInt_t &parY);
104  virtual Bool_t CheckMaps();
105  virtual Bool_t CheckFuncs();
106  virtual Bool_t CheckHistoGrouping();
107  virtual Bool_t CheckAddRunParameters();
108  virtual Bool_t CheckRRFSettings();
109  virtual void CheckMaxLikelihood();
110 
111  virtual void GetGroupingString(Int_t runNo, TString detector, TString &groupingStr);
112  virtual Bool_t EstimateN0();
113 
114  private:
115  Bool_t fFourierOnly;
117 
118  TString fFileName;
120  TString fTitle;
130 
132 
133  std::unique_ptr<PFunctionHandler> fFuncHandler;
134 
136 
138 
139  virtual Bool_t HandleFitParameterEntry(PMsrLines &line);
140  virtual Bool_t HandleTheoryEntry(PMsrLines &line);
141  virtual Bool_t HandleFunctionsEntry(PMsrLines &line);
142  virtual Bool_t HandleGlobalEntry(PMsrLines &line);
143  virtual Bool_t HandleRunEntry(PMsrLines &line);
144  virtual Bool_t HandleCommandsEntry(PMsrLines &line);
145  virtual Bool_t HandleFourierEntry(PMsrLines &line);
146  virtual Bool_t HandlePlotEntry(PMsrLines &line);
147  virtual Bool_t HandleStatisticEntry(PMsrLines &line);
148 
149  virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run);
150 
152  virtual void RemoveComment(const TString &str, TString &truncStr);
153  virtual Bool_t ParseFourierPhaseValueVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
154  virtual Bool_t ParseFourierPhaseParVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
155  virtual Bool_t ParseFourierPhaseParIterVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error);
156 
157  virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no);
158 
159  virtual UInt_t NeededPrecision(Double_t dval, UInt_t precLimit=13);
160  virtual UInt_t LastSignificant(Double_t dval, UInt_t precLimit=6);
161 
162  virtual void MakeDetectorGroupingString(TString str, PIntVector &group, TString &result, Bool_t includeDetector = true);
163  virtual TString BeautifyFourierPhaseParameterString();
164 
165  virtual void CheckLegacyLifetimecorrection();
166 };
167 
168 #endif // _PMSRHANDLER_H_
virtual ~PMsrHandler()
Definition: PMsrHandler.cpp:88
PMsrRunList fRuns
holds a list of run information
Definition: PMsrHandler.h:125
std::unique_ptr< PFunctionHandler > fFuncHandler
needed to parse functions
Definition: PMsrHandler.h:133
virtual void SetMsrStatisticConverged(Bool_t converged)
Definition: PMsrHandler.h:89
PMsrParamList fParam
holds a list of the fit parameters
Definition: PMsrHandler.h:121
Bool_t fCopyStatisticsBlock
flag, if true: just copy to old statistics block (musrt0), otherwise write a new one (musrfit) ...
Definition: PMsrHandler.h:137
PMsrPlotList fPlots
holds a list of the plot input parameters
Definition: PMsrHandler.h:128
PStartupOptions * fStartupOptions
contains information about startup options from the musrfit_startup.xml
Definition: PMsrHandler.h:116
virtual Int_t GetNoOfFuncs()
Definition: PMsrHandler.h:93
std::vector< PMsrRunBlock > PMsrRunList
Definition: PMusr.h:754
virtual Bool_t HandleTheoryEntry(PMsrLines &line)
virtual void FillParameterInUse(PMsrLines &theory, PMsrLines &funcs, PMsrLines &run)
TString fMsrFileDirectoryPath
msr-file directory path
Definition: PMsrHandler.h:119
PMsrFourierStructure fFourier
holds the parameters used for the Fourier transform
Definition: PMsrHandler.h:127
virtual Bool_t HandleRunEntry(PMsrLines &line)
virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no)
virtual void SetMsrDataRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin)
virtual Bool_t CheckAddRunParameters()
virtual UInt_t NeededPrecision(Double_t dval, UInt_t precLimit=13)
virtual void SetMsrT0Entry(UInt_t runNo, UInt_t idx, Double_t bin)
Double_t fMin
chisq or max. likelihood
Definition: PMusr.h:813
Bool_t fValid
flag showing if the statistics block is valid, i.e. a fit took place which converged ...
Definition: PMusr.h:809
std::vector< PMsrPlotStructure > PMsrPlotList
Definition: PMusr.h:802
std::vector< Int_t > PIntVector
Definition: PMusr.h:178
virtual UInt_t GetFuncIndex(Int_t funNo)
Definition: PMsrHandler.h:95
virtual Bool_t ParseFourierPhaseParIterVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)
PMsrHandler(const Char_t *fileName, PStartupOptions *startupOptions=0, const Bool_t fourierOnly=false)
Definition: PMsrHandler.cpp:52
virtual void SetMsrStatisticMin(Double_t min)
Definition: PMsrHandler.h:90
PIntVector fParamInUse
array holding the information if a particular parameter is used at all, i.e. if the theory is using i...
Definition: PMsrHandler.h:135
virtual void MakeDetectorGroupingString(TString str, PIntVector &group, TString &result, Bool_t includeDetector=true)
std::vector< PMsrParamStructure > PMsrParamList
Definition: PMusr.h:564
virtual Bool_t ParseFourierPhaseParVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)
virtual void SetMsrStatisticNdf(UInt_t ndf)
Definition: PMsrHandler.h:91
virtual Bool_t HandlePlotEntry(PMsrLines &line)
virtual Bool_t CheckHistoGrouping()
virtual PMsrRunList * GetMsrRunList()
Definition: PMsrHandler.h:63
virtual Bool_t HandleFunctionsEntry(PMsrLines &line)
virtual Int_t WriteMsrLogFile(const Bool_t messages=true)
virtual Bool_t HandleCommandsEntry(PMsrLines &line)
virtual TString * GetMsrTitle()
Definition: PMsrHandler.h:58
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)
virtual PMsrStatisticStructure * GetMsrStatistic()
Definition: PMsrHandler.h:67
virtual void SetMsrTitle(const TString &title)
Definition: PMsrHandler.h:76
PMsrStatisticStructure fStatistic
holds the statistic info
Definition: PMsrHandler.h:129
virtual Bool_t CheckUniquenessOfParamNames(UInt_t &parX, UInt_t &parY)
virtual UInt_t GetNoOfRuns()
Definition: PMsrHandler.h:71
virtual Bool_t HandleFourierEntry(PMsrLines &line)
virtual Bool_t CheckRunBlockIntegrity()
virtual UInt_t GetNoOfParams()
Definition: PMsrHandler.h:73
virtual TString * GetMsrFileDirectoryPath()
Definition: PMsrHandler.h:69
virtual Int_t ParameterInUse(UInt_t paramNo)
virtual PMsrGlobalBlock * GetMsrGlobal()
Definition: PMsrHandler.h:62
virtual Bool_t CheckMaps()
std::vector< PMsrLineStructure > PMsrLines
Definition: PMusr.h:539
PMsrLines fFunctions
holds the user defined functions
Definition: PMsrHandler.h:123
PMsrLines fCommands
holds a list of the minuit commands
Definition: PMsrHandler.h:126
virtual Bool_t CheckRRFSettings()
virtual void RemoveComment(const TString &str, TString &truncStr)
TString fFileName
file name of the msr-file
Definition: PMsrHandler.h:118
virtual Bool_t SetMsrParamStep(UInt_t i, Double_t value)
virtual void SetMsrAddT0Entry(UInt_t runNo, UInt_t addRunIdx, UInt_t histoIdx, Double_t bin)
virtual PMsrFourierStructure * GetMsrFourierList()
Definition: PMsrHandler.h:65
Int_t fMsrBlockCounter
used to select the proper msr-block
Definition: PMsrHandler.h:131
virtual void CopyMsrStatisticBlock()
Definition: PMsrHandler.h:88
virtual UInt_t GetFuncNo(Int_t idx)
Definition: PMsrHandler.h:94
virtual UInt_t LastSignificant(Double_t dval, UInt_t precLimit=6)
virtual Int_t ReadMsrFile()
virtual void InitFourierParameterStructure(PMsrFourierStructure &fourier)
virtual PMsrPlotList * GetMsrPlotList()
Definition: PMsrHandler.h:66
Bool_t fFourierOnly
flag indicating if Fourier transform only is wished. If yes, some part of the msr-file blocks are not...
Definition: PMsrHandler.h:115
virtual void CheckMaxLikelihood()
virtual Bool_t SetMsrParamValue(UInt_t i, Double_t value)
virtual PMsrLines * GetMsrTheory()
Definition: PMsrHandler.h:60
virtual UInt_t GetNoOfFitParameters(UInt_t idx)
virtual Bool_t HandleStatisticEntry(PMsrLines &line)
virtual PMsrParamList * GetMsrParamList()
Definition: PMsrHandler.h:59
virtual void GetGroupingString(Int_t runNo, TString detector, TString &groupingStr)
virtual Bool_t HandleFitParameterEntry(PMsrLines &line)
virtual Double_t EvalFunc(UInt_t i, std::vector< Int_t > map, std::vector< Double_t > param, PMetaData metaData)
Definition: PMsrHandler.h:98
UInt_t fNdf
number of degrees of freedom
Definition: PMusr.h:815
virtual PMsrLines * GetMsrFunctions()
Definition: PMsrHandler.h:61
virtual void SetMsrBkgRangeEntry(UInt_t runNo, UInt_t idx, Int_t bin)
virtual void CheckLegacyLifetimecorrection()
virtual TString BeautifyFourierPhaseParameterString()
virtual PMsrLines * GetMsrCommands()
Definition: PMsrHandler.h:64
PMsrLines fTheory
holds the theory definition
Definition: PMsrHandler.h:122
virtual Bool_t SetMsrParamPosErrorPresent(UInt_t i, Bool_t value)
TString fTitle
holds the title string of the msr-file
Definition: PMsrHandler.h:120
virtual Bool_t EstimateN0()
PMsrGlobalBlock fGlobal
holds the information of the global section
Definition: PMsrHandler.h:124
virtual Bool_t SetMsrParamPosError(UInt_t i, Double_t value)
virtual Bool_t HandleGlobalEntry(PMsrLines &line)
virtual Bool_t CheckMapAndParamRange(UInt_t mapSize, UInt_t paramSize)
Definition: PMsrHandler.h:96
virtual Bool_t CheckFuncs()
virtual const TString & GetFileName() const
Definition: PMsrHandler.h:74
virtual Bool_t ParseFourierPhaseValueVector(PMsrFourierStructure &fourier, const TString &str, Bool_t &error)