musrfit 1.10.0
PRunDataHandler.h
Go to the documentation of this file.
1/***************************************************************************
2
3 PRunDataHandler.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 _PRUNDATAHANDLER_H_
31#define _PRUNDATAHANDLER_H_
32
33#include <any>
34#include <iostream>
35#include <string>
36
37#include <TString.h>
38
39#include "PMusr.h"
40#include "PMsrHandler.h"
41
42//-------------------------------------------------------------
57#define A2M_UNDEFINED 0
59#define A2M_ROOT 1
61#define A2M_MUSR_ROOT 2
63#define A2M_MUSR_ROOT_DIR 3
65#define A2M_PSIBIN 4
67#define A2M_PSIMDU 5
69#define A2M_MUD 6
71#define A2M_NEXUS 7
73#define A2M_WKM 8
75#define A2M_ASCII 9
77
78//-------------------------------------------------------------
193{
194 public:
202
214 PRunDataHandler(TString fileName, const TString fileFormat);
215
228 PRunDataHandler(TString fileName, const TString fileFormat, const PStringVector dataPath);
229
241 PRunDataHandler(TString fileName, const TString fileFormat, const TString dataPath, PRawRunData &runData);
242
254 PRunDataHandler(PAny2ManyInfo *any2ManyInfo);
255
265 PRunDataHandler(PAny2ManyInfo *any2ManyInfo, const PStringVector dataPath);
266
279
291 PRunDataHandler(PMsrHandler *msrInfo, const PStringVector dataPath);
292
303 virtual ~PRunDataHandler();
304
322 virtual void ReadData();
323
339 virtual void ConvertData();
340
359 virtual Bool_t WriteData(TString fileName="");
360
370 virtual Bool_t IsAllDataAvailable() const { return fAllDataAvailable; }
371
383 virtual PRawRunData* GetRunData(const TString &runName);
384
396 virtual PRawRunData* GetRunData(const UInt_t idx=0);
397
403 virtual Int_t GetNoOfRunData() {return fData.size(); }
404
417 virtual Bool_t SetRunData(PRawRunData *data, UInt_t idx=0);
418
419 private:
423
425 TString fFileFormat;
426 TString fRunName;
427 TString fRunPathName;
429
430 virtual void Init(const Int_t tag=0);
431 virtual Bool_t ReadFilesMsr();
432 virtual Bool_t ReadWriteFilesList();
433 virtual Bool_t FileAlreadyRead(TString runName);
434 virtual void TestFileName(TString &runName, const TString &ext);
435 virtual Bool_t FileExistsCheck(PMsrRunBlock &runInfo, const UInt_t idx);
436 virtual Bool_t FileExistsCheck(const Bool_t fileName, const Int_t idx);
437 virtual Bool_t FileExistsCheck(const TString fileName);
438 virtual Bool_t ReadRootFile();
439 template <typename T> Bool_t ReadNexusFileIdf1(T& nxs_file);
440 template <typename T> Bool_t ReadNexusFileIdf2(T& nxs_file);
441 virtual Bool_t ReadNexusFile();
442 virtual Bool_t ReadWkmFile();
443 virtual Bool_t ReadPsiBinFile();
444 virtual Bool_t ReadMudFile();
445 virtual Bool_t ReadMduAsciiFile();
446 virtual Bool_t ReadAsciiFile();
447 virtual Bool_t ReadDBFile();
448 virtual Bool_t ReadDatFile();
449
450 virtual Bool_t WriteMusrRootFile(Int_t tag=A2M_MUSR_ROOT_DIR, TString fln="");
451 virtual Bool_t WriteRootFile(TString fln="");
452 virtual Bool_t WriteNexusFile(TString format, TString fln="");
453 virtual Bool_t WriteWkmFile(TString fln="");
454 virtual Bool_t WritePsiBinFile(TString fln="");
455 virtual Bool_t WriteMudFile(TString fln="");
456 virtual Bool_t WriteAsciiFile(TString fln="");
457
458 virtual Bool_t StripWhitespace(TString &str);
459 virtual Bool_t IsWhitespace(const Char_t *str);
460 virtual Double_t ToDouble(TString &str, Bool_t &ok);
461 virtual Int_t ToInt(TString &str, Bool_t &ok);
462 virtual Int_t GetDataTagIndex(TString &str, const PStringVector* fLabels);
463
464 virtual TString GenerateOutputFileName(const TString fileName, const TString extension, 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);
471};
472
473//--------------------------------------------------------------------------
474// ReadNexusFileIdf1 (private)
475//--------------------------------------------------------------------------
490template <typename T>
492{
493 PRawRunData runData;
494 PRawRunDataSet dataSet;
495 TString str;
496 std::string sstr;
497 Int_t ival;
498 Double_t dval, factor;
499 bool ok;
500
501 // get header information
502
503 // get/set laboratory
504 sstr = "n/a";
505 if (nxs_file->HasDataset("/run/lab"))
506 sstr = nxs_file->template GetDataset<std::string>("/run/lab").GetData()[0];
507 runData.SetLaboratory(sstr);
508
509 // get/set beamline
510 sstr = "n/a";
511 if (nxs_file->HasDataset("/run/beamline"))
512 sstr = nxs_file->template GetDataset<std::string>("/run/beamline").GetData()[0];
513 runData.SetBeamline(sstr);
514
515 // get/set instrument
516 sstr = "n/a";
517 if (nxs_file->HasDataset("/run/instrument/name"))
518 sstr = nxs_file->template GetDataset<std::string>("/run/instrument/name").GetData()[0];
519 runData.SetInstrument(sstr);
520
521 // get/set run title
522 str = "n/a";
523 if (nxs_file->HasDataset("/run/title"))
524 sstr = nxs_file->template GetDataset<std::string>("/run/title").GetData()[0];
525 runData.SetRunTitle(sstr);
526
527 // get/set run number
528 ival = -1;
529 if (nxs_file->HasDataset("/run/number"))
530 ival = nxs_file->template GetDataset<int>("/run/number").GetData()[0];
531 runData.SetRunNumber(ival);
532
533 // get/set temperature
534 dval = PMUSR_UNDEFINED;
535 sstr = "n/a";
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")
542 dval += 273.16;
543 }
544 runData.SetTemperature(0, dval, 0.0);
545
546 // get/set field
547 dval = PMUSR_UNDEFINED;
548 sstr = "n/a";
549 factor = 1.0;
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"));
555 if (sstr == "Tesla")
556 factor = 1.0e4;
557 }
558 runData.SetField(dval*factor);
559
560 // get/set implantation energy
561 runData.SetEnergy(PMUSR_UNDEFINED);
562
563 // get/set moderator HV
565
566 // get/set RA HV's (LEM specific)
567 for (UInt_t i=0; i<4; i++)
568 runData.SetRingAnode(i, PMUSR_UNDEFINED);
569
570 // get/set setup
571 sstr = "n/a";
572 if (nxs_file->HasDataset("/run/notes"))
573 sstr = nxs_file->template GetDataset<std::string>("/run/notes").GetData()[0];
574 runData.SetSetup(sstr);
575
576 // get/set sample
577 sstr = "n/a";
578 if (nxs_file->HasDataset("/run/sample/name"))
579 sstr = nxs_file->template GetDataset<std::string>("/run/sample/name").GetData()[0];
580 runData.SetSample(sstr);
581
582 // get/set orientation
583 runData.SetOrientation("??");
584
585 // get/set time resolution (ns)
586 dval = PMUSR_UNDEFINED;
587 sstr = "n/a";
588 factor = 1.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"))
595 factor = 1.0e-3; // ps -> ns
596 }
597 runData.SetTimeResolution(dval*factor);
598
599 // get/set start/stop time
600 sstr = "n/a";
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];
604 str = sstr;
605 SplitTimeDate(str, time, date, ok);
606 if (ok) {
607 runData.SetStartTime(time);
608 runData.SetStartDate(date);
609 }
610
611 sstr = "n/a";
612 date = "n/a";
613 time = "n/a";
614 if (nxs_file->HasDataset("/run/stop_time"))
615 sstr = nxs_file->template GetDataset<std::string>("/run/stop_time").GetData()[0];
616 str = sstr;
617 SplitTimeDate(str, time, date, ok);
618 if (ok) {
619 runData.SetStopTime(time);
620 runData.SetStopDate(date);
621 }
622
623 // get/set deadtime relevant parameters
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();
627 runData.SetDeadTimeParam(dt);
628 }
629 if (nxs_file->HasDataset("/run/instrument/beam/frames_good")) {
630 ival = nxs_file->template GetDataset<float>("/run/instrument/beam/frames_good").GetData()[0];
631 runData.SetNumberOfGoodFrames(ival);
632 }
633
634 // data with its metadata
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();
639 // get all necessary attributes
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;
652 return false;
653 }
654 // fill dataSet
655 PDoubleVector data;
656 for (int i=0; i<noOfHistos; i++) {
657 dataSet.Clear();
658 dataSet.SetHistoNo(i+1); // i.e. histo numbers start with 1
659 dataSet.SetTimeZeroBin(t0_bin);
660 dataSet.SetFirstGoodBin(fgb);
661 dataSet.SetLastGoodBin(lgb);
662 for (int j=0; j<histoLength; j++)
663 data.push_back(count[i*histoLength+j]);
664 dataSet.SetData(data);
665 runData.SetDataSet(dataSet);
666 data.clear();
667 }
668
669 // keep run name from the msr-file
670 runData.SetRunName(fRunName);
671
672 // keep the information
673 fData.push_back(runData);
674 } else { // no data found
675 std::cerr << std::endl << "**ERROR** PNeXus couldn't obtain data: '/run/histogram_data_1/counts' is missing." << std::endl;
676 return false;
677 }
678
679 return true;
680}
681
682//--------------------------------------------------------------------------
683// ReadNexusFileIdf2 (private)
684//--------------------------------------------------------------------------
685template <typename T>
687{
688 PRawRunData runData;
689 PRawRunDataSet dataSet;
690 TString str;
691 std::string sstr;
692 Int_t ival;
693 Double_t dval, factor;
694 bool ok;
695
696 // get header information
697
698 // get/set laboratory
699 sstr = "n/a";
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];
702 runData.SetLaboratory(sstr);
703
704 // get/set beamline
705 sstr = "n/a";
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];
708 runData.SetBeamline(sstr);
709 runData.SetBeamline(sstr);
710
711 // get/set muon source
712 sstr = "n/a";
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];
715 runData.SetMuonSource(sstr);
716
717 // get/set muon species
718 sstr = "n/a";
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];
721 runData.SetMuonSpecies(sstr);
722
723 // get/set run title
724 sstr = "n/a";
725 if (nxs_file->HasDataset("/raw_data_1/title"))
726 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/title").GetData()[0];
727 runData.SetRunTitle(sstr);
728
729 // get/set run number
730 ival = -1;
731 if (nxs_file->HasDataset("/raw_data_1/run_number"))
732 ival = nxs_file->template GetDataset<int>("/raw_data_1/run_number").GetData()[0];
733 runData.SetRunNumber(ival);
734
735 // get/set temperature
736 dval = PMUSR_UNDEFINED;
737 sstr = "n/a";
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")
744 dval += 273.16;
745 }
746 runData.SetTemperature(0, dval, 0.0);
747
748 // get/set field
749 dval = PMUSR_UNDEFINED;
750 sstr = "n/a";
751 factor = 1.0;
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"));
757 if (sstr == "Tesla")
758 factor = 1.0e4;
759 }
760 runData.SetField(dval*factor);
761
762 // get/set implantation energy
763 runData.SetEnergy(PMUSR_UNDEFINED);
764
765 // get/set implantation energy
766 runData.SetEnergy(PMUSR_UNDEFINED);
767
768 // get/set moderator HV
770
771 // get/set RA HV's (LEM specific)
772 for (UInt_t i=0; i<4; i++)
773 runData.SetRingAnode(i, PMUSR_UNDEFINED);
774
775 // get/set setup
776 sstr = "n/a";
777 runData.SetSetup(str);
778
779 // get/set sample
780 sstr = "n/a";
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];
783 runData.SetSample(sstr);
784
785 // get/set orientation
786 runData.SetOrientation("n/a");
787
788 // get/set time resolution (ns)
789 dval = PMUSR_UNDEFINED;
790 sstr = "n/a";
791 factor = 1.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"))
798 factor = 1.0e-3; // ps -> ns
799 }
800 runData.SetTimeResolution(dval*factor);
801
802 // get/set start/stop time
803 sstr = "n/a";
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];
807 str = sstr;
808 SplitTimeDate(str, time, date, ok);
809 if (ok) {
810 runData.SetStartTime(time);
811 runData.SetStartDate(date);
812 }
813
814 sstr = "n/a";
815 date = "n/a";
816 time = "n/a";
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];
819 str = sstr;
820 SplitTimeDate(str, time, date, ok);
821 if (ok) {
822 runData.SetStopTime(time);
823 runData.SetStopDate(date);
824 }
825
826 // get/set deadtime relevant parameters
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();
830 runData.SetDeadTimeParam(dt);
831 }
832 if (nxs_file->HasDataset("/raw_data_1/good_frames")) {
833 ival = nxs_file->template GetDataset<int>("/raw_data_1/good_frames").GetData()[0];
834 runData.SetNumberOfGoodFrames(ival);
835 }
836
837 // data with its metadata
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;
845 return false;
846 }
847 noOfHistos = dims[1];
848 histoLength = dims[2];
849 // get all necessary attributes
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;
858 return false;
859 }
860
861 // fill dataSet
862 PDoubleVector data;
863 for (int i=0; i<noOfHistos; i++) {
864 dataSet.Clear();
865 dataSet.SetHistoNo(i+1); // i.e. histo numbers start with 1
866 dataSet.SetTimeZeroBin(t0_bin);
867 dataSet.SetFirstGoodBin(fgb);
868 dataSet.SetLastGoodBin(lgb);
869 for (int j=0; j<histoLength; j++)
870 data.push_back(count[i*histoLength+j]);
871 dataSet.SetData(data);
872 runData.SetDataSet(dataSet);
873 data.clear();
874 }
875
876 // keep run name from the msr-file
877 runData.SetRunName(fRunName);
878
879 // keep the information
880 fData.push_back(runData);
881 }
882
883 return true;
884}
885
886#endif // _PRUNDATAHANDLER_H_
#define PMUSR_UNDEFINED
Definition PMusr.h:172
std::vector< TString > PStringVector
Definition PMusr.h:403
std::vector< Double_t > PDoubleVector
Definition PMusr.h:385
std::vector< PRawRunData > PRawRunDataList
Definition PMusr.h:970
MSR file parser and manager for the musrfit framework.
virtual void Clear()
Clears all data from this histogram set.
Definition PMusr.cpp:261
virtual void SetLastGoodBin(Int_t lgb)
Definition PMusr.h:679
virtual void SetHistoNo(Int_t no)
Definition PMusr.h:667
virtual void SetData(PDoubleVector data)
Definition PMusr.h:688
virtual void SetTimeZeroBin(Double_t tzb)
Definition PMusr.h:670
virtual void SetFirstGoodBin(Int_t fgb)
Definition PMusr.h:676
virtual void SetStopDate(const TString str)
Definition PMusr.h:904
virtual void SetRingAnode(const UInt_t idx, const Double_t dval)
Definition PMusr.cpp:750
virtual void SetMuonSource(const TString &str)
Definition PMusr.h:892
virtual void SetTimeResolution(const Double_t dval)
Definition PMusr.h:917
virtual void SetSample(const TString str)
Definition PMusr.h:909
virtual void SetEnergy(const Double_t dval)
Definition PMusr.h:914
virtual void SetStartDate(const TString str)
Definition PMusr.h:901
virtual void SetTransport(const Double_t dval)
Definition PMusr.h:915
virtual void SetRunName(const TString &str)
Definition PMusr.h:896
virtual void SetOrientation(const TString str)
Definition PMusr.h:910
virtual void SetSetup(const TString str)
Definition PMusr.h:899
virtual void SetStopTime(const TString str)
Definition PMusr.h:903
virtual void SetRunTitle(const TString str)
Definition PMusr.h:898
virtual void SetTemperature(const UInt_t idx, const Double_t temp, const Double_t errTemp)
Definition PMusr.cpp:767
virtual void SetMuonSpecies(const TString &str)
Definition PMusr.h:893
virtual void SetBeamline(const TString &str)
Definition PMusr.h:890
virtual void SetNumberOfGoodFrames(Int_t ival)
Definition PMusr.h:919
virtual void SetRunNumber(const Int_t &val)
Definition PMusr.h:897
virtual void SetInstrument(const TString &str)
Definition PMusr.h:891
virtual void SetField(const Double_t dval)
Definition PMusr.h:907
virtual void SetStartTime(const TString str)
Definition PMusr.h:900
virtual void SetLaboratory(const TString &str)
Definition PMusr.h:889
virtual void SetDataSet(PRawRunDataSet &dataSet, UInt_t idx=-1)
Definition PMusr.h:921
virtual void SetDeadTimeParam(std::vector< float > dvec)
Definition PMusr.h:920
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).
#define A2M_MUSR_ROOT_DIR
MusrRoot with directory structure (organized by run number, year, etc.)