364int main(
int argc,
char *argv[])
368 if (!strncmp(argv[1],
"--help", 128) || !strncmp(argv[1],
"-h", 128)) {
371 }
else if (!strncmp(argv[1],
"--version", 128) || !strncmp(argv[1],
"-v", 128)) {
374 std::cout << std::endl <<
"addRun version: " << PACKAGE_VERSION <<
", git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
376 std::cout << std::endl <<
"addRun version: " << PACKAGE_VERSION <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
380 std::cout << std::endl <<
"addRun git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
382 std::cout << std::endl <<
"addRun version: unkown." << std::endl << std::endl;
387 std::cerr << std::endl;
388 std::cerr <<
"**ERROR** missing required input." << std::endl;
389 std::cerr << std::endl;
399 std::string flnOut{
""};
400 std::string format{
""}, year{
""}, instrument{
""}, dev{
"tdc"};
402 std::string inputFln{
""};
404 std::vector<PAddRunInfo> addRunInfo;
406 for (
int i=1; i<argc; i++) {
407 if (!strcmp(argv[i],
"-t0")) {
409 std::cerr << std::endl;
410 std::cerr <<
"**ERROR** found -t0 without value." << std::endl;
411 std::cerr << std::endl;
420 }
else if (!strcmp(argv[i],
"-f")) {
422 std::cerr << std::endl;
423 std::cerr <<
"**ERROR** found -f without argument." << std::endl;
424 std::cerr << std::endl;
430 std::cerr << std::endl;
431 std::cerr <<
"**ERROR** found -f with unsupported format: '" << format <<
"'" << std::endl;
432 std::cerr << std::endl;
436 }
else if (!strcmp(argv[i],
"-y")) {
438 std::cerr << std::endl;
439 std::cerr <<
"**ERROR** found -y without value." << std::endl;
440 std::cerr << std::endl;
443 status = sscanf(argv[i+1],
"%d", &ival);
445 std::cerr << std::endl;
446 std::cerr <<
"**ERROR** found invalid -y value: " << argv[i+1] <<
"." << std::endl;
447 std::cerr << std::endl;
450 if (1900 - ival > 0) {
451 std::cerr << std::endl;
452 std::cerr <<
"**ERROR** found invalid -y value: " << argv[i+1] <<
"." << std::endl;
453 std::cerr <<
" Format has to be YYYY." << std::endl;
454 std::cerr << std::endl;
460 }
else if (!strcmp(argv[i],
"-i")) {
462 std::cerr << std::endl;
463 std::cerr <<
"**ERROR** found -i without argument." << std::endl;
464 std::cerr << std::endl;
467 instrument = argv[i+1];
468 boost::to_lower(instrument);
470 }
else if (!strcmp(argv[i],
"-m")) {
472 std::cerr << std::endl;
473 std::cerr <<
"**ERROR** found -m without argument." << std::endl;
474 std::cerr << std::endl;
477 std::string str(argv[i+1]);
478 boost::to_lower(str);
479 if ((str !=
"pta") && (str !=
"tdc")) {
480 std::cerr << std::endl;
481 std::cerr <<
"**ERROR** found -m with unsupported argument '" << argv[i+1] <<
"'. Possible arguments are 'pta' or 'tdc'." << std::endl;
482 std::cerr << std::endl;
487 }
else if (!strcmp(argv[i],
"-o")) {
489 std::cerr << std::endl;
490 std::cerr <<
"**ERROR** found -o without argument." << std::endl;
491 std::cerr << std::endl;
496 }
else if (!strcmp(argv[i],
"-rl")) {
498 std::cerr << std::endl;
499 std::cerr <<
"**ERROR** found -rl without argument." << std::endl;
500 std::cerr << std::endl;
509 }
else if (!strcmp(argv[i],
"-in")) {
511 std::cerr << std::endl;
512 std::cerr <<
"**ERROR** found -in without argument." << std::endl;
513 std::cerr << std::endl;
516 inputFln = argv[i+1];
519 std::cerr << std::endl;
520 std::cerr <<
"**ERROR** found unexpected command line element '" << argv[i] <<
"'" << std::endl;
521 std::cerr << std::endl;
528 if (inputFln.empty() && (runList.size() == 0)) {
529 std::cerr << std::endl;
530 std::cerr <<
"**ERROR** essential input for usage1 and usage2 is missing." << std::endl;
531 std::cerr << std::endl;
535 if (!inputFln.empty() && (runList.size() > 0)) {
536 std::cerr << std::endl;
537 std::cerr <<
"**ERROR** cannot decide if usage1 or usage2." << std::endl;
538 std::cerr << std::endl;
546 std::unique_ptr<TSAXParser> saxParser = std::make_unique<TSAXParser>();
547 std::unique_ptr<PStartupHandler> startupHandler = std::make_unique<PStartupHandler>();
548 if (!startupHandler->StartupFileFound()) {
549 std::cerr << std::endl <<
">> addRun **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
550 std::cerr << std::endl;
553 saxParser->ConnectToHandler(
"PStartupHandler", startupHandler.get());
560 std::cerr << std::endl <<
">> addRun **WARNING** Reading/parsing musrfit_startup.xml failed.";
561 std::cerr << std::endl;
563 startupHandler->CheckLists();
568 if (runList.size() > 0) {
570 std::cout <<
">> t0 not provided.";
572 std::cout <<
">> t0: ";
573 for (
int i=0; i<t0.size(); i++)
574 std::cout << t0[i] <<
", ";
576 std::cout << std::endl;
577 std::cout <<
">> format: " << format << std::endl;
578 std::cout <<
">> year: " << year << std::endl;
579 std::cout <<
">> instrument: " << instrument << std::endl;
580 std::cout <<
">> fln out: " << flnOut << std::endl;
581 std::cout <<
">> runList: ";
582 for (
int i=0; i<runList.size(); i++)
583 std::cout << runList[i] <<
", ";
584 std::cout << std::endl;
590 for (
int i=0; i<runList.size(); i++) {
591 PFindRun findRun(startupHandler->GetDataPathList(), startupHandler->GetRunNameTemplateList(), instrument, yearNum, runList[i]);
593 std::cout <<
">> found path name: " << findRun.
GetPathName() << std::endl;
595 addRunInfo.push_back(addRun);
597 std::cout <<
"**WARNING** run: " << runList[i] <<
" for instrument '" << instrument <<
"' and year '" << year <<
"' not found" << std::endl;
603 if (!inputFln.empty()) {
605 if (!boost::filesystem::exists(inputFln)) {
606 std::cerr << std::endl;
607 std::cerr <<
"**ERROR** file '" << inputFln <<
"' seems not to exist." << std::endl;
608 std::cerr << std::endl;
617 for (
int i=0; i<addRunInfo.size(); i++) {
618 std::cout <<
">> run " << i+1 <<
": " << std::endl;
619 std::cout <<
">> fln : " << addRunInfo[i].fPathFileName << std::endl;
620 if (addRunInfo[i].fT0.empty()) {
621 std::cout <<
">> t0 not provided.";
623 std::cout <<
">> t0: ";
624 for (
int j=0; j<addRunInfo[i].fT0.size(); j++) {
625 std::cout << addRunInfo[i].fT0[j] <<
", ";
628 std::cout << std::endl;
632 std::vector< std::unique_ptr<PRunDataHandler> > runDataHandler;
633 runDataHandler.resize(addRunInfo.size());
635 for (UInt_t i=0; i<runDataHandler.size(); i++) {
636 if (startupHandler !=
nullptr) {
637 runDataHandler[i] = std::make_unique<PRunDataHandler>(addRunInfo[i].fPathFileName, addRunInfo[i].fFileFormat, startupHandler->GetDataPathList());
638 runDataHandler[i]->ReadData();
639 if (!runDataHandler[i]->IsAllDataAvailable()) {
641 std::cerr << std::endl;
642 std::cerr <<
"**ERROR** couldn't read data for PRunDataHandler (i=" << i <<
")." << std::endl;
643 std::cerr << std::endl;
647 runDataHandler[i] = std::make_unique<PRunDataHandler>(addRunInfo[i].fPathFileName, addRunInfo[i].fFileFormat);
648 runDataHandler[i]->ReadData();
649 if (!runDataHandler[i]->IsAllDataAvailable()) {
651 std::cerr << std::endl;
652 std::cerr <<
"**ERROR** couldn't read data for PRunDataHandler (i=" << i <<
")." << std::endl;
653 std::cerr << std::endl;
662 std::unique_ptr<PAny2ManyInfo> info;
663 std::unique_ptr<PRunDataHandler> dataOut;
665 for (UInt_t i=1; i<runDataHandler.size(); i++) {
666 if (runDataHandler[0]->GetNoOfRunData() != runDataHandler[i]->GetNoOfRunData()) {
668 std::cerr << std::endl;
669 std::cerr <<
"**ERROR** can only handle same number of run data per run handler." << std::endl;
670 std::cerr << std::endl;
674 info = std::make_unique<PAny2ManyInfo>();
679 info->outFormat = format;
681 info->outFileName = flnOut;
682 dataOut = std::make_unique<PRunDataHandler>(info.get());
687 for (UInt_t i=1; i<runDataHandler.size(); i++) {
688 if (runDataHandler[0]->GetRunData()->GetNoOfHistos() != runDataHandler[i]->GetRunData()->GetNoOfHistos()) {
689 std::cerr << std::endl;
690 std::cerr <<
"**ERROR** can only add runs with the same number of histograms." << std::endl;
691 std::cerr << std::endl;
700 std::vector<PDoubleVector*> addedHistos;
701 addedHistos.resize(runDataHandler[0]->GetRunData()->GetNoOfHistos());
702 for (UInt_t i=0; i<runDataHandler[0]->GetRunData()->GetNoOfHistos(); i++) {
703 addedHistos[i] = runDataHandler[0]->GetRunData()->GetDataSet(i,
false)->GetData();
707 t0Vec.resize(runDataHandler[0]->GetRunData()->GetNoOfHistos());
708 if (addRunInfo[0].fT0.empty()) {
709 for (UInt_t i=0; i<runDataHandler[0]->GetRunData()->GetNoOfHistos(); i++) {
710 t0Vec[i] = runDataHandler[0]->GetRunData()->GetT0Bin(i+1);
712 addRunInfo[0].fT0 = t0Vec;
715 if (addRunInfo[0].fT0.size() < runDataHandler[0]->GetRunData()->GetNoOfHistos()) {
716 UInt_t counts=runDataHandler[0]->GetRunData()->GetNoOfHistos()-addRunInfo[0].fT0.size();
717 for (UInt_t i=0; i<counts; i++)
718 addRunInfo[0].fT0.push_back(0);
721 for (UInt_t i=0; i<addRunInfo[0].fT0.size(); i++) {
722 if (addRunInfo[0].fT0[i] == 0) {
723 addRunInfo[0].fT0[i] = runDataHandler[0]->GetRunData()->GetT0Bin(i+1);
724 }
else if (addRunInfo[0].fT0[i] == -1) {
725 addRunInfo[0].fT0[i] =
addRun_getPromptPeakPos(runDataHandler[0]->GetRunData()->GetDataSet(i,
false)->GetData());
731 for (
int i=1; i<runDataHandler.size(); i++) {
734 t0Vec.resize(runDataHandler[i]->GetRunData()->GetNoOfHistos());
735 if (addRunInfo[i].fT0.empty()) {
736 for (UInt_t j=0; j<runDataHandler[i]->GetRunData()->GetNoOfHistos(); j++) {
737 t0Vec[j] = runDataHandler[i]->GetRunData()->GetT0Bin(j+1);
739 addRunInfo[i].fT0 = t0Vec;
742 if (addRunInfo[i].fT0.size() < runDataHandler[i]->GetRunData()->GetNoOfHistos()) {
743 UInt_t counts=runDataHandler[i]->GetRunData()->GetNoOfHistos()-addRunInfo[i].fT0.size();
744 for (UInt_t j=0; j<counts; j++)
745 addRunInfo[i].fT0.push_back(0);
748 for (UInt_t j=0; j<addRunInfo[i].fT0.size(); j++) {
749 if (addRunInfo[i].fT0[j] == 0) {
750 addRunInfo[i].fT0[j] = runDataHandler[i]->GetRunData()->GetT0Bin(j+1);
751 }
else if (addRunInfo[i].fT0[j] == -1) {
752 addRunInfo[i].fT0[j] =
addRun_getPromptPeakPos(runDataHandler[i]->GetRunData()->GetDataSet(j,
false)->GetData());
759 diff.resize(addRunInfo[i].fT0.size());
760 for (UInt_t j=0; j<diff.size(); j++) {
761 diff[j] = addRunInfo[i].fT0[j] - addRunInfo[0].fT0[j];
767 for (
int j=0; j<runDataHandler[i]->GetRunData()->GetNoOfHistos(); j++) {
768 addData = runDataHandler[i]->GetRunData()->GetDataSet(j,
false)->GetData();
769 for (
int k=0; k<addedHistos[j]->size(); k++) {
771 if ((idx >= 0) && (idx < addData->size())) {
772 addedHistos[j]->at(k) += addData->at(idx);
780 rawRunData = runDataHandler[0]->GetRunData();
781 if (rawRunData ==
nullptr) {
782 std::cerr <<
">> addRun: **ERROR** couldn't obtain PRawRunData object." << std::endl;
796 if (dataOut->SetRunData(rawRunData)) {
798 dataOut->WriteData();