86 std::cout << std::endl <<
"usage: dump_header [-rn <runNo> | -fn <fileName>] [-ff, --fileFormat <fileFormat>]";
87 std::cout << std::endl <<
" [-y, --year <year>] [-s, --summary] [-i, --instrument <inst>]";
88 std::cout << std::endl <<
" [-c, --counts] | ";
89 std::cout << std::endl <<
" --help | --version";
90 std::cout << std::endl;
91 std::cout << std::endl <<
" Dumps the header information of a given muSR data file onto the standard output.";
92 std::cout << std::endl <<
" If no <fileFormat> info is povided, it will try to guess what <fileFormat> it might be.";
93 std::cout << std::endl <<
" For <runNo> guessing of the file format is not possible. The default assumption here is 'MusrRoot'.";
94 std::cout << std::endl;
95 std::cout << std::endl <<
" -rn, --runNo <runNo> : run number of the header to be dumped.";
96 std::cout << std::endl <<
" -fn, --fileName <fileName> : muSR data file name.";
97 std::cout << std::endl <<
" -ff, --fileFormat <fileFormat> : where <fileFormat> can be:";
98 std::cout << std::endl <<
" MusrRoot (default), NeXus, ROOT (old LEM), PSI-BIN, PSI-MDU, MUD, WKM";
99 std::cout << std::endl <<
" NeXus is only supported if enabled.";
100 std::cout << std::endl <<
" -y, --year <year> : <year> has to be 4 digit, e.g. 2005, if provided it is used to";
101 std::cout << std::endl <<
" generate the file name for the given <runNo>, otherwise the current";
102 std::cout << std::endl <<
" year is used. If a file name is given, this option has no effect.";
103 std::cout << std::endl <<
" -s, --summary : this option is used for LE-uSR data sets only. It will, additionally";
104 std::cout << std::endl <<
" to the header information, print the summary file content.";
105 std::cout << std::endl <<
" -i, --instrument <inst> : where <inst> is the requested instrument:";
106 std::cout << std::endl <<
" lem (default) | gps | ltf | dolly | gpd | hifi | flame | vms.";
107 std::cout << std::endl <<
" -c, --counts : will show detector counts as well.";
108 std::cout << std::endl <<
" -h, --help : will show this help";
109 std::cout << std::endl <<
" -v, --version : will show the current version.";
110 std::cout << std::endl << std::endl;
125 TFile f(fileName.c_str());
127 std::cerr << std::endl;
128 std::cerr <<
"**ERROR** couldn't invoke ROOT/MusrRoot file object." << std::endl;
129 std::cerr << std::endl;
134 UInt_t noOfHistos{0};
139 f.GetObject(
"RunInfo", folder);
141 TObject *obj = f.FindObjectAny(
"RunHeader");
142 if (obj ==
nullptr) {
143 std::cerr << std::endl <<
"**ERROR** Couldn't neither obtain RunInfo (LEM), nor RunHeader (MusrRoot) from " << fileName << std::endl;
147 if (!strcmp(obj->ClassName(),
"TFolder")) {
149 }
else if (!strcmp(obj->ClassName(),
"TDirectoryFile")) {
152 std::cerr << std::endl <<
"**ERROR** RunHeader (MusrRoot) from '" << fileName <<
"' is neither a TFolder nor a TDirectory. Found: '" << obj->ClassName() <<
"'" << std::endl;
160 std::unique_ptr<TMusrRunHeader> header;
166 TLemRunHeader* runHeader =
dynamic_cast<TLemRunHeader*
>(folder->FindObjectAny(
"TLemRunHeader"));
169 if (runHeader ==
nullptr) {
170 std::cerr << std::endl <<
"**ERROR** Couldn't obtain run header info from ROOT file " << fileName << std::endl;
175 std::cout << std::endl <<
"-------------------";
176 std::cout << std::endl <<
"fileName = " << fileName <<
", fileFormat = ROOT (PSI LEM).";
177 std::cout << std::endl <<
"-------------------";
178 std::cout << std::endl <<
"Run Title : " << runHeader->GetRunTitle().GetString().Data();
179 std::cout << std::endl <<
"Run Number : " << runHeader->GetRunNumber();
180 std::cout << std::endl <<
"Run Start Time : " << runHeader->GetStartTimeString().GetString().Data();
181 std::cout << std::endl <<
"Run Stop Time : " << runHeader->GetStopTimeString().GetString().Data();
182 std::cout << std::endl <<
"Laboratory : PSI";
183 std::cout << std::endl <<
"Instrument : LEM";
184 std::cout << std::endl <<
"Beamline : muE4";
185 std::cout << std::endl <<
"Muon Beam Momentum : 28 MeV/c";
186 std::cout << std::endl <<
"Muon Species : positive muons";
187 std::cout << std::endl <<
"Muon Source : Target E - slow muons";
188 std::cout << std::endl <<
"Setup : " << runHeader->GetLemSetup().GetString().Data();
189 std::cout << std::endl <<
"Comment : n/a";
190 std::cout << std::endl <<
"Sample Name : n/a";
191 std::cout << std::endl <<
"Sample Orientation : n/a";
192 std::cout << std::endl <<
"Sample Temperature : " << runHeader->GetSampleTemperature() <<
"+-" << runHeader->GetSampleTemperatureError() <<
" K";
193 std::cout << std::endl <<
"Sample Mag. Field : " << runHeader->GetSampleBField() <<
"+-" << runHeader->GetSampleBFieldError() <<
" G";
194 std::cout << std::endl <<
"No of Histos : " << runHeader->GetNHist();
195 std::cout << std::endl <<
"Time Resolution : " << runHeader->GetTimeResolution() <<
" ns";
196 std::cout << std::endl <<
"-------------------";
197 std::cout << std::endl <<
"LEM Specific Entries :";
198 std::cout << std::endl <<
"Moderator : " << runHeader->GetModerator().GetString().Data();
199 std::cout << std::endl <<
"Moderator HV : " << runHeader->GetModeratorHV() <<
" kV";
200 std::cout << std::endl <<
"Sample HV : " << runHeader->GetSampleHV() <<
" kV";
201 std::cout << std::endl <<
"Impl. Energy : " << runHeader->GetImpEnergy() <<
" keV";
202 std::cout << std::endl <<
"-------------------";
203 std::cout << std::endl <<
"Detector Info (for all detectors the same): ";
204 std::cout << std::endl <<
"-------------------";
205 std::cout << std::endl <<
"Histo Length : " << runHeader->GetNChannels();
206 double *timeZero =
nullptr;
207 timeZero = runHeader->GetTimeZero();
208 if (timeZero !=
nullptr) {
209 std::cout << std::endl <<
"Time Zero Bin : " << timeZero[0];
210 std::cout << std::endl <<
"First Good Bin : " << timeZero[0];
212 std::cout << std::endl <<
"Time Zero Bin : ??";
213 std::cout << std::endl <<
"First Good Bin : ??";
215 std::cout << std::endl <<
"Last Good Bin : " << runHeader->GetNChannels()-1;
216 std::cout << std::endl <<
"-------------------" << std::endl << std::endl;
219 header = std::make_unique<TMusrRunHeader>(fileName.c_str(),
true);
220 if (header ==
nullptr) {
221 std::cerr << std::endl <<
"**ERROR** Couldn't invoke MusrRoot RunHeader from file:" << fileName;
222 std::cerr << std::endl;
229 f.GetObject(
"RunHeader", folder);
230 if (folder ==
nullptr) {
231 std::cerr << std::endl <<
"**ERROR** Couldn't get folder from MusrRoot RunHeader from file:" << fileName;
232 std::cerr << std::endl;
237 if (!header->ExtractAll(folder)) {
238 std::cerr << std::endl <<
"**ERROR** Couldn't invoke MusrRoot RunHeader content from file:" << fileName;
239 std::cerr << std::endl;
244 TDirectoryFile *runHeader =
nullptr;
245 f.GetObject(
"RunHeader", runHeader);
246 if (runHeader ==
nullptr) {
247 std::cerr << std::endl <<
"**ERROR** Couldn't get runHeader (TDirectory) from MusrRoot RunHeader from file:" << fileName;
248 std::cerr << std::endl;
253 if (!header->ExtractAll(runHeader)) {
254 std::cerr << std::endl <<
"**ERROR** Couldn't invoke MusrRoot RunHeader in file:" << fileName;
255 std::cerr << std::endl;
261 header->DumpHeader();
265 header->Get(
"RunInfo/No of Histos", ival, ok);
268 header->Get(
"RunInfo/RedGreen Offsets", ivec, ok);
270 redGreenOffset = ivec;
276 TObjArray *runSum=
nullptr;
277 TDirectoryFile *runSumDir=
nullptr;
280 runSum =
static_cast<TObjArray*
>(folder->FindObject(
"RunSummary"));
282 f.GetObject(
"RunHeader/RunSummary", runSumDir);
284 if (!runSum && !runSumDir) {
285 std::cerr << std::endl <<
"**ERROR** Couldn't obtain RunSummary " << fileName << std::endl;
289 std::cout <<
"++++++++++++++++++++" << std::endl;
290 std::cout <<
" Run Summary" << std::endl;
291 std::cout <<
"++++++++++++++++++++" << std::endl;
295 for (Int_t i=0; i<runSum->GetEntries(); i++) {
296 tstr =
static_cast<TObjString*
>(runSum->At(i));
297 str = tstr->String();
299 if (!str.Contains(
"\r") && !str.Contains(
"\n"))
300 std::cout << std::endl;
302 }
else if (runSumDir) {
303 TIter next(runSumDir->GetListOfKeys());
305 while ((key = (TKey*)next())) {
306 if (TString(key->GetClassName()) ==
"TObjString") {
307 tstr =
dynamic_cast<TObjString*
>(key->ReadObj());
308 str = tstr->String();
310 if (!str.Contains(
"\r") && !str.Contains(
"\n"))
311 std::cout << std::endl;
320 std::cout <<
"Detector counts (all, between fgb and lgb)" << std::endl;
321 f.GetObject(
"histos", folder);
322 if ((folder !=
nullptr) && (header !=
nullptr)) {
323 char detectorLabel[64];
324 TH1F *histo{
nullptr};
325 UInt_t total{0}, total_good{0}, ta, tg;
327 for (UInt_t i=0; i<redGreenOffset.size(); i++) {
328 std::cout <<
" Group " << i+1 <<
" (Offset=" << redGreenOffset[i] <<
") : " << std::endl;
331 for (UInt_t j=0; j<noOfHistos; j++) {
334 snprintf(detectorLabel,
sizeof(detectorLabel),
"DetectorInfo/Detector%03d/First Good Bin", redGreenOffset[i]+j+1);
335 header->Get(detectorLabel, ival, ok);
340 snprintf(detectorLabel,
sizeof(detectorLabel),
"DetectorInfo/Detector%03d/Last Good Bin", redGreenOffset[i]+j+1);
341 header->Get(detectorLabel, ival, ok);
346 snprintf(detectorLabel,
sizeof(detectorLabel),
"hDecay%03d", redGreenOffset[i]+j+1);
347 histo = (TH1F*) folder->FindObjectAny(detectorLabel);
348 if (histo !=
nullptr) {
349 ta = histo->Integral(0, histo->GetNbinsX()+1);
350 tg = histo->Integral(fgb, lgb);
351 std::cout <<
" " << histo->GetTitle() <<
":\t " << ta <<
", " << tg << std::endl;
357 std::cout <<
" total counts of group " << i+1 <<
":\t\t\t " << total <<
", " << total_good << std::endl;
359 std::cout <<
" total counts of group " << i+1 <<
":\t\t\t\t\t " << total <<
", " << total_good << std::endl;
362 std::cout <<
"Sorry, no histos folder found" << std::endl;
503 bool success =
false;
512 std::cout << std::endl <<
"**ERROR** couldn't open psi-bin file, or failed while reading the header." << std::endl;
516 std::cout << std::endl <<
"**ERROR** psi-bin file: unsupported version of the data." << std::endl;
520 std::cout << std::endl <<
"**ERROR** psi-bin file: error when allocating data buffer." << std::endl;
524 std::cout << std::endl <<
">> **ERROR** psi-bin file: number of histograms/record not equals 1." << std::endl;
528 std::cout << std::endl <<
">> **ERROR** psi-bin file: no clue why you reached this point." << std::endl;
537 std::vector<std::string> vstr;
538 std::vector<double> dVal, dErrVal;
539 std::cout << std::endl <<
"-------------------";
540 std::cout << std::endl <<
"fileName = " << fileName <<
", fileFormat = " << fileFormat;
541 std::cout << std::endl <<
"-------------------";
542 std::cout << std::endl <<
"Run Title : " << psiBin.
GetComment();
545 if (vstr.size() < 2) {
546 std::cout << std::endl <<
"**ERROR** couldn't obtain \"Run Start Time\" will quit." << std::endl << std::endl;
549 std::cout << std::endl <<
"Run Start Time : " << vstr[0] <<
"; " << vstr[1];
551 if (vstr.size() < 2) {
552 std::cout << std::endl <<
"**ERROR** couldn't obtain \"Run Stop Time\" will quit." << std::endl << std::endl;
555 std::cout << std::endl <<
"Run Stop Time : " << vstr[0] <<
"; " << vstr[1];
556 std::cout << std::endl <<
"Laboratory : PSI";
558 if (vstr.size() < 5) {
559 std::cout << std::endl <<
"**ERROR** couldn't obtain \"Instrument\" will quit." << std::endl << std::endl;
562 std::cout << std::endl <<
"Instrument : " << vstr[0];
563 std::cout << std::endl <<
"Beamline : " << vstr[1];
564 std::cout << std::endl <<
"Muon Beam Momentum : " << vstr[2];
565 std::cout << std::endl <<
"Muon Species : " << vstr[3];
566 std::cout << std::endl <<
"Muon Source : " << vstr[4];
567 std::cout << std::endl <<
"Setup : " << psiBin.
GetComment();
568 std::cout << std::endl <<
"Comment : n/a";
569 std::cout << std::endl <<
"Sample Name : " << psiBin.
GetSample();
570 std::cout << std::endl <<
"Sample Orientation : " << psiBin.
GetOrient();
573 if (dVal.size() != dErrVal.size()) {
574 std::cout << std::endl <<
"Sample Temperature : " << psiBin.
GetTemp();
576 for (
unsigned int i=0; i<dVal.size(); i++) {
577 std::cout << std::endl <<
"Sample Temp. " << i+1 <<
" : " << dVal[i] <<
" (" << dErrVal[i] <<
") K";
580 std::cout << std::endl <<
"Sample Mag. Field : " << psiBin.
GetField();
582 std::cout << std::endl <<
"Time Resolution : " << psiBin.
GetBinWidthNanoSec() <<
" ns";
584 std::cout << std::endl <<
"-------------------";
585 std::cout << std::endl <<
"Histo No : " << i;
586 std::cout << std::endl <<
"Histo Name : " << psiBin.
GetNameHisto(i);
588 std::cout << std::endl <<
"Time Zero Bin : " << psiBin.
GetT0Int(i);
589 std::cout << std::endl <<
"First Good Bin : " << psiBin.
GetFirstGoodInt(i);
590 std::cout << std::endl <<
"Last Good Bin : " << psiBin.
GetLastGoodInt(i);
594 std::cout << std::endl <<
"-------------------" << std::endl << std::endl;
615 memset(fln,
'\0',
sizeof(fln));
616 strncpy(fln, fileName.c_str(),
sizeof(fln));
619 std::cerr << std::endl <<
"**ERROR** Couldn't open mud-file " << fileName <<
", sorry." << std::endl;
623 std::cout << std::endl <<
"-------------------";
624 std::cout << std::endl <<
"fileName = " << fileName <<
", fileFormat = MUD";
625 std::cout << std::endl <<
"-------------------";
627 success = MUD_getTitle( fh, str,
sizeof(str) );
629 std::cout << std::endl <<
"Run Title : " << str;
631 std::cout << std::endl <<
"Run Title : ???";
633 success = MUD_getRunNumber( fh, &val );
635 std::cout << std::endl <<
"Run Number : " << val;
637 std::cout << std::endl <<
"Run Number : ???";
641 success = MUD_getTimeBegin( fh, &val );
642 tval =
static_cast<time_t
>(val);
644 dt = localtime(
static_cast<const time_t*
>(&tval));
646 strftime(str,
sizeof(str),
"%F; %T", dt);
647 std::cout << std::endl <<
"Run Start Time : " << str;
649 std::cout << std::endl <<
"Run Start Time : ??";
652 std::cout << std::endl <<
"Run Start Time : ???";
655 success = MUD_getTimeEnd( fh, &val );
656 tval =
static_cast<time_t
>(val);
658 dt = localtime(
static_cast<const time_t*
>(&tval));
660 strftime(str,
sizeof(str),
"%F; %T", dt);
661 std::cout << std::endl <<
"Run Stop Time : " << str;
663 std::cout << std::endl <<
"Run Stop Time : ??";
666 std::cout << std::endl <<
"Run Stop Time : ???";
669 success = MUD_getLab( fh, str,
sizeof(str) );
671 std::cout << std::endl <<
"Laboratory : " << str;
673 std::cout << std::endl <<
"Laboratory : ???";
675 success = MUD_getApparatus( fh, str,
sizeof(str) );
677 std::cout << std::endl <<
"Instrument : " << str;
679 std::cout << std::endl <<
"Instrument : ???";
681 success = MUD_getArea( fh, str,
sizeof(str) );
683 std::cout << std::endl <<
"Beamline : " << str;
685 std::cout << std::endl <<
"Beamline : ???";
687 std::cout << std::endl <<
"Muon Beam Momentum : ???";
688 std::cout << std::endl <<
"Muon Species : positive muon?";
689 std::cout << std::endl <<
"Muon Source : ???";
692 success = MUD_getMethod( fh, str,
sizeof(str) );
694 std::cout << std::endl <<
"Method : " << str;
696 std::cout << std::endl <<
"Method : ???";
699 success = MUD_getSample( fh, str,
sizeof(str) );
701 std::cout << std::endl <<
"Sample Name : " << str;
703 std::cout << std::endl <<
"Sample Name : ???";
706 success = MUD_getOrient( fh, str,
sizeof(str) );
708 std::cout << std::endl <<
"Sample Orientation : " << str;
710 std::cout << std::endl <<
"Sample Orientation : ???";
713 success = MUD_getTemperature( fh, str,
sizeof(str) );
715 std::cout << std::endl <<
"Sample Temperature : " << str;
717 std::cout << std::endl <<
"Sample Temperature : ???";
720 success = MUD_getField( fh, str,
sizeof(str) );
722 std::cout << std::endl <<
"Sample Magn. Field : " << str;
724 std::cout << std::endl <<
"Sample Magn. Field : ???";
728 success = MUD_getHists(fh, &type, &val);
730 std::cout << std::endl <<
"No of Histos : " << val;
733 std::cout << std::endl <<
"No of Histos : ???";
737 REAL64 timeResolution = 0.0;
739 timeResolution *= 1.0e9;
741 std::cout << std::endl <<
"Time Resolution : " << timeResolution <<
" ns";
743 std::cout << std::endl <<
"Time Resolution : ??? ns";
746 for (
int i=0; i<noHistos; i++) {
747 std::cout << std::endl <<
"-------------------";
748 std::cout << std::endl <<
"Histo No " << i+1;
750 success = MUD_getHistTitle( fh, i+1, str, 1023);
752 std::cout << std::endl <<
"Histo Name : " << str;
754 std::cout << std::endl <<
"Histo Name : ???";
756 success = MUD_getHistNumBins( fh, i+1, &val );
758 std::cout << std::endl <<
"Histo Length : " << val;
760 std::cout << std::endl <<
"Histo Length : ???";
762 success = MUD_getHistT0_Bin( fh, i+1, &val );
764 std::cout << std::endl <<
"Time Zero Bin : " << val;
766 std::cout << std::endl <<
"Time Zero Bin : ???";
768 success = MUD_getHistGoodBin1( fh, i+1, &val );
770 std::cout << std::endl <<
"First Good Bin : " << val;
772 std::cout << std::endl <<
"First Good Bin : ???";
774 success = MUD_getHistGoodBin2( fh, i+1, &val );
776 std::cout << std::endl <<
"Last Good Bin : " << val;
778 std::cout << std::endl <<
"Last Good Bin : ???";
780 success = MUD_getHistNumEvents( fh, i+1, &val );
782 std::cout << std::endl <<
"#Events : " << val;
787 std::cout << std::endl <<
"-------------------" << std::endl << std::endl;
881int main(
int argc,
char *argv[])
888 std::string runNo(
"");
889 std::string fileName(
"");
890 std::string fileFormat(
"");
891 std::string year(
"");
892 std::string instrument(
"lem");
896 for (
int i=1; i<argc; i++) {
897 if (!strcmp(argv[i],
"--help") || !strcmp(argv[i],
"-h")) {
900 }
else if (!strcmp(argv[i],
"--version") || !strcmp(argv[i],
"-v")) {
903 std::cout << std::endl <<
"dump_header version: " << PACKAGE_VERSION <<
", git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
905 std::cout << std::endl <<
"dump_header version: " << PACKAGE_VERSION <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
909 std::cout << std::endl <<
"dump_header git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
911 std::cout << std::endl <<
"dump_header version: unknown" << std::endl << std::endl;
915 }
else if (!strcmp(argv[i],
"-rn") || !strcmp(argv[i],
"--runNo")) {
917 std::cerr << std::endl <<
"**ERROR** found -rn, --runNo without <runNo>!" << std::endl;
927 std::cerr << std::endl <<
"**ERROR** found -rn, --runNo without <runNo>, or the provided <runNo> ('" << argv[i+1] <<
"') is not a number!" << std::endl;
932 std::cerr << std::endl <<
"**ERROR** found -rn, --runNo with more than one <runNo>! This is not yet supported." << std::endl;
938 }
else if (!strcmp(argv[i],
"-fn") || !strcmp(argv[i],
"--fileName")) {
940 std::cerr << std::endl <<
"**ERROR** found -fn, --fileName without <fileName>!" << std::endl;
944 fileName = argv[i+1];
946 }
else if (!strcmp(argv[i],
"--fileFormat") || !strcmp(argv[i],
"-ff")) {
948 std::cerr << std::endl <<
"**ERROR** found -ff, --fileFormat without <fileFormat>!" << std::endl;
952 std::string ff(argv[i+1]);
953 if (!boost::iequals(ff,
"MusrRoot") && !boost::iequals(ff,
"NeXus") && !boost::iequals(ff,
"ROOT") &&
954 !boost::iequals(ff,
"PSI-BIN") && !boost::iequals(ff,
"PSI-MDU") && !boost::iequals(ff,
"MUD") &&
955 !boost::iequals(ff,
"WKM")) {
956 std::cerr << std::endl <<
"**ERROR** found unsupported muSR file data format: " << argv[i+1] << std::endl;
960 fileFormat = argv[i+1];
962 }
else if (!strcmp(argv[i],
"-y") || !strcmp(argv[i],
"--year")) {
964 std::cerr << std::endl <<
"**ERROR** found -y, --year without <year>!" << std::endl;
969 std::cerr << std::endl <<
"**ERROR** found -y, --year with sensless <year> '" << argv[i+1] <<
"'!" << std::endl;
973 int yy =
static_cast<int>(strtod(argv[i+1],
static_cast<char**
>(
nullptr)));
975 std::cerr << std::endl <<
"**ERROR** found -y, --year with <year> '" << yy <<
"'!";
976 std::cerr << std::endl <<
" Well, cannot handle files in the pre-muSR time nor in the future." << std::endl;
982 }
else if (!strcmp(argv[i],
"-s") || !strcmp(argv[i],
"--summary")) {
984 }
else if (!strcmp(argv[i],
"-c") || !strcmp(argv[i],
"--counts")) {
986 }
else if (!strcmp(argv[i],
"-i") || !strcmp(argv[i],
"--instrument")) {
988 std::cerr << std::endl <<
"**ERROR** found option --instrument without <instrument> input!" << std::endl;
992 if (strcmp(argv[i+1],
"lem") && strcmp(argv[i+1],
"gps") && strcmp(argv[i+1],
"ltf") &&
993 strcmp(argv[i+1],
"dolly") && strcmp(argv[i+1],
"gpd") && strcmp(argv[i+1],
"hifi") &&
994 strcmp(argv[i+1],
"flame") && strcmp(argv[i+1],
"vms")) {
995 std::cerr << std::endl <<
"**ERROR** found --instrument with unkown instrument name: '" << argv[i+1] <<
"'!" << std::endl;
999 instrument = argv[i+1];
1002 std::cerr << std::endl <<
"**ERROR** found unkown option '" << argv[i] <<
"'." << std::endl;
1010 std::stringstream ss;
1015 if ((runNo.length() != 0) && (fileName.length() != 0)) {
1016 std::cerr << std::endl <<
"**ERROR** currently only either runNo or fileName can be handled, not both simultanously." << std::endl;
1024 std::unique_ptr<TSAXParser> saxParser = std::make_unique<TSAXParser>();
1025 std::unique_ptr<PStartupHandler> startupHandler = std::make_unique<PStartupHandler>();
1026 if (!startupHandler->StartupFileFound()) {
1027 std::cerr << std::endl <<
">> musrfit **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
1028 std::cerr << std::endl;
1031 saxParser->ConnectToHandler(
"PStartupHandler", startupHandler.get());
1038 std::cerr << std::endl <<
">> musrfit **WARNING** Reading/parsing musrfit_startup.xml failed.";
1039 std::cerr << std::endl;
1044 std::string pathFln(
"");
1045 if (fileName ==
"") {
1046 int yy =
static_cast<int>(strtod(year.c_str(),
static_cast<char**
>(
nullptr)));
1047 int run =
static_cast<int>(strtod(runNo.c_str(),
static_cast<char**
>(
nullptr)));
1048 PFindRun findRun(startupHandler->GetDataPathList(), startupHandler->GetRunNameTemplateList(),
1049 instrument, yy, run, fileFormat);
1053 std::cout <<
"debug> Couldn't find run: " << run <<
" for instrument " << instrument <<
", and year: " << year << std::endl;
1061 if (fileFormat ==
"") {
1062 std::string fln(pathFln);
1063 boost::to_lower(fln);
1064 if (fln.find(
".root") != std::string::npos)
1065 fileFormat =
"MusrRoot";
1066 else if (fln.find(
".nxs") != std::string::npos)
1067 fileFormat =
"NeXus";
1068 else if (fln.find(
".bin") != std::string::npos)
1069 fileFormat =
"PSI-BIN";
1070 else if (fln.find(
".mdu") != std::string::npos)
1071 fileFormat =
"PSI-MDU";
1072 else if (fln.find(
".msr") != std::string::npos)
1074 else if ((fln.find(
".nemu") != std::string::npos) || (fln.find(
".wkm") != std::string::npos))
1077 if (fileFormat !=
"")
1078 std::cout << std::endl <<
"**INFO** the guessed file format is " << fileFormat << std::endl;
1080 if (fileFormat ==
"") {
1081 std::cout << std::endl <<
"**ERROR** Couldn't guess your file format. You will need to provide it explicitly" << std::endl << std::endl;
1085 boost::to_lower(fileFormat);
1087 if (boost::iequals(fileFormat,
"MusrRoot") || boost::iequals(fileFormat,
"ROOT")) {
1089 }
else if (boost::iequals(fileFormat,
"NeXus")) {
1090#ifdef PNEXUS_ENABLED
1093 std::cout << std::endl <<
"Sorry, NeXus is not enabled, hence I cannot help you." << std::endl;
1095 }
else if (boost::iequals(fileFormat,
"PSI-BIN") || boost::iequals(fileFormat,
"PSI-MDU")) {
1097 }
else if (boost::iequals(fileFormat,
"MUD")) {
1099 }
else if (boost::iequals(fileFormat,
"WKM")) {