30#ifndef _PRUNDATAHANDLER_H_
31#define _PRUNDATAHANDLER_H_
57#define A2M_UNDEFINED 0
61#define A2M_MUSR_ROOT 2
63#define A2M_MUSR_ROOT_DIR 3
359 virtual Bool_t
WriteData(TString fileName=
"");
430 virtual void Init(
const Int_t tag=0);
434 virtual void TestFileName(TString &runName,
const TString &ext);
436 virtual Bool_t
FileExistsCheck(
const Bool_t fileName,
const Int_t idx);
460 virtual Double_t
ToDouble(TString &str, Bool_t &ok);
461 virtual Int_t
ToInt(TString &str, Bool_t &ok);
465 virtual TString
GetFileName(
const TString extension, Bool_t &ok);
466 virtual TString
FileNameFromTemplate(TString &fileNameTemplate, Int_t run, TString &year, Bool_t &ok);
467 virtual bool DateToISO8601(std::string inDate, std::string &iso8601Date);
468 virtual void SplitTimeDate(TString timeDate, TString &time, TString &date, Bool_t &ok);
469 virtual TString
GetMonth(Int_t month);
470 virtual TString
GetYear(Int_t month);
498 Double_t dval, factor;
505 if (nxs_file->HasDataset(
"/run/lab"))
506 sstr = nxs_file->template GetDataset<std::string>(
"/run/lab").GetData()[0];
511 if (nxs_file->HasDataset(
"/run/beamline"))
512 sstr = nxs_file->template GetDataset<std::string>(
"/run/beamline").GetData()[0];
517 if (nxs_file->HasDataset(
"/run/instrument/name"))
518 sstr = nxs_file->template GetDataset<std::string>(
"/run/instrument/name").GetData()[0];
523 if (nxs_file->HasDataset(
"/run/title"))
524 sstr = nxs_file->template GetDataset<std::string>(
"/run/title").GetData()[0];
529 if (nxs_file->HasDataset(
"/run/number"))
530 ival = nxs_file->template GetDataset<int>(
"/run/number").GetData()[0];
536 if (nxs_file->HasDataset(
"/run/sample/temperature")) {
537 auto tmp_ds = nxs_file->template GetDataset<float>(
"/run/sample/temperature");
538 dval = tmp_ds.GetData()[0];
539 if (tmp_ds.HasAttribute(
"units"))
540 sstr = std::any_cast<std::string>(tmp_ds.GetAttribute(
"units"));
541 if (sstr ==
"Celcius")
550 if (nxs_file->HasDataset(
"/run/sample/magnetic_field")) {
551 auto mag_ds = nxs_file->template GetDataset<float>(
"/run/sample/magnetic_field");
552 dval = mag_ds.GetData()[0];
553 if (mag_ds.HasAttribute(
"units"))
554 sstr = std::any_cast<std::string>(mag_ds.GetAttribute(
"units"));
567 for (UInt_t i=0; i<4; i++)
572 if (nxs_file->HasDataset(
"/run/notes"))
573 sstr = nxs_file->template GetDataset<std::string>(
"/run/notes").GetData()[0];
578 if (nxs_file->HasDataset(
"/run/sample/name"))
579 sstr = nxs_file->template GetDataset<std::string>(
"/run/sample/name").GetData()[0];
589 if (nxs_file->HasDataset(
"/run/histogram_data_1/resolution")) {
590 auto res_ds = nxs_file->template GetDataset<int>(
"/run/histogram_data_1/resolution");
591 dval = res_ds.GetData()[0];
592 if (res_ds.HasAttribute(
"units"))
593 sstr = std::any_cast<std::string>(res_ds.GetAttribute(
"units"));
594 if ((sstr ==
"picoseconds") || (sstr ==
"pico.seconds"))
601 TString date{
"n/a"}, time{
"n/a"};
602 if (nxs_file->HasDataset(
"/run/start_time"))
603 sstr = nxs_file->template GetDataset<std::string>(
"/run/start_time").GetData()[0];
614 if (nxs_file->HasDataset(
"/run/stop_time"))
615 sstr = nxs_file->template GetDataset<std::string>(
"/run/stop_time").GetData()[0];
624 if (nxs_file->HasDataset(
"/run/instrument/detector/deadtimes")) {
625 std::vector<float> dt;
626 dt = nxs_file->template GetDataset<float>(
"/run/instrument/detector/deadtimes").GetData();
629 if (nxs_file->HasDataset(
"/run/instrument/beam/frames_good")) {
630 ival = nxs_file->template GetDataset<float>(
"/run/instrument/beam/frames_good").GetData()[0];
635 if (nxs_file->HasDataset(
"/run/histogram_data_1/counts")) {
636 int t0_bin{-1}, fgb{-1}, lgb{-1}, noOfHistos{-1}, histoLength{-1};
637 auto count_ds = nxs_file->template GetDataset<int>(
"/run/histogram_data_1/counts");
638 auto count = count_ds.GetData();
640 if (count_ds.HasAttribute(
"t0_bin"))
641 t0_bin = std::any_cast<int>(count_ds.GetAttribute(
"t0_bin"));
642 if (count_ds.HasAttribute(
"first_good_bin"))
643 fgb = std::any_cast<int>(count_ds.GetAttribute(
"first_good_bin"));
644 if (count_ds.HasAttribute(
"last_good_bin"))
645 lgb = std::any_cast<int>(count_ds.GetAttribute(
"last_good_bin"));
646 if (count_ds.HasAttribute(
"number"))
647 noOfHistos = std::any_cast<int>(count_ds.GetAttribute(
"number"));
648 if (count_ds.HasAttribute(
"length"))
649 histoLength = std::any_cast<int>(count_ds.GetAttribute(
"length"));
650 if (
static_cast<int>(count.size()) != noOfHistos*histoLength) {
651 std::cerr << std::endl <<
"**ERROR** PNeXus data size error! count.size()=" << count.size() <<
", #histos=" << noOfHistos <<
", length=" << histoLength <<
"." << std::endl;
656 for (
int i=0; i<noOfHistos; i++) {
662 for (
int j=0; j<histoLength; j++)
663 data.push_back(count[i*histoLength+j]);
673 fData.push_back(runData);
675 std::cerr << std::endl <<
"**ERROR** PNeXus couldn't obtain data: '/run/histogram_data_1/counts' is missing." << std::endl;
693 Double_t dval, factor;
700 if (nxs_file->HasDataset(
"/raw_data_1/instrument/source/name"))
701 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/instrument/source/name").GetData()[0];
706 if (nxs_file->HasDataset(
"/raw_data_1/instrument/name"))
707 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/instrument/name").GetData()[0];
713 if (nxs_file->HasDataset(
"/raw_data_1/instrument/source/type"))
714 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/instrument/source/type").GetData()[0];
719 if (nxs_file->HasDataset(
"/raw_data_1/instrument/source/probe"))
720 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/instrument/source/probe").GetData()[0];
725 if (nxs_file->HasDataset(
"/raw_data_1/title"))
726 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/title").GetData()[0];
731 if (nxs_file->HasDataset(
"/raw_data_1/run_number"))
732 ival = nxs_file->template GetDataset<int>(
"/raw_data_1/run_number").GetData()[0];
738 if (nxs_file->HasDataset(
"/raw_data_1/sample/temperature")) {
739 auto tmp_ds = nxs_file->template GetDataset<float>(
"/raw_data_1/sample/temperature");
740 dval = tmp_ds.GetData()[0];
741 if (tmp_ds.HasAttribute(
"units"))
742 sstr = std::any_cast<std::string>(tmp_ds.GetAttribute(
"units"));
743 if (sstr ==
"Celcius")
752 if (nxs_file->HasDataset(
"/raw_data_1/sample/magnetic_field")) {
753 auto mag_ds = nxs_file->template GetDataset<float>(
"/raw_data_1/sample/magnetic_field");
754 dval = mag_ds.GetData()[0];
755 if (mag_ds.HasAttribute(
"units"))
756 sstr = std::any_cast<std::string>(mag_ds.GetAttribute(
"units"));
772 for (UInt_t i=0; i<4; i++)
781 if (nxs_file->HasDataset(
"/raw_data_1/sample/name"))
782 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/sample/name").GetData()[0];
792 if (nxs_file->HasDataset(
"/raw_data_1/instrument/detector_1/resolution")) {
793 auto res_ds = nxs_file->template GetDataset<int>(
"/raw_data_1/instrument/detector_1/resolution");
794 dval = res_ds.GetData()[0];
795 if (res_ds.HasAttribute(
"units"))
796 sstr = std::any_cast<std::string>(res_ds.GetAttribute(
"units"));
797 if ((sstr ==
"picoseconds") || (sstr ==
"pico.seconds"))
804 TString date{
"n/a"}, time{
"n/a"};
805 if (nxs_file->HasDataset(
"/raw_data_1/start_time"))
806 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/start_time").GetData()[0];
817 if (nxs_file->HasDataset(
"/raw_data_1/end_time"))
818 sstr = nxs_file->template GetDataset<std::string>(
"/raw_data_1/end_time").GetData()[0];
827 if (nxs_file->HasDataset(
"/raw_data_1/instrument/detector_1/dead_time")) {
828 std::vector<float> dt;
829 dt = nxs_file->template GetDataset<float>(
"/raw_data_1/instrument/detector_1/dead_time").GetData();
832 if (nxs_file->HasDataset(
"/raw_data_1/good_frames")) {
833 ival = nxs_file->template GetDataset<int>(
"/raw_data_1/good_frames").GetData()[0];
838 if (nxs_file->HasDataset(
"/raw_data_1/instrument/detector_1/counts")) {
839 int t0_bin{-1}, fgb{-1}, lgb{-1}, noOfHistos{-1}, histoLength{-1};
840 auto count_ds = nxs_file->template GetDataset<int>(
"/raw_data_1/instrument/detector_1/counts");
841 auto count = count_ds.GetData();
842 auto dims = count_ds.GetDimensions();
843 if (dims.size() < 3) {
844 std::cerr << std::endl <<
"**ERROR** PNeXus data dimension error! dims.size()=" << dims.size() <<
", expecting == 3." << std::endl;
847 noOfHistos = dims[1];
848 histoLength = dims[2];
850 if (count_ds.HasAttribute(
"t0_bin"))
851 t0_bin = std::any_cast<int>(count_ds.GetAttribute(
"t0_bin"));
852 if (count_ds.HasAttribute(
"first_good_bin"))
853 fgb = std::any_cast<int>(count_ds.GetAttribute(
"first_good_bin"));
854 if (count_ds.HasAttribute(
"last_good_bin"))
855 lgb = std::any_cast<int>(count_ds.GetAttribute(
"last_good_bin"));
856 if (
static_cast<int>(count.size()) != noOfHistos*histoLength) {
857 std::cerr << std::endl <<
"**ERROR** PNeXus data size error! count.size()=" << count.size() <<
", #histos=" << noOfHistos <<
", length=" << histoLength <<
"." << std::endl;
863 for (
int i=0; i<noOfHistos; i++) {
869 for (
int j=0; j<histoLength; j++)
870 data.push_back(count[i*histoLength+j]);
880 fData.push_back(runData);
std::vector< TString > PStringVector
std::vector< Double_t > PDoubleVector
std::vector< PRawRunData > PRawRunDataList
MSR file parser and manager for the musrfit framework.
virtual void Clear()
Clears all data from this histogram set.
virtual void SetLastGoodBin(Int_t lgb)
virtual void SetHistoNo(Int_t no)
virtual void SetData(PDoubleVector data)
virtual void SetTimeZeroBin(Double_t tzb)
virtual void SetFirstGoodBin(Int_t fgb)
virtual void SetStopDate(const TString str)
virtual void SetRingAnode(const UInt_t idx, const Double_t dval)
virtual void SetMuonSource(const TString &str)
virtual void SetTimeResolution(const Double_t dval)
virtual void SetSample(const TString str)
virtual void SetEnergy(const Double_t dval)
virtual void SetStartDate(const TString str)
virtual void SetTransport(const Double_t dval)
virtual void SetRunName(const TString &str)
virtual void SetOrientation(const TString str)
virtual void SetSetup(const TString str)
virtual void SetStopTime(const TString str)
virtual void SetRunTitle(const TString str)
virtual void SetTemperature(const UInt_t idx, const Double_t temp, const Double_t errTemp)
virtual void SetMuonSpecies(const TString &str)
virtual void SetBeamline(const TString &str)
virtual void SetNumberOfGoodFrames(Int_t ival)
virtual void SetRunNumber(const Int_t &val)
virtual void SetInstrument(const TString &str)
virtual void SetField(const Double_t dval)
virtual void SetStartTime(const TString str)
virtual void SetLaboratory(const TString &str)
virtual void SetDataSet(PRawRunDataSet &dataSet, UInt_t idx=-1)
virtual void SetDeadTimeParam(std::vector< float > dvec)
PRunDataHandler()
Default constructor creating an uninitialized handler.
PMsrHandler * fMsrInfo
Pointer to MSR file handler (not owned, don't delete)
virtual TString FileNameFromTemplate(TString &fileNameTemplate, Int_t run, TString &year, Bool_t &ok)
virtual void SplitTimeDate(TString timeDate, TString &time, TString &date, Bool_t &ok)
virtual Bool_t ReadAsciiFile()
virtual Bool_t ReadWkmFile()
virtual Bool_t ReadRootFile()
Bool_t ReadNexusFileIdf2(T &nxs_file)
virtual Int_t GetNoOfRunData()
Returns the number of loaded run data sets.
virtual Bool_t WriteWkmFile(TString fln="")
TString fRunName
Current run name being processed (used during file reading)
virtual Bool_t ReadDBFile()
virtual void ReadData()
Reads all data files specified in MSR file or configuration.
virtual Bool_t StripWhitespace(TString &str)
virtual Bool_t IsWhitespace(const Char_t *str)
virtual Bool_t ReadFilesMsr()
Bool_t ReadNexusFileIdf1(T &nxs_file)
Bool_t fAllDataAvailable
Flag: true if all requested data files loaded successfully, false if any failed.
virtual Int_t ToInt(TString &str, Bool_t &ok)
PRawRunDataList fData
List of all loaded raw run data (histograms + metadata)
virtual Bool_t WriteData(TString fileName="")
Writes data to file in the specified format.
virtual Bool_t ReadNexusFile()
virtual TString GenerateOutputFileName(const TString fileName, const TString extension, Bool_t &ok)
virtual Bool_t WriteAsciiFile(TString fln="")
virtual Bool_t ReadMudFile()
virtual Bool_t IsAllDataAvailable() const
Checks if all required data files were successfully loaded.
virtual Bool_t FileExistsCheck(PMsrRunBlock &runInfo, const UInt_t idx)
virtual Bool_t WritePsiBinFile(TString fln="")
virtual PRawRunData * GetRunData(const TString &runName)
Retrieves run data by run name.
virtual TString GetFileName(const TString extension, Bool_t &ok)
virtual Bool_t WriteMudFile(TString fln="")
TString fFileFormat
Explicitly specified file format (overrides auto-detection)
virtual TString GetMonth(Int_t month)
virtual Bool_t WriteMusrRootFile(Int_t tag=A2M_MUSR_ROOT_DIR, TString fln="")
virtual Int_t GetDataTagIndex(TString &str, const PStringVector *fLabels)
virtual Bool_t ReadMduAsciiFile()
virtual Bool_t WriteRootFile(TString fln="")
PStringVector fDataPath
Search paths for data files (checked sequentially until file found)
TString fRunPathName
Full path to current data file being read.
virtual ~PRunDataHandler()
Virtual destructor that frees all loaded data.
virtual void TestFileName(TString &runName, const TString &ext)
virtual Bool_t WriteNexusFile(TString format, TString fln="")
virtual bool DateToISO8601(std::string inDate, std::string &iso8601Date)
virtual Bool_t ReadWriteFilesList()
virtual Bool_t SetRunData(PRawRunData *data, UInt_t idx=0)
Sets or replaces run data at specified index.
virtual void Init(const Int_t tag=0)
PAny2ManyInfo * fAny2ManyInfo
Pointer to any2many conversion configuration (not owned, don't delete)
virtual Bool_t FileAlreadyRead(TString runName)
virtual Bool_t ReadPsiBinFile()
virtual Bool_t ReadDatFile()
virtual TString GetYear(Int_t month)
virtual Double_t ToDouble(TString &str, Bool_t &ok)
virtual void ConvertData()
Performs format conversion (for any2many utility).