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 try {
541 sstr = std::any_cast<std::string>(tmp_ds.GetAttribute("units"));
542 } catch (const std::bad_any_cast&) {
543 std::cerr << std::endl << "**WARNING** ReadNexusFileIdf1: temperature 'units' attribute has unexpected type." << std::endl;
544 }
545 }
546 if (sstr == "Celcius")
547 dval += 273.16;
548 }
549 runData.SetTemperature(0, dval, 0.0);
550
551 // get/set field
552 dval = PMUSR_UNDEFINED;
553 sstr = "n/a";
554 factor = 1.0;
555 if (nxs_file->HasDataset("/run/sample/magnetic_field")) {
556 auto mag_ds = nxs_file->template GetDataset<float>("/run/sample/magnetic_field");
557 dval = mag_ds.GetData()[0];
558 if (mag_ds.HasAttribute("units")) {
559 try {
560 sstr = std::any_cast<std::string>(mag_ds.GetAttribute("units"));
561 } catch (const std::bad_any_cast&) {
562 std::cerr << std::endl << "**WARNING** ReadNexusFileIdf1: magnetic_field 'units' attribute has unexpected type." << std::endl;
563 }
564 }
565 if (sstr == "Tesla")
566 factor = 1.0e4;
567 }
568 runData.SetField(dval*factor);
569
570 // get/set implantation energy
571 runData.SetEnergy(PMUSR_UNDEFINED);
572
573 // get/set moderator HV
575
576 // get/set RA HV's (LEM specific)
577 for (UInt_t i=0; i<4; i++)
578 runData.SetRingAnode(i, PMUSR_UNDEFINED);
579
580 // get/set setup
581 sstr = "n/a";
582 if (nxs_file->HasDataset("/run/notes"))
583 sstr = nxs_file->template GetDataset<std::string>("/run/notes").GetData()[0];
584 runData.SetSetup(sstr);
585
586 // get/set sample
587 sstr = "n/a";
588 if (nxs_file->HasDataset("/run/sample/name"))
589 sstr = nxs_file->template GetDataset<std::string>("/run/sample/name").GetData()[0];
590 runData.SetSample(sstr);
591
592 // get/set orientation
593 runData.SetOrientation("??");
594
595 // get/set time resolution (ns)
596 dval = PMUSR_UNDEFINED;
597 sstr = "n/a";
598 factor = 1.0;
599 if (nxs_file->HasDataset("/run/histogram_data_1/resolution")) {
600 auto res_ds = nxs_file->template GetDataset<int>("/run/histogram_data_1/resolution");
601 dval = res_ds.GetData()[0];
602 if (res_ds.HasAttribute("units")) {
603 try {
604 sstr = std::any_cast<std::string>(res_ds.GetAttribute("units"));
605 } catch (const std::bad_any_cast&) {
606 std::cerr << std::endl << "**WARNING** ReadNexusFileIdf1: resolution 'units' attribute has unexpected type." << std::endl;
607 }
608 }
609 if ((sstr == "picoseconds") || (sstr == "pico.seconds"))
610 factor = 1.0e-3; // ps -> ns
611 }
612 runData.SetTimeResolution(dval*factor);
613
614 // get/set start/stop time
615 sstr = "n/a";
616 TString date{"n/a"}, time{"n/a"};
617 if (nxs_file->HasDataset("/run/start_time"))
618 sstr = nxs_file->template GetDataset<std::string>("/run/start_time").GetData()[0];
619 str = sstr;
620 SplitTimeDate(str, time, date, ok);
621 if (ok) {
622 runData.SetStartTime(time);
623 runData.SetStartDate(date);
624 }
625
626 sstr = "n/a";
627 date = "n/a";
628 time = "n/a";
629 if (nxs_file->HasDataset("/run/stop_time"))
630 sstr = nxs_file->template GetDataset<std::string>("/run/stop_time").GetData()[0];
631 str = sstr;
632 SplitTimeDate(str, time, date, ok);
633 if (ok) {
634 runData.SetStopTime(time);
635 runData.SetStopDate(date);
636 }
637
638 // get/set deadtime relevant parameters
639 if (nxs_file->HasDataset("/run/instrument/detector/deadtimes")) {
640 std::vector<float> dt;
641 dt = nxs_file->template GetDataset<float>("/run/instrument/detector/deadtimes").GetData();
642 runData.SetDeadTimeParam(dt);
643 }
644 if (nxs_file->HasDataset("/run/instrument/beam/frames_good")) {
645 ival = nxs_file->template GetDataset<int>("/run/instrument/beam/frames_good").GetData()[0];
646 runData.SetNumberOfGoodFrames(ival);
647 }
648
649 // data with its metadata
650 if (nxs_file->HasDataset("/run/histogram_data_1/counts")) {
651 int t0_bin{-1}, fgb{-1}, lgb{-1}, noOfHistos{-1}, histoLength{-1};
652 auto count_ds = nxs_file->template GetDataset<int>("/run/histogram_data_1/counts");
653 auto count = count_ds.GetData();
654 // get all necessary attributes
655 auto castIntAttr = [](const std::any& val, const std::string& name) -> int {
656 try {
657 return std::any_cast<int>(val);
658 } catch (const std::bad_any_cast&) {
659 try {
660 // Attribute may be stored as vector<int> when HDF4 attr_count > 1
661 return std::any_cast<std::vector<int>>(val)[0];
662 } catch (const std::bad_any_cast&) {
663 std::cerr << std::endl << "**WARNING** ReadNexusFileIdf1: counts attribute '" << name
664 << "' has unexpected type; defaulting to -1." << std::endl;
665 return -1;
666 }
667 }
668 };
669 if (count_ds.HasAttribute("t0_bin"))
670 t0_bin = castIntAttr(count_ds.GetAttribute("t0_bin"), "t0_bin");
671 if (count_ds.HasAttribute("first_good_bin"))
672 fgb = castIntAttr(count_ds.GetAttribute("first_good_bin"), "first_good_bin");
673 if (count_ds.HasAttribute("last_good_bin"))
674 lgb = castIntAttr(count_ds.GetAttribute("last_good_bin"), "last_good_bin");
675 if (count_ds.HasAttribute("number"))
676 noOfHistos = castIntAttr(count_ds.GetAttribute("number"), "number");
677 if (count_ds.HasAttribute("length"))
678 histoLength = castIntAttr(count_ds.GetAttribute("length"), "length");
679 if (static_cast<int>(count.size()) != noOfHistos*histoLength) {
680 std::cerr << std::endl << "**ERROR** PNeXus data size error! count.size()=" << count.size() << ", #histos=" << noOfHistos << ", length=" << histoLength << "." << std::endl;
681 return false;
682 }
683 // fill dataSet
684 PDoubleVector data;
685 for (int i=0; i<noOfHistos; i++) {
686 dataSet.Clear();
687 dataSet.SetHistoNo(i+1); // i.e. histo numbers start with 1
688 dataSet.SetTimeZeroBin(t0_bin);
689 dataSet.SetFirstGoodBin(fgb);
690 dataSet.SetLastGoodBin(lgb);
691 for (int j=0; j<histoLength; j++)
692 data.push_back(count[i*histoLength+j]);
693 dataSet.SetData(data);
694 runData.SetDataSet(dataSet);
695 data.clear();
696 }
697
698 // keep run name from the msr-file
699 runData.SetRunName(fRunName);
700
701 // keep the information
702 fData.push_back(runData);
703 } else { // no data found
704 std::cerr << std::endl << "**ERROR** PNeXus couldn't obtain data: '/run/histogram_data_1/counts' is missing." << std::endl;
705 return false;
706 }
707
708 return true;
709}
710
711//--------------------------------------------------------------------------
712// ReadNexusFileIdf2 (private)
713//--------------------------------------------------------------------------
714template <typename T>
716{
717 PRawRunData runData;
718 PRawRunDataSet dataSet;
719 TString str;
720 std::string sstr;
721 Int_t ival;
722 Double_t dval, factor;
723 bool ok;
724
725 // get header information
726
727 // get/set laboratory
728 sstr = "n/a";
729 if (nxs_file->HasDataset("/raw_data_1/instrument/source/name"))
730 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/instrument/source/name").GetData()[0];
731 runData.SetLaboratory(sstr);
732
733 // get/set beamline
734 sstr = "n/a";
735 if (nxs_file->HasDataset("/raw_data_1/instrument/name"))
736 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/instrument/name").GetData()[0];
737 runData.SetBeamline(sstr);
738 runData.SetBeamline(sstr);
739
740 // get/set muon source
741 sstr = "n/a";
742 if (nxs_file->HasDataset("/raw_data_1/instrument/source/type"))
743 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/instrument/source/type").GetData()[0];
744 runData.SetMuonSource(sstr);
745
746 // get/set muon species
747 sstr = "n/a";
748 if (nxs_file->HasDataset("/raw_data_1/instrument/source/probe"))
749 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/instrument/source/probe").GetData()[0];
750 runData.SetMuonSpecies(sstr);
751
752 // get/set run title
753 sstr = "n/a";
754 if (nxs_file->HasDataset("/raw_data_1/title"))
755 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/title").GetData()[0];
756 runData.SetRunTitle(sstr);
757
758 // get/set run number
759 ival = -1;
760 if (nxs_file->HasDataset("/raw_data_1/run_number"))
761 ival = nxs_file->template GetDataset<int>("/raw_data_1/run_number").GetData()[0];
762 runData.SetRunNumber(ival);
763
764 // get/set temperature
765 dval = PMUSR_UNDEFINED;
766 sstr = "n/a";
767 if (nxs_file->HasDataset("/raw_data_1/sample/temperature")) {
768 auto tmp_ds = nxs_file->template GetDataset<float>("/raw_data_1/sample/temperature");
769 dval = tmp_ds.GetData()[0];
770 if (tmp_ds.HasAttribute("units"))
771 sstr = std::any_cast<std::string>(tmp_ds.GetAttribute("units"));
772 if (sstr == "Celcius")
773 dval += 273.16;
774 }
775 runData.SetTemperature(0, dval, 0.0);
776
777 // get/set field
778 dval = PMUSR_UNDEFINED;
779 sstr = "n/a";
780 factor = 1.0;
781 if (nxs_file->HasDataset("/raw_data_1/sample/magnetic_field")) {
782 auto mag_ds = nxs_file->template GetDataset<float>("/raw_data_1/sample/magnetic_field");
783 dval = mag_ds.GetData()[0];
784 if (mag_ds.HasAttribute("units"))
785 sstr = std::any_cast<std::string>(mag_ds.GetAttribute("units"));
786 if (sstr == "Tesla")
787 factor = 1.0e4;
788 }
789 runData.SetField(dval*factor);
790
791 // get/set implantation energy
792 runData.SetEnergy(PMUSR_UNDEFINED);
793
794 // get/set implantation energy
795 runData.SetEnergy(PMUSR_UNDEFINED);
796
797 // get/set moderator HV
799
800 // get/set RA HV's (LEM specific)
801 for (UInt_t i=0; i<4; i++)
802 runData.SetRingAnode(i, PMUSR_UNDEFINED);
803
804 // get/set setup
805 sstr = "n/a";
806 runData.SetSetup(str);
807
808 // get/set sample
809 sstr = "n/a";
810 if (nxs_file->HasDataset("/raw_data_1/sample/name"))
811 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/sample/name").GetData()[0];
812 runData.SetSample(sstr);
813
814 // get/set orientation
815 runData.SetOrientation("n/a");
816
817 // get/set time resolution (ns)
818 dval = PMUSR_UNDEFINED;
819 sstr = "n/a";
820 factor = 1.0;
821 if (nxs_file->HasDataset("/raw_data_1/instrument/detector_1/resolution")) {
822 auto res_ds = nxs_file->template GetDataset<int>("/raw_data_1/instrument/detector_1/resolution");
823 dval = res_ds.GetData()[0];
824 if (res_ds.HasAttribute("units"))
825 sstr = std::any_cast<std::string>(res_ds.GetAttribute("units"));
826 if ((sstr == "picoseconds") || (sstr == "pico.seconds"))
827 factor = 1.0e-3; // ps -> ns
828 }
829 runData.SetTimeResolution(dval*factor);
830
831 // get/set start/stop time
832 sstr = "n/a";
833 TString date{"n/a"}, time{"n/a"};
834 if (nxs_file->HasDataset("/raw_data_1/start_time"))
835 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/start_time").GetData()[0];
836 str = sstr;
837 SplitTimeDate(str, time, date, ok);
838 if (ok) {
839 runData.SetStartTime(time);
840 runData.SetStartDate(date);
841 }
842
843 sstr = "n/a";
844 date = "n/a";
845 time = "n/a";
846 if (nxs_file->HasDataset("/raw_data_1/end_time"))
847 sstr = nxs_file->template GetDataset<std::string>("/raw_data_1/end_time").GetData()[0];
848 str = sstr;
849 SplitTimeDate(str, time, date, ok);
850 if (ok) {
851 runData.SetStopTime(time);
852 runData.SetStopDate(date);
853 }
854
855 // get/set deadtime relevant parameters
856 if (nxs_file->HasDataset("/raw_data_1/instrument/detector_1/dead_time")) {
857 std::vector<float> dt;
858 dt = nxs_file->template GetDataset<float>("/raw_data_1/instrument/detector_1/dead_time").GetData();
859 runData.SetDeadTimeParam(dt);
860 }
861 if (nxs_file->HasDataset("/raw_data_1/good_frames")) {
862 ival = nxs_file->template GetDataset<int>("/raw_data_1/good_frames").GetData()[0];
863 runData.SetNumberOfGoodFrames(ival);
864 }
865
866 // data with its metadata
867 if (nxs_file->HasDataset("/raw_data_1/instrument/detector_1/counts")) {
868 int t0_bin{-1}, fgb{-1}, lgb{-1}, noOfPeriods{-1}, noOfHistos{-1}, histoLength{-1};
869 auto count_ds = nxs_file->template GetDataset<int>("/raw_data_1/instrument/detector_1/counts");
870 auto count = count_ds.GetData();
871 auto dims = count_ds.GetDimensions();
872 if (dims.size() < 3) {
873 std::cerr << std::endl << "**ERROR** PNeXus data dimension error! dims.size()=" << dims.size() << ", expecting == 3." << std::endl;
874 return false;
875 }
876 noOfPeriods = dims[0];
877 noOfHistos = dims[1];
878 histoLength = dims[2];
879 // needed to properly address period related information like the dead time parameters
880 runData.SetNoOfHistosPerPeriod(noOfHistos);
881 // get all necessary attributes
882 if (count_ds.HasAttribute("t0_bin"))
883 t0_bin = std::any_cast<int>(count_ds.GetAttribute("t0_bin"));
884 if (count_ds.HasAttribute("first_good_bin"))
885 fgb = std::any_cast<int>(count_ds.GetAttribute("first_good_bin"));
886 if (count_ds.HasAttribute("last_good_bin"))
887 lgb = std::any_cast<int>(count_ds.GetAttribute("last_good_bin"));
888 if (static_cast<int>(count.size()) != noOfPeriods*noOfHistos*histoLength) {
889 std::cerr << std::endl << "**ERROR** PNeXus data size error! count.size()=" << count.size() << ", #periods=" << noOfPeriods << ", #histos=" << noOfHistos << ", length=" << histoLength << "." << std::endl;
890 return false;
891 }
892
893 // fill dataSet
894 PDoubleVector data;
895 for (int i=0; i<noOfPeriods; i++) {
896 for (int j=0; j<noOfHistos; j++) {
897 dataSet.Clear();
898 dataSet.SetHistoNo(i*PERIOD_HISTO_OFFSET+j+1); // i.e. histo numbers start with 1
899 dataSet.SetTimeZeroBin(t0_bin);
900 dataSet.SetFirstGoodBin(fgb);
901 dataSet.SetLastGoodBin(lgb);
902 for (int k=0; k<histoLength; k++)
903 data.push_back(count[i*noOfHistos*histoLength+j*histoLength+k]);
904 dataSet.SetData(data);
905 runData.SetDataSet(dataSet);
906 data.clear();
907 }
908 }
909
910 // keep run name from the msr-file
911 runData.SetRunName(fRunName);
912
913 // keep the information
914 fData.push_back(runData);
915 }
916
917 return true;
918}
919
920#endif // _PRUNDATAHANDLER_H_
#define PMUSR_UNDEFINED
Definition PMusr.h:177
#define PERIOD_HISTO_OFFSET
Definition PMusr.h:274
std::vector< TString > PStringVector
Definition PMusr.h:417
std::vector< Double_t > PDoubleVector
Definition PMusr.h:399
std::vector< PRawRunData > PRawRunDataList
Definition PMusr.h:988
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:693
virtual void SetHistoNo(Int_t no)
Definition PMusr.h:681
virtual void SetData(PDoubleVector data)
Definition PMusr.h:702
virtual void SetTimeZeroBin(Double_t tzb)
Definition PMusr.h:684
virtual void SetFirstGoodBin(Int_t fgb)
Definition PMusr.h:690
virtual void SetStopDate(const TString str)
Definition PMusr.h:920
virtual void SetNoOfHistosPerPeriod(UInt_t ival)
Definition PMusr.h:937
virtual void SetRingAnode(const UInt_t idx, const Double_t dval)
Definition PMusr.cpp:784
virtual void SetMuonSource(const TString &str)
Definition PMusr.h:908
virtual void SetTimeResolution(const Double_t dval)
Definition PMusr.h:933
virtual void SetSample(const TString str)
Definition PMusr.h:925
virtual void SetEnergy(const Double_t dval)
Definition PMusr.h:930
virtual void SetStartDate(const TString str)
Definition PMusr.h:917
virtual void SetTransport(const Double_t dval)
Definition PMusr.h:931
virtual void SetRunName(const TString &str)
Definition PMusr.h:912
virtual void SetOrientation(const TString str)
Definition PMusr.h:926
virtual void SetSetup(const TString str)
Definition PMusr.h:915
virtual void SetStopTime(const TString str)
Definition PMusr.h:919
virtual void SetRunTitle(const TString str)
Definition PMusr.h:914
virtual void SetTemperature(const UInt_t idx, const Double_t temp, const Double_t errTemp)
Definition PMusr.cpp:801
virtual void SetMuonSpecies(const TString &str)
Definition PMusr.h:909
virtual void SetBeamline(const TString &str)
Definition PMusr.h:906
virtual void SetNumberOfGoodFrames(Int_t ival)
Definition PMusr.h:935
virtual void SetRunNumber(const Int_t &val)
Definition PMusr.h:913
virtual void SetInstrument(const TString &str)
Definition PMusr.h:907
virtual void SetField(const Double_t dval)
Definition PMusr.h:923
virtual void SetStartTime(const TString str)
Definition PMusr.h:916
virtual void SetLaboratory(const TString &str)
Definition PMusr.h:905
virtual void SetDataSet(PRawRunDataSet &dataSet, UInt_t idx=-1)
Definition PMusr.h:938
virtual void SetDeadTimeParam(std::vector< float > dvec)
Definition PMusr.h:936
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.)