363int main(
int argc,
char *argv[])
367 if (!strncmp(argv[1],
"--help", 128) || !strncmp(argv[1],
"-h", 128)) {
370 }
else if (!strncmp(argv[1],
"--version", 128) || !strncmp(argv[1],
"-v", 128)) {
373 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;
375 std::cout << std::endl <<
"addRun version: " << PACKAGE_VERSION <<
" (" << BUILD_TYPE <<
"), ROOT version: " << ROOT_VERSION_USED << std::endl << std::endl;
379 std::cout << std::endl <<
"addRun git-branch: " << GIT_BRANCH <<
", git-rev: " << GIT_CURRENT_SHA1 << std::endl << std::endl;
381 std::cout << std::endl <<
"addRun version: unkown." << std::endl << std::endl;
386 std::cerr << std::endl;
387 std::cerr <<
"**ERROR** missing required input." << std::endl;
388 std::cerr << std::endl;
398 std::string flnOut{
""};
399 std::string format{
""}, year{
""}, instrument{
""}, dev{
"tdc"};
401 std::string inputFln{
""};
403 std::vector<PAddRunInfo> addRunInfo;
405 for (
int i=1; i<argc; i++) {
406 if (!strcmp(argv[i],
"-t0")) {
408 std::cerr << std::endl;
409 std::cerr <<
"**ERROR** found -t0 without value." << std::endl;
410 std::cerr << std::endl;
419 }
else if (!strcmp(argv[i],
"-f")) {
421 std::cerr << std::endl;
422 std::cerr <<
"**ERROR** found -f without argument." << std::endl;
423 std::cerr << std::endl;
429 std::cerr << std::endl;
430 std::cerr <<
"**ERROR** found -f with unsupported format: '" << format <<
"'" << std::endl;
431 std::cerr << std::endl;
435 }
else if (!strcmp(argv[i],
"-y")) {
437 std::cerr << std::endl;
438 std::cerr <<
"**ERROR** found -y without value." << std::endl;
439 std::cerr << std::endl;
442 status = sscanf(argv[i+1],
"%d", &ival);
444 std::cerr << std::endl;
445 std::cerr <<
"**ERROR** found invalid -y value: " << argv[i+1] <<
"." << std::endl;
446 std::cerr << std::endl;
449 if (1900 - ival > 0) {
450 std::cerr << std::endl;
451 std::cerr <<
"**ERROR** found invalid -y value: " << argv[i+1] <<
"." << std::endl;
452 std::cerr <<
" Format has to be YYYY." << std::endl;
453 std::cerr << std::endl;
459 }
else if (!strcmp(argv[i],
"-i")) {
461 std::cerr << std::endl;
462 std::cerr <<
"**ERROR** found -i without argument." << std::endl;
463 std::cerr << std::endl;
466 instrument = argv[i+1];
467 boost::to_lower(instrument);
469 }
else if (!strcmp(argv[i],
"-m")) {
471 std::cerr << std::endl;
472 std::cerr <<
"**ERROR** found -m without argument." << std::endl;
473 std::cerr << std::endl;
476 std::string str(argv[i+1]);
477 boost::to_lower(str);
478 if ((str !=
"pta") && (str !=
"tdc")) {
479 std::cerr << std::endl;
480 std::cerr <<
"**ERROR** found -m with unsupported argument '" << argv[i+1] <<
"'. Possible arguments are 'pta' or 'tdc'." << std::endl;
481 std::cerr << std::endl;
486 }
else if (!strcmp(argv[i],
"-o")) {
488 std::cerr << std::endl;
489 std::cerr <<
"**ERROR** found -o without argument." << std::endl;
490 std::cerr << std::endl;
495 }
else if (!strcmp(argv[i],
"-rl")) {
497 std::cerr << std::endl;
498 std::cerr <<
"**ERROR** found -rl without argument." << std::endl;
499 std::cerr << std::endl;
508 }
else if (!strcmp(argv[i],
"-in")) {
510 std::cerr << std::endl;
511 std::cerr <<
"**ERROR** found -in without argument." << std::endl;
512 std::cerr << std::endl;
515 inputFln = argv[i+1];
518 std::cerr << std::endl;
519 std::cerr <<
"**ERROR** found unexpected command line element '" << argv[i] <<
"'" << std::endl;
520 std::cerr << std::endl;
527 if (inputFln.empty() && (runList.size() == 0)) {
528 std::cerr << std::endl;
529 std::cerr <<
"**ERROR** essential input for usage1 and usage2 is missing." << std::endl;
530 std::cerr << std::endl;
534 if (!inputFln.empty() && (runList.size() > 0)) {
535 std::cerr << std::endl;
536 std::cerr <<
"**ERROR** cannot decide if usage1 or usage2." << std::endl;
537 std::cerr << std::endl;
544 std::unique_ptr<TSAXParser> saxParser = std::make_unique<TSAXParser>();
545 std::unique_ptr<PStartupHandler> startupHandler = std::make_unique<PStartupHandler>();
546 if (!startupHandler->StartupFileFound()) {
547 std::cerr << std::endl <<
">> addRun **WARNING** couldn't find " << startupHandler->GetStartupFilePath().Data();
548 std::cerr << std::endl;
551 saxParser->ConnectToHandler(
"PStartupHandler", startupHandler.get());
558 std::cerr << std::endl <<
">> addRun **WARNING** Reading/parsing musrfit_startup.xml failed.";
559 std::cerr << std::endl;
561 startupHandler->CheckLists();
566 if (runList.size() > 0) {
568 std::cout <<
">> t0 not provided.";
570 std::cout <<
">> t0: ";
571 for (
int i=0; i<t0.size(); i++)
572 std::cout << t0[i] <<
", ";
574 std::cout << std::endl;
575 std::cout <<
">> format: " << format << std::endl;
576 std::cout <<
">> year: " << year << std::endl;
577 std::cout <<
">> instrument: " << instrument << std::endl;
578 std::cout <<
">> fln out: " << flnOut << std::endl;
579 std::cout <<
">> runList: ";
580 for (
int i=0; i<runList.size(); i++)
581 std::cout << runList[i] <<
", ";
582 std::cout << std::endl;
588 for (
int i=0; i<runList.size(); i++) {
589 PFindRun findRun(startupHandler->GetDataPathList(), startupHandler->GetRunNameTemplateList(), instrument, yearNum, runList[i]);
591 std::cout <<
">> found path name: " << findRun.
GetPathName() << std::endl;
593 addRunInfo.push_back(addRun);
595 std::cout <<
"**WARNING** run: " << runList[i] <<
" for instrument '" << instrument <<
"' and year '" << year <<
"' not found" << std::endl;
601 if (!inputFln.empty()) {
603 if (!boost::filesystem::exists(inputFln)) {
604 std::cerr << std::endl;
605 std::cerr <<
"**ERROR** file '" << inputFln <<
"' seems not to exist." << std::endl;
606 std::cerr << std::endl;
615 for (
int i=0; i<addRunInfo.size(); i++) {
616 std::cout <<
">> run " << i+1 <<
": " << std::endl;
617 std::cout <<
">> fln : " << addRunInfo[i].fPathFileName << std::endl;
618 if (addRunInfo[i].fT0.empty()) {
619 std::cout <<
">> t0 not provided.";
621 std::cout <<
">> t0: ";
622 for (
int j=0; j<addRunInfo[i].fT0.size(); j++) {
623 std::cout << addRunInfo[i].fT0[j] <<
", ";
626 std::cout << std::endl;
630 std::vector< std::unique_ptr<PRunDataHandler> > runDataHandler;
631 runDataHandler.resize(addRunInfo.size());
633 for (UInt_t i=0; i<runDataHandler.size(); i++) {
634 if (startupHandler !=
nullptr) {
635 runDataHandler[i] = std::make_unique<PRunDataHandler>(addRunInfo[i].fPathFileName, addRunInfo[i].fFileFormat, startupHandler->GetDataPathList());
636 runDataHandler[i]->ReadData();
637 if (!runDataHandler[i]->IsAllDataAvailable()) {
639 std::cerr << std::endl;
640 std::cerr <<
"**ERROR** couldn't read data for PRunDataHandler (i=" << i <<
")." << std::endl;
641 std::cerr << std::endl;
645 runDataHandler[i] = std::make_unique<PRunDataHandler>(addRunInfo[i].fPathFileName, addRunInfo[i].fFileFormat);
646 runDataHandler[i]->ReadData();
647 if (!runDataHandler[i]->IsAllDataAvailable()) {
649 std::cerr << std::endl;
650 std::cerr <<
"**ERROR** couldn't read data for PRunDataHandler (i=" << i <<
")." << std::endl;
651 std::cerr << std::endl;
660 std::unique_ptr<PAny2ManyInfo> info;
661 std::unique_ptr<PRunDataHandler> dataOut;
663 for (UInt_t i=1; i<runDataHandler.size(); i++) {
664 if (runDataHandler[0]->GetNoOfRunData() != runDataHandler[i]->GetNoOfRunData()) {
666 std::cerr << std::endl;
667 std::cerr <<
"**ERROR** can only handle same number of run data per run handler." << std::endl;
668 std::cerr << std::endl;
672 info = std::make_unique<PAny2ManyInfo>();
677 info->outFormat = format;
679 info->outFileName = flnOut;
680 dataOut = std::make_unique<PRunDataHandler>(info.get());
685 for (UInt_t i=1; i<runDataHandler.size(); i++) {
686 if (runDataHandler[0]->GetRunData()->GetNoOfHistos() != runDataHandler[i]->GetRunData()->GetNoOfHistos()) {
687 std::cerr << std::endl;
688 std::cerr <<
"**ERROR** can only add runs with the same number of histograms." << std::endl;
689 std::cerr << std::endl;
698 std::vector<PDoubleVector*> addedHistos;
699 addedHistos.resize(runDataHandler[0]->GetRunData()->GetNoOfHistos());
700 for (UInt_t i=0; i<runDataHandler[0]->GetRunData()->GetNoOfHistos(); i++) {
701 addedHistos[i] = runDataHandler[0]->GetRunData()->GetDataSet(i,
false)->GetData();
705 t0Vec.resize(runDataHandler[0]->GetRunData()->GetNoOfHistos());
706 if (addRunInfo[0].fT0.empty()) {
707 for (UInt_t i=0; i<runDataHandler[0]->GetRunData()->GetNoOfHistos(); i++) {
708 t0Vec[i] = runDataHandler[0]->GetRunData()->GetT0Bin(i+1);
710 addRunInfo[0].fT0 = t0Vec;
713 if (addRunInfo[0].fT0.size() < runDataHandler[0]->GetRunData()->GetNoOfHistos()) {
714 UInt_t counts=runDataHandler[0]->GetRunData()->GetNoOfHistos()-addRunInfo[0].fT0.size();
715 for (UInt_t i=0; i<counts; i++)
716 addRunInfo[0].fT0.push_back(0);
719 for (UInt_t i=0; i<addRunInfo[0].fT0.size(); i++) {
720 if (addRunInfo[0].fT0[i] == 0) {
721 addRunInfo[0].fT0[i] = runDataHandler[0]->GetRunData()->GetT0Bin(i+1);
722 }
else if (addRunInfo[0].fT0[i] == -1) {
723 addRunInfo[0].fT0[i] =
addRun_getPromptPeakPos(runDataHandler[0]->GetRunData()->GetDataSet(i,
false)->GetData());
729 for (
int i=1; i<runDataHandler.size(); i++) {
732 t0Vec.resize(runDataHandler[i]->GetRunData()->GetNoOfHistos());
733 if (addRunInfo[i].fT0.empty()) {
734 for (UInt_t j=0; j<runDataHandler[i]->GetRunData()->GetNoOfHistos(); j++) {
735 t0Vec[j] = runDataHandler[i]->GetRunData()->GetT0Bin(j+1);
737 addRunInfo[i].fT0 = t0Vec;
740 if (addRunInfo[i].fT0.size() < runDataHandler[i]->GetRunData()->GetNoOfHistos()) {
741 UInt_t counts=runDataHandler[i]->GetRunData()->GetNoOfHistos()-addRunInfo[i].fT0.size();
742 for (UInt_t j=0; j<counts; j++)
743 addRunInfo[i].fT0.push_back(0);
746 for (UInt_t j=0; j<addRunInfo[i].fT0.size(); j++) {
747 if (addRunInfo[i].fT0[j] == 0) {
748 addRunInfo[i].fT0[j] = runDataHandler[i]->GetRunData()->GetT0Bin(j+1);
749 }
else if (addRunInfo[i].fT0[j] == -1) {
750 addRunInfo[i].fT0[j] =
addRun_getPromptPeakPos(runDataHandler[i]->GetRunData()->GetDataSet(j,
false)->GetData());
757 diff.resize(addRunInfo[i].fT0.size());
758 for (UInt_t j=0; j<diff.size(); j++) {
759 diff[j] = addRunInfo[i].fT0[j] - addRunInfo[0].fT0[j];
765 for (
int j=0; j<runDataHandler[i]->GetRunData()->GetNoOfHistos(); j++) {
766 addData = runDataHandler[i]->GetRunData()->GetDataSet(j,
false)->GetData();
767 for (
int k=0; k<addedHistos[j]->size(); k++) {
769 if ((idx >= 0) && (idx < addData->size())) {
770 addedHistos[j]->at(k) += addData->at(idx);
778 rawRunData = runDataHandler[0]->GetRunData();
779 if (rawRunData ==
nullptr) {
780 std::cerr <<
">> addRun: **ERROR** couldn't obtain PRawRunData object." << std::endl;
794 if (dataOut->SetRunData(rawRunData)) {
796 dataOut->WriteData();