musrfit 1.12.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-2026 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//-------------------------------------------------------------
81{
82 public:
83 //-----------------------------------------------------------------------
89 PMsr2Data(const std::string& fileExtension);
90
91 //-----------------------------------------------------------------------
95 ~PMsr2Data();
96
97 //-----------------------------------------------------------------------
104 int SetRunNumbers(unsigned int runNumber);
105
106 //-----------------------------------------------------------------------
114 int SetRunNumbers(unsigned int firstRun, unsigned int lastRun);
115
116 //-----------------------------------------------------------------------
125 int SetRunNumbers(const std::string& runListFileName);
126
127 //-----------------------------------------------------------------------
134 int SetRunNumbers(const std::vector<unsigned int>& runVector);
135
136 //-----------------------------------------------------------------------
142 unsigned int GetPresentRun() const;
143
144 //-----------------------------------------------------------------------
155 int DetermineRunNumberDigits(unsigned int maxRunNumber, bool templateFile) const;
156
157 //-----------------------------------------------------------------------
163 int CheckRunNumbersInRange() const;
164
165 //-----------------------------------------------------------------------
175
176 //-----------------------------------------------------------------------
183 int ReadMsrFile(const std::string& msrFileName) const;
184
185 //-----------------------------------------------------------------------
191 int ReadRunDataFile();
192
193 //-----------------------------------------------------------------------
204 bool PrepareNewInputFile(unsigned int templateNumber, bool sorted) const;
205
206 //-----------------------------------------------------------------------
218 bool PrepareGlobalInputFile(unsigned int templateNumber, const std::string& globalOutputFile, unsigned int runListSize, const std::string& musrfitOptions = "") const;
219
220 //-----------------------------------------------------------------------
234 int WriteOutput(const std::string& outputFileName, const std::vector<unsigned int>& parameters, bool dbFormat, unsigned int precision, bool global = false, unsigned int counter = 0) const;
235
236 private:
237 //-----------------------------------------------------------------------
246 bool PrepareNewSortedInputFile(unsigned int templateNumber) const;
247
248 //-----------------------------------------------------------------------
255
256 //-----------------------------------------------------------------------
264 void WriteValue(std::fstream &outFile, const double &value, const unsigned int &width) const;
265
266 //-----------------------------------------------------------------------
278 void WriteValue(std::fstream &outFile, const double &value, const double &errValue, const unsigned int &width, const bool &db) const;
279
280 //-----------------------------------------------------------------------
289 int GetFirstSignificantDigit(const double &value) const;
290
291 //-----------------------------------------------------------------------
299 bool InParameterList(const unsigned int &paramValue, const std::vector<unsigned int>& paramList) const;
300
301 //-----------------------------------------------------------------------
313 std::string StripRunNumberSuffix(const std::string &name, const std::string &runNumberStr) const;
314
315 std::string fFileExtension;
316 std::vector<unsigned int> fRunVector;
317 mutable std::vector<unsigned int>::const_iterator fRunVectorIter;
319 std::vector<std::string> fIndVar;
320 std::unique_ptr<std::ifstream> fRunListFileStream;
321 std::unique_ptr<TSAXParser> fSaxParser;
322 std::unique_ptr<PStartupHandler> fStartupHandler;
323 mutable std::unique_ptr<PRunDataHandler> fDataHandler;
324 mutable std::unique_ptr<PMsrHandler> fMsrHandler;
325 mutable unsigned int fNumGlobalParam;
326 mutable unsigned int fNumSpecParam;
327 mutable unsigned int fNumTempRunBlocks;
328 mutable unsigned int fRunNumberDigits;
329 mutable bool fHeaderWritten;
330};
331
332
333#endif // _PMSR2DATA_H_
PMsr2Data(const std::string &fileExtension)
Constructor that initializes the msr2data handler.
Definition PMsr2Data.cpp:73
unsigned int fNumSpecParam
Number of spectrum-specific parameters.
Definition PMsr2Data.h:326
int ReadMsrFile(const std::string &msrFileName) const
Reads and parses an msr-file.
std::unique_ptr< std::ifstream > fRunListFileStream
Stream for reading run list file.
Definition PMsr2Data.h:320
PMsrHandler * GetSingleRunMsrFile() const
Retrieves msr-file handler for a single run.
int WriteOutput(const std::string &outputFileName, const std::vector< unsigned int > &parameters, bool dbFormat, unsigned int precision, bool global=false, unsigned int counter=0) const
Writes extracted parameters to output file.
bool PrepareNewInputFile(unsigned int templateNumber, bool sorted) const
Generates a new msr-file from a template.
int CheckRunNumbersInRange() const
Validates that all run numbers are within acceptable ranges.
unsigned int fNumTempRunBlocks
Number of temporary run blocks.
Definition PMsr2Data.h:327
std::vector< unsignedint >::const_iterator fRunVectorIter
Iterator for current position in run vector.
Definition PMsr2Data.h:317
int ReadRunDataFile()
Reads the run data file for the current run.
std::unique_ptr< PMsrHandler > fMsrHandler
Handler for msr-file parsing and generation.
Definition PMsr2Data.h:324
std::string StripRunNumberSuffix(const std::string &name, const std::string &runNumberStr) const
Strips the trailing run-number suffix (and an optional preceding separator such as '_') from a run-sp...
std::unique_ptr< TSAXParser > fSaxParser
XML SAX parser for startup file.
Definition PMsr2Data.h:321
std::string fFileExtension
File extension for data files (e.g., "bin", "root").
Definition PMsr2Data.h:315
int GetFirstSignificantDigit(const double &value) const
Determines the first significant digit position of a value.
unsigned int fNumGlobalParam
Number of global parameters in fit.
Definition PMsr2Data.h:325
std::unique_ptr< PStartupHandler > fStartupHandler
Handler for XML startup file configuration.
Definition PMsr2Data.h:322
int SetRunNumbers(unsigned int runNumber)
Sets a single run number for processing.
void WriteValue(std::fstream &outFile, const double &value, const unsigned int &width) const
Writes a single numeric value to output stream.
bool fHeaderWritten
Flag tracking if output header has been written.
Definition PMsr2Data.h:329
int ParseXmlStartupFile()
Parses the XML startup file for configuration.
unsigned int fRunNumberDigits
Number of digits for run number formatting.
Definition PMsr2Data.h:328
~PMsr2Data()
Destructor that cleans up resources.
Definition PMsr2Data.cpp:93
bool PrepareNewSortedInputFile(unsigned int templateNumber) const
Generates a sorted msr-file from a template.
std::vector< std::string > fIndVar
Independent variables for output.
Definition PMsr2Data.h:319
std::vector< unsigned int > fRunVector
Vector of run numbers to process.
Definition PMsr2Data.h:316
unsigned int GetPresentRun() const
Gets the current run number being processed.
int DetermineRunNumberDigits(unsigned int maxRunNumber, bool templateFile) const
Determines the number of digits needed for run number formatting.
bool fRunListFile
Flag indicating if run list is from a file.
Definition PMsr2Data.h:318
bool PrepareGlobalInputFile(unsigned int templateNumber, const std::string &globalOutputFile, unsigned int runListSize, const std::string &musrfitOptions="") const
Generates an msr-file for global (multi-run) fitting.
bool InParameterList(const unsigned int &paramValue, const std::vector< unsigned int > &paramList) const
Checks if a parameter is in the output parameter list.
std::unique_ptr< PRunDataHandler > fDataHandler
Handler for run data files.
Definition PMsr2Data.h:323
MSR file parser and manager for the musrfit framework.