musrfit  1.9.2
PMsr2Data.h
Go to the documentation of this file.
1 /***************************************************************************
2 
3  PMsr2Data.h
4 
5  Author: Bastian M. Wojek / Andreas Suter
6  e-mail: andreas.suter@psi.ch
7 
8 ***************************************************************************/
9 
10 /***************************************************************************
11  * Copyright (C) 2009-2023 by Bastian M. Wojek / 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 // note: msr2data is on purpose implemented in a way that shows string handling can be done solely
31 // using std::string, boost and related standard C++ features
32 // This implies, however, occasionally strange constructs when interoperating with PMusr-classes
33 // which mostly rely on ROOT's TString.
34 
35 #ifndef _PMSR2DATA_H_
36 #define _PMSR2DATA_H_
37 
38 #include <string>
39 #include <sstream>
40 
41 #include "PRunDataHandler.h"
42 #include "PStartupHandler.h"
43 
44 #include <TSAXParser.h>
45 
46 //-------------------------------------------------------------
51 class PMsr2Data
52 {
53  public:
54  PMsr2Data(const std::string&); // File extension
55  ~PMsr2Data();
56 
57  int SetRunNumbers(unsigned int); // single run given
58  int SetRunNumbers(unsigned int, unsigned int); // run list specified through first and last run number
59  int SetRunNumbers(const std::string&); // run list file given
60  int SetRunNumbers(const std::vector<unsigned int>&); // explicit run list specified using [ ]
61  unsigned int GetPresentRun() const;
62 
63  int DetermineRunNumberDigits(unsigned int, bool) const;
64  int CheckRunNumbersInRange() const;
65 
66  int ParseXmlStartupFile();
67  int ReadMsrFile(const std::string&) const;
68  int ReadRunDataFile();
69 
70  bool PrepareNewInputFile(unsigned int, bool) const; // template
71  bool PrepareGlobalInputFile(unsigned int, const std::string&, unsigned int) const; // generate msr-input file for a global fit
72 
73  int WriteOutput(const std::string&, const std::vector<unsigned int>&, bool, unsigned int, bool global = false, unsigned int counter = 0) const;
74 
75  private:
76  bool PrepareNewSortedInputFile(unsigned int) const; // template
78 
79  void WriteValue(std::fstream &outFile, const double &value, const unsigned int &width) const;
80  void WriteValue(std::fstream &outFile, const double &value, const double &errValue, const unsigned int &width, const bool &db) const;
81  int GetFirstSignificantDigit(const double &value) const;
82  bool InParameterList(const unsigned int &paramValue, const std::vector<unsigned int>&) const;
83 
84  std::string fFileExtension;
85  std::vector<unsigned int> fRunVector;
86  mutable std::vector<unsigned int>::const_iterator fRunVectorIter;
88  std::vector<std::string> fIndVar;
89  std::unique_ptr<std::ifstream> fRunListFileStream;
90  std::unique_ptr<TSAXParser> fSaxParser;
91  std::unique_ptr<PStartupHandler> fStartupHandler;
92  mutable std::unique_ptr<PRunDataHandler> fDataHandler;
93  mutable std::unique_ptr<PMsrHandler> fMsrHandler;
94  mutable unsigned int fNumGlobalParam;
95  mutable unsigned int fNumSpecParam;
96  mutable unsigned int fNumTempRunBlocks;
97  mutable unsigned int fRunNumberDigits;
98  mutable bool fHeaderWritten;
99 };
100 
101 
102 #endif // _PMSR2DATA_H_
std::unique_ptr< PRunDataHandler > fDataHandler
Definition: PMsr2Data.h:92
unsigned int fNumGlobalParam
Definition: PMsr2Data.h:94
unsigned int fNumTempRunBlocks
Definition: PMsr2Data.h:96
unsigned int fRunNumberDigits
Definition: PMsr2Data.h:97
int ParseXmlStartupFile()
Definition: PMsr2Data.cpp:374
int DetermineRunNumberDigits(unsigned int, bool) const
Definition: PMsr2Data.cpp:95
int CheckRunNumbersInRange() const
Definition: PMsr2Data.cpp:185
bool PrepareGlobalInputFile(unsigned int, const std::string &, unsigned int) const
Definition: PMsr2Data.cpp:633
PMsrHandler * GetSingleRunMsrFile() const
Definition: PMsr2Data.cpp:432
int WriteOutput(const std::string &, const std::vector< unsigned int > &, bool, unsigned int, bool global=false, unsigned int counter=0) const
Definition: PMsr2Data.cpp:1622
std::unique_ptr< PStartupHandler > fStartupHandler
Definition: PMsr2Data.h:91
std::string fFileExtension
Definition: PMsr2Data.h:84
bool fHeaderWritten
Definition: PMsr2Data.h:98
std::unique_ptr< TSAXParser > fSaxParser
Definition: PMsr2Data.h:90
std::unique_ptr< std::ifstream > fRunListFileStream
Definition: PMsr2Data.h:89
std::vector< std::string > fIndVar
Definition: PMsr2Data.h:88
std::vector< unsigned int > fRunVector
Definition: PMsr2Data.h:85
int ReadMsrFile(const std::string &) const
Definition: PMsr2Data.cpp:402
int SetRunNumbers(unsigned int)
Definition: PMsr2Data.cpp:227
bool PrepareNewSortedInputFile(unsigned int) const
Definition: PMsr2Data.cpp:1516
bool InParameterList(const unsigned int &paramValue, const std::vector< unsigned int > &) const
Definition: PMsr2Data.cpp:2526
unsigned int fNumSpecParam
Definition: PMsr2Data.h:95
unsigned int GetPresentRun() const
Definition: PMsr2Data.cpp:209
int GetFirstSignificantDigit(const double &value) const
Definition: PMsr2Data.cpp:2496
void WriteValue(std::fstream &outFile, const double &value, const unsigned int &width) const
Definition: PMsr2Data.cpp:2443
PMsr2Data(const std::string &)
Definition: PMsr2Data.cpp:58
bool fRunListFile
Definition: PMsr2Data.h:87
std::vector< unsigned int >::const_iterator fRunVectorIter
Definition: PMsr2Data.h:86
std::unique_ptr< PMsrHandler > fMsrHandler
Definition: PMsr2Data.h:93
bool PrepareNewInputFile(unsigned int, bool) const
Definition: PMsr2Data.cpp:494
int ReadRunDataFile()
Definition: PMsr2Data.cpp:465