#include "analyse.h" #include "hruntimedb.h" #include "TStopwatch.h" #include #include #define NARGS 1 #define ARGSTRING "outname [number of events [start evt] [config file]]" #ifndef CONFDEFAULT #define CONFDEFAULT "./hydra.conf" #endif extern HRuntimeDb *rtdb; extern Bool_t makeTree; extern TString *masterTaskConfig; extern Bool_t creatertdbfile; Bool_t parseArgs(int argc, char ** argv) { if((argc > 1) && (strlen(argv[1]) < sizeof(outname))) strncpy(outname,argv[1], strlen(argv[1])); else return kFALSE; if(argc > 2) nev = atoi(argv[2]); if(argc > 3) startev = atoi(argv[3]); if((argc > 4) && (strlen(argv[4]) < sizeof(confName))) strncpy(confName,argv[4],strlen(argv[4])); else strncpy(confName,CONFDEFAULT,strlen(CONFDEFAULT)); return kTRUE; } void usage(void) { printf("\n\t%s%s\n","hydra ",ARGSTRING); } int main(int argc, char **argv) { TStopwatch timer; TROOT Unpacker("Unpacker","compiled unpacker macro for mdc"); gROOT->SetBatch(kTRUE); if(argc > NARGS) { if(parseArgs(argc,argv)) { if(readParams(confName)) { myHades = new Hades(); myHades->setTreeBufferSize(8000); setupOutputName(); if(setupDetectors()) { if(creatertdbfile) setupDbOutput(); setupDatasource(); setParameterSource(); setupFiles(); setupParContext(); if((!(masterTaskConfig->CompareTo("simulation")==0)) && (!(masterTaskConfig->CompareTo("merge") == 0))) if(!setupUnpacker()) { rtdb->closeFirstInput(); rtdb->closeSecondInput(); delete myHades; exit(1); } if(setupTasksets()) { if(!myHades->init()) { Error("myHades->init()","failed!","exiting"); rtdb->closeFirstInput(); rtdb->closeSecondInput(); delete myHades; exit(1); } setupOutputGlobal(); printf("Processing events...\n"); timer.Reset(); timer.Start(); if (nev==1) nev=myHades->eventLoop(kMaxInt,startev); else nev = myHades->eventLoop(nev,startev); timer.Stop(); evalStopwatch(&timer,nev); delete myHades; } else { printf("%s\n","Error initializing tasksets..."); rtdb->closeFirstInput(); rtdb->closeSecondInput(); delete myHades; exit(1); } } } return 0; } } else { usage(); return 1; } }