// ------------------ Here is the actual method ----------------------------------------- void doEvents(const Char_t *inname, const Char_t *histname, const Char_t *ntuplename) { Int_t nEvents = 10; Int_t nfiles = 100; // // First load some shared libraries we need // if (gClassTable->GetID("TTable") < 0) { gSystem->Load("libStar"); gSystem->Load("libPhysics"); } gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C"); loadSharedLibraries(); gSystem->Load("StarMagField"); gSystem->Load("StMagF"); gSystem->Load("StTpcDb"); // gSystem->Load("StDbUtilities"); gSystem->Load("StDaqLib"); gSystem->Load("StDbBroker"); gSystem->Load("StDetectorDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("St_db_Maker"); gSystem->Load("StEvent"); gSystem->Load("StEventMaker"); gSystem->Load("StarMagField"); gSystem->Load("StTofUtil"); gSystem->Load("StTofMaker"); gSystem->Load("libtpc_Tables"); gSystem->Load("libGeom"); gSystem->Load("St_g2t"); gSystem->Load("geometry"); gSystem->Load("St_geant_Maker"); gSystem->Load("StTofrMatchMaker"); // gSystem->Load("StTofpMatchMaker"); // gSystem->Load("StTofCalibMaker"); // gSystem->Load("StTofFlowMaker"); gSystem->Load("StTofrNtupleMaker"); // Handling depends on whether file is a ROOT file or XDF file // chain = new StChain("StChain"); StIOMaker* ioMaker = new StIOMaker(); ioMaker->SetFile(inname); ioMaker->SetIOMode("r"); ioMaker->SetBranch("*",0,"0"); ioMaker->SetBranch("eventBranch",0,"r"); ioMaker->SetDebug(0); int NwGeant=5000000, IwType=0, NwPaw=0; St_geant_Maker *geantMk = new St_geant_Maker("geant",NwGeant,NwPaw,IwType); geantMk->LoadGeometry("detp geometry y2008"); geantMk->SetActive(kFALSE); cout<<endl<<"============ Data Base ========="<<endl; dbMk = new St_db_Maker("db","MySQL:StarDb","$STAR/StarDb","StarDb"); StTofrMatchMaker *matchMaker = new StTofrMatchMaker("tofrMatch"); matchMaker->SetDebug(0); matchMaker->SetMode(1); matchMaker->setSaveGeometry(kTRUE); matchMaker->setCreateHistoFlag(kTRUE); matchMaker->setCreateTreeFlag(kTRUE); matchMaker->setHistoFileName(histname); //matchMaker->setNtupleFileName("test2.root"); StTofrNtupleMaker *tofrNtuple = new StTofrNtupleMaker("tofrNtuple", ntuplename); tofrNtuple->SetDebug(0); tofrNtuple->setInitGeomFromOther(kTRUE); // // Initialize chain // Int_t iInit = chain->Init(); if (iInit) chain->Fatal(iInit,"on init"); chain->PrintInfo(); // // Event loop // int istat = 0, i = 1; EventLoop: if (i <= nEvents && istat != 2) { cout << endl << "============================ Event " << i << " start ============================" << endl; chain->Clear(); istat = chain->Make(i); if (istat == 2) {cout << "Last event processed. Status = " << istat << endl;} if (istat == 3) {cout << "Error event processed. Status = " << istat << endl;} // gObjectTable->Print(); i++; goto EventLoop; } i--; cout<<endl<<"============================ Event "<<i<<" finish ============================"<<endl; // // Chain Finish // if (nEvents > 1) { chain->Finish(); } }
// ------------------ Here is the actual method ----------------------------------------- void RunStiMaker(Int_t nevents, const Char_t **fileList, const Char_t *qaflag, const Int_t wrStEOut) { Int_t theRunNumber=0; bool simulated = true; bool doFit = false; bool optimized = false; char* outfile = "Evaluation.root"; cout << endl << endl <<" doEvents - input # events = " << nevents << endl; Int_t ilist=0; while(fileList[ilist]){ cout << " doEvents - input fileList = " << fileList[ilist] << endl; ilist++; } cout << " doEvents - input qaflag = " << qaflag << endl; cout << " doEvents - input wrStEOut = " << wrStEOut << endl << endl << endl; // // First load some shared libraries we need // gSystem->Load("St_base"); gSystem->Load("StUtilities"); gSystem->Load("StChain"); gSystem->Load("StBFChain"); gSystem->Load("St_Tables"); gSystem->Load("libgen_Tables"); gSystem->Load("libsim_Tables"); gSystem->Load("libglobal_Tables"); gSystem->Load("geometry"); gSystem->Load("St_g2t"); gSystem->Load("St_geant_Maker"); gSystem->Load("StIOMaker"); gSystem->Load("StTreeMaker"); gSystem->Load("StarClassLibrary"); gSystem->Load("St_db_Maker"); gSystem->Load("StDbLib"); gSystem->Load("StDbBroker"); gSystem->Load("StSvtDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("StTpcDb"); gSystem->Load("StEvent"); gSystem->Load("StEventMaker"); gSystem->Load("StEmcUtil"); gSystem->Load("StMcEvent"); gSystem->Load("StMcEventMaker"); gSystem->Load("StAssociationMaker"); gSystem->Load("StDaqLib"); gSystem->Load("StDAQMaker"); gSystem->Load("StSvtClassLibrary"); gSystem->Load("StSvtDaqMaker"); gSystem->Load("StSvtSimulationMaker"); gSystem->Load("StSvtCalibMaker"); gSystem->Load("StSvtSeqAdjMaker"); //gSystem->Load("StSvtEvalMaker"); gSystem->Load("StSvtClusterMaker"); //cout <<"Loading StMcEventMaker"<<endl; //gSystem->Load("StMcEventMaker"); //cout <<"Loading AssociationMaker"<<endl; //gSystem->Load("StAssociationMaker"); cout <<"Loading Sti"<<endl; gSystem->Load("Sti"); cout <<"Loading StiGui"<<endl; gSystem->Load("StiGui"); cout <<"Loading StiEvaluator"<<endl; gSystem->Load("StiEvaluator"); cout <<"Loading libGui"<<endl; gSystem->Load("libGui"); cout <<"Loading StiMaker"<<endl; gSystem->Load("StiMaker"); cout <<"Loading StItTestMaker"<<endl; gSystem->Load("StItTestMaker"); // // Handling depends on whether file is a ROOT file or XDF file // chain = new StChain("StChain"); StFileI *setFiles =0; if (fileList) { //Normal case setFiles= new StFile(fileList); } else { //Grand Challenge gSystem->Load("StChallenger"); setFiles = StChallenger::Challenge(); setFiles->SetDebug(); const char *Argv[]= { "-s","daq", // list of components needed "-q","mRunNumber=1228023", // example of user query "-c","/afs/rhic.bnl.gov/star/incoming/GCA/daq/stacs.rc" // pointer to GC servers for daq }; Int_t Argc=sizeof(Argv)/4; setFiles->Init(Argc,Argv); } StIOMaker *IOMk = new StIOMaker("inputStream","r",setFiles); //IOMk->SetBranch("*",0,"0"); //deactivate all branches //IOMk->SetBranch("dstBranch",0,"r"); //IOMk->SetBranch("runcoBranch",0,"r"); IOMk->SetBranch("eventBranch",0,"r"); if (simulated) { //addded by MLM IOMk->SetBranch("geantBranch",0,"r"); } IOMk->SetDebug(); St_geant_Maker *geantMk = new St_geant_Maker("geant"); geantMk->SetActive(kFALSE); // // Maker to read events from file or database into StEvent // //StEventMaker *readerMaker = new StEventMaker("events","title"); // // DB maker // // dbaseMk = new St_db_Maker("svt","$PWD/svtcvs/StarDb"); //dbaseMk = new St_db_Maker("db","StarDb"); dbaseMk = new St_db_Maker("db","MySQL:StarDb","$STAR/StarDb"); //dbaseMk->SetDateTime("year_1h"); //dbaseMk->SetDateTime("year_2a"); dbaseMk-> SetDateTime(20010801,000000); // // TPC Db maker // tpcDbMk = new StTpcDbMaker("tpcDb"); // // SVT Db maker // svtDbMk = new StSvtDbMaker("svtDb"); //StMcEventMaker StMcEventMaker* mcEventReader = 0; //Association StAssociationMaker* assocMaker = 0; if (simulated) { mcEventReader = new StMcEventMaker(); assocMaker = new StAssociationMaker(); } //StiMaker StiMaker* anaMk = StiMaker::instance(); cout <<"\n --- Setup StiIOBroker ---\n"<<endl; //StiIOBroker StiRootIOBroker* stiIO = new StiRootIOBroker(); stiIO->setTPHFMinPadrow(1); stiIO->setTPHFMaxPadrow(45); stiIO->setETSFLowerBound(5); stiIO->setETSFMaxHits(6); stiIO->setDoTrackFit(doFit); //Set Kalman Track Finder (KTF) run-time values: stiIO->setKTFMcsCalculated(false); stiIO->setKTFElossCalculated(false); stiIO->setKTFMaxChi2ForSelection(50); stiIO->setKTFBField(.5); //Tesla stiIO->setKTFMassHypothesis(.1395); //GeV stiIO->setKTFMinContiguousHitCount(2); stiIO->setKTFMaxNullCount(40); stiIO->setKTFMaxContiguousNullCount(25); stiIO->setKTFMinSearchRadius(.5); //cm stiIO->setKTFMaxSearchRadius(4.); //cm stiIO->setKTFSearchWindowScale(5.); //cm //Set Local Track Seed Finder (LTSF) run-time values stiIO->setLTSFZWindow(5.); stiIO->setLTSFYWindow(2.); stiIO->setLTSFSeedLength(2); stiIO->setLTSFDoHelixFit(true); stiIO->setLTSFExtrapYWindow(1.); stiIO->setLTSFExtrapZWindow(2.); stiIO->setLTSFExtrapMaxSkipped(2); stiIO->setLTSFExtrapMinLength(4); stiIO->setLTSFExtrapMaxLength(5); stiIO->setLTSFUseVertex(true); stiIO->setLTMDeltaR(1.); //10% in r //Add sectors: for (unsigned int sector=1; sector<=12; ++sector) { stiIO->addLTSFSector(sector); } //Add padrows; //for (unsigned int padrow=1; padrow<=45; ++padrow) { for (unsigned int padrow=6; padrow<=45; padrow+=1) { stiIO->addLTSFPadrow(padrow); } //This line has to match the corresponding enumeration in StiIOBroker.h enum SeedFinderType {kUndefined=0, kComposite=1, kEvaluable=2}; //stiIO->setSeedFinderType(kEvaluable); stiIO->setSeedFinderType(kComposite); //Set up the track filter (this mas to macth the correspoinding enumeration in StiIOBroker.h) enum FilterType {kPtFilter=0, kEtaFilter=1, kChi2Filter=2, kNptsFilter=3, kNFitPtsFilter=4, kNGapsFilter=5, kFitPointRatioFilter=6, kPrimaryDcaFilter=7}; stiIO->addFilterType(kPtFilter); stiIO->setFilterPtMin(.1); //GeV stiIO->setFilterPtMax(50.); //GeV stiIO->addFilterType(kEtaFilter); stiIO->setFilterEtaMin(-2.); stiIO->setFilterEtaMax(2.); stiIO->addFilterType(kChi2Filter); stiIO->setFilterChi2Max(10.); stiIO->addFilterType(kNptsFilter); stiIO->setFilterNptsMin(8); stiIO->addFilterType(kNFitPtsFilter); stiIO->setFilterNFitPtsMin(5); stiIO->addFilterType(kNGapsFilter); stiIO->setFilterNGapsMax(20); //stiIO->addFilterType(kFitPointRatioFilter); //stiIO->setFilterFitPointRatioMin(.5); stiIO->addFilterType(kPrimaryDcaFilter); stiIO->setFilterPrimaryDcaMax(100.); stiIO->setSimulated(simulated); anaMk->setEvaluationFileName(outfile); if (simulated) { anaMk->setMcEventMaker(mcEventReader); anaMk->setAssociationMaker(assocMaker); } //Make Control Window if not batch MainFrame* sti=0; StiGuiIOBroker* guiIO=0; if (gROOT->IsBatch()==false) { cout <<"No batch option detected. Run Integrated Tracker in Gui Mode."<<endl; sti = new MainFrame(gClient->GetRoot(), 400, 220); sti->setStChain(chain); sti->setIoMaker(IOMk); //we're in batch mode stiIO->setUseGui(true); //Maker io gateway guiIO = StiGuiIOBroker::instance(); //Values for hits not assigned to tracks guiIO->setUnMarkedHitSize(.3); guiIO->setUnMarkedHitColor(4); guiIO->setUnMarkedHitStyle(8); guiIO->setUpdateEachTrack(false); //Values for hits assigned to tracks guiIO->setMarkedHitSize(.3); guiIO->setMarkedHitColor(2); guiIO->setMarkedHitStyle(3); } else { cout <<"Batch option detector. Run Integrated Tracker in non-Gui Mode."<<endl; stiIO->setUseGui(false); } cout <<"\n --- Done setting up StiIOBroker --- \n"<<endl; // WriteOut StEvent if (wrStEOut) { cout << "!!!! doEvents: will write out .event.root file !!" << endl << endl; StIOMaker *outMk = new StIOMaker("EvOut","w","test.event.root","bfcTree"); // outMk->SetBranch("eventBranch","test.event.root","w"); outMk->IntoBranch("evtselBranch","StEvent"); IOMk->SetNotify("CloseFile",outMk); IOMk->SetNotify("OpenFile" ,outMk); } // // test the Ittf tracks in StEvent // StItTestMaker* itTest = new StItTestMaker("StItTestMaker"); /* dbaseMk->Init(); svtDbMk->setSvtDb_Reader(); dbaseMk->Make(); svtDbMk->readSvtConfig(); svtDbMk->readSvtGeometry(); */ // // Initialize chain // Int_t iInit = chain->Init(); if (iInit) chain->Fatal(iInit,"on init"); //chain->PrintInfo(); chain->InitRun(theRunNumber); // // Event loop // int istat=0,i=1; EventLoop: if (i <= nevents && istat!=2) { cout << endl << "============================ Event " << i << " start ============================" << endl; chain->Clear(); istat = chain->Make(i); if (istat==2) {cout << "Last event processed. Status = " << istat << endl;} if (istat==3) {cout << "Error event processed. Status = " << istat << endl;} i++; goto EventLoop; } //chain->Finish(); i--; cout << endl << "============================ Event " << i << " finish ============================" << endl; }
//_____________________________________________________________________ void bfcMixer_pp2006( Int_t Nevents=10, Char_t *file1="star/data03/daq/2006/120/7120049/st_physics_adc_7120049_raw_1050001.daq", // probably ppLong 2006 run, NOT for real embedding - just for testing //Char_t *file1="st_zerobias_7118049_raw_1110001.daq",// contains 127 events, good foor real embedding // Char_t *file2="eleB.fzd", // one-particle events from Naresh Char_t *file2="mcpi0_hipt_run140_gid7_1000evts.fzd", Int_t useEndcapSlowSim=1 // note, Barrel slow sim is always ON, said Adam ){ TString path1="/"; //TString path2="/star/data04/sim/subbanly/electron2006/oneTrack2Keve/fzd/"; TString path2="/star/u/wzhang/links/gc2002/EEmc/embedData/fzd/"; // Dynamically link some shared libs if (gClassTable->GetID("StBFChain") < 0) Load(); // Create the main chain object chain = new StBFChain("Embedding"); StMaker *saveMk = 0; chain->SetFlags("-ittf,NoDefault"); // Create chain1 object chain1 = new StBFChain("One"); saveMk = chain1->cd(); chain1->SetFlags("in Physics NoDefault -ittf -trg"); //Akio said OK for '-trg'. chain1->Set_IO_Files(path1+file1); chain1->Load(); chain1->Instantiate(); saveMk->cd(); // Create chain2 object chain2 = new StBFChain("Two"); saveMk = chain2->cd(); chain2->SetFlags("fzin gen_T geomT sim_T tpc trs -tcl -tpt -PreVtx -tpc_daq -ittf "); chain2->Set_IO_Files(path2+file2); chain2->Load(); chain2->Instantiate(); St_geant_Maker *geantMk = chain2->GetMaker("geant"); if (geantMk) geantMk->SetMode(1); // Mixer mode - do not modify EvtHddr // do not rescale dEdx in TRS, it leads to wrong cluster formation, from Jamie saveMk->cd(); // Mixer for TPC gSystem->Load("StMixerMaker"); StMixerMaker *mixer = new StMixerMaker("Mixer","daq","trs"); chain1->SetInput("Input1","StDAQReader"); chain2->SetInput("Input2","Event"); mixer->writeFile("mixer.trs",Nevents); // Create chain3 object chain3 = new StBFChain("Three"); saveMk = chain3->cd(); // options for 2006pp, production=DbV20060915,pp2006b,ITTF,hitfilt chain3->SetFlags("Simu NoDefault NoInput onlraw -onlcl ry2006,tpc_daq,tpcI,svt_daq,SvtD,Physics,Idst,l0,Tree,evout l3onl fcf emcDY2 fpd trgd ZDCvtx useCDV ITTF tofDat -SvtIT MuDST -trg VFPPVnoCTB beamline GeantOut CMuDst dEdxY2 -EventQA"); // Note, do not freez the DB time stamp or you will not see the latest gains/peds/stat TString tt1=file1; TString tt2=file2; tt1.ReplaceAll(".daq",""); tt2.ReplaceAll(".fzd",""); TString OutputFileName=tt1+"_"+tt2+".root"; cout <<"BFC: Setting file output to: " <<OutputFileName.Data()<<endl; chain3->Set_IO_Files(0,OutputFileName.Data()); chain3->Load(); chain3->Instantiate(); //............. begin of EMC embedding makers................ //.............. Add BEmc stuff here .................... StMcEventMaker* mcEventMaker = new StMcEventMaker(); StEmcSimulatorMaker *bemcSim = new StEmcSimulatorMaker(); StEmcMixerMaker *bemcMixer = new StEmcMixerMaker(); chain3->AddAfter("emcRaw",bemcMixer); chain3->AddAfter("emcRaw",bemcSim); chain3->AddAfter("emcRaw",mcEventMaker); bemcMixer->SetDebug(0); // set it to 1 for more printouts // note, Barrel slow sim is always ON, said Adam //........... Add EEmc Stuff ( Simu, and Mixer) here .............. StEEmcFastMaker *eemcFastSim = new StEEmcFastMaker(); StEEmcMixerMaker *eemcMixer = new StEEmcMixerMaker(); /* position B+E EMC makers in the chain (order is reverse because 'After' is used - looks funny but is right) */ chain3->AddAfter("emcRaw",eemcMixer); chain3->AddAfter("emcRaw",eemcFastSim); eemcFastSim->SetEmbeddingMode(); // eemcFastSim->SetDebug(); // eemcMixer->SetDebug(); if(useEndcapSlowSim) { // turn Endcap slow simu On/Off StEEmcSlowMaker *slowSim=new StEEmcSlowMaker(); chain3->AddAfter("EEmcFastSim",slowSim); slowSim->setEmbeddingMode(); } //............. end of EMC embedding makers................ St_geant_Maker *geantMk = (St_geant_Maker *) chain->GetMaker("geant"); geantMk->SetActive(kTRUE); StMaker *tpcdaqMk = chain3->GetMaker("tpc_raw"); if(!tpcdaqMk ) { cout <<" Error: no tpc daq maker. End. "<<endl; return; } tpcdaqMk->SetMode(1); // Trs tpcdaqMk->SetInput("Event","MixerEvent"); saveMk->cd(); { TDatime t; printf ("QAInfo:Run is started at Date/Time%i/%i\n",t.GetDate(),t.GetTime()); } printf ("QAInfo:Run on %s in %s\n", gSystem->HostName(), gSystem->WorkingDirectory()); printf ("QAInfo: with %s\n", chain->GetCVS()); // Init the chain and all its makers if (Nevents >= 0) { Int_t iInit = chain->Init(); chain->ls(5); // list the final chain } // chain->SetDEBUG(); treeMk = chain->GetMaker("tree"); TBenchmark evnt; Int_t iMake = 0, i = 1, iBad = 0; StIOMaker *inpMk = (StIOMaker *)chain1->GetMaker("inputStream"); Int_t ncols, eventnumber, mult, skip=0, oldskip = 0, skiptest=0; cout <<"BFC - Entering Event Loop"<<endl; EventLoop: if (i <= Nevents && iMake != kStEOF && iMake != kStFatal) { evnt.Reset(); evnt.Start("QAInfo:"); chain->Clear(); iMake = chain->Make(i); if (treeMk && iMake == kStErr) {treeMk->Make(i); iBad++;} StEvtHddr *fEvtHddr = (StEvtHddr*)chain->GetDataSet("EvtHddr"); StEvtHddr *fEvtHddrDaq = (StEvtHddr*)chain1->GetDataSet("EvtHddr"); *fEvtHddr = *fEvtHddrDaq; // gSystem->Exec("ps ux"); evnt.Stop("QAInfo:"); // evnt->Show("QAInfo:"); printf ("QAInfo: Done with Event [no. %d/run %d/evt. %d/Date.Time%d.%d/sta %d] Real Time = %10.2f seconds Cpu Time = %10.2f seconds \n", i,chain->GetRunNumber(),chain->GetEventNumber(),chain->GetDate(), chain->GetTime(), iMake,evnt.GetRealTime("QAInfo:"),evnt.GetCpuTime("QAInfo:")); i++; goto EventLoop; } fflush(stdout); printf ("QAInfo:Run completed "); gSystem->Exec("date"); }
void doWithGeomAlign(const Char_t *fileList = "test.lis", const Char_t *ntuplename = "testing.ntuple.root") { Int_t nEvents = 1000000;//1000; //1000000; Int_t nfiles = 1000; // // First load some shared libraries we need // if (gClassTable->GetID("TTable") < 0) { gSystem->Load("libStar"); gSystem->Load("libPhysics"); } gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C"); loadSharedLibraries(); gSystem->Load("StarMagField"); gSystem->Load("StMagF"); gSystem->Load("StDetectorDbMaker"); gSystem->Load("StTpcDb"); gSystem->Load("StDaqLib"); gSystem->Load("StDbBroker"); // gSystem->Load("StDetectorDbMaker"); gSystem->Load("StDbUtilities"); gSystem->Load("St_db_Maker"); gSystem->Load("StEvent"); gSystem->Load("StEventMaker"); gSystem->Load("StarMagField"); //gSystem->Load("libtpc_Tables"); gSystem->Load("libGeom"); gSystem->Load("St_g2t"); gSystem->Load("xgeometry"); gSystem->Load("St_geant_Maker"); // gSystem->Load("StMaker"); gSystem->Load("StBTofUtil"); gSystem->Load("StBTofMatchMaker"); gSystem->Load("StBTofNtupleMaker"); // Handling depends on whether file is a ROOT file or XDF file // chain = new StChain("StChain"); // StMaker *maker = new StMaker(); // maker->SetDebug(2); St_geant_Maker *geantMk = new St_geant_Maker(); geantMk->LoadGeometry("detp geometry y2013_2x"); geantMk->SetActive(kFALSE); // geantMk->SetDebug(1); StMuDstMaker *muDstMaker = new StMuDstMaker(0,0,"",fileList,"MuDst.root",nfiles); cout<<endl<<"============ Data Base ========="<<endl; dbMk = new St_db_Maker("db","MySQL:StarDb","$STAR/StarDb","StarDb"); StBTofMatchMaker *matchMaker = new StBTofMatchMaker("btofMatch"); matchMaker->SetDebug(0); matchMaker->setMuDstIn(kTRUE); matchMaker->setAlignFileName("./geomAlign_3rdOrder.txt"); matchMaker->setIdealGeometry(kFALSE); //matchMaker->setIdealGeometry(kTRUE); matchMaker->setCalculateAlign(kTRUE); // StBTofNtupleMaker *btofNtuple = new StBTofNtupleMaker("btofNtuple", ntuplename); btofNtuple->SetDebug(0); btofNtuple->setMuDstIn(kTRUE); // Initialize chain // Int_t iInit = chain->Init(); if (iInit) chain->Fatal(iInit,"on init"); chain->PrintInfo(); // // Event loop // int istat = 0, i = 1; EventLoop: if (i <= nEvents && istat != 2) { cout << endl << "============================ Event " << i << " start ============================" << endl; chain->Clear(); istat = chain->Make(i); if (istat == 2) {cout << "Last event processed. Status = " << istat << endl;} if (istat == 3) {cout << "Error event processed. Status = " << istat << endl;} // gObjectTable->Print(); i++; goto EventLoop; } i--; cout<<endl<<"============================ Event "<<i<<" finish ============================"<<endl; // // Chain Finish // if (nEvents > 1) { chain->Finish(); } }