00001
00002
00003
00004
00005
00006
00008 #ifndef __CINT__
00009 #include "TSystem.h"
00010 #include "TBrowser.h"
00011 #include "TBenchmark.h"
00012 #include "TClassTable.h"
00013 #include "StBFChain.h"
00014 #include "St_tcl_Maker/St_tcl_Maker.h"
00015 #include "St_tpt_Maker/St_tpt_Maker.h"
00016 #include "StEvent.h"
00017 #include "St_geant_Maker/St_geant_Maker.h"
00018 #include "StIOMaker/StIOMaker.h"
00019 #include "StEventDisplayMaker/StEventDisplayMaker.h"
00020 #include "StEventMaker/StEventMaker.h"
00021 #include "StAssociationMaker/StMcParameterDB.h"
00022 #include "St_dst_Maker/StV0Maker.h"
00023 #include "xdf2root/St_XDFFile.h"
00024 #include "StPass0CalibMaker/StTpcT0Maker.h"
00025 void Usage();
00026 void Load();
00027 #else
00028 class StMaker;
00029 class StBFChain;
00030 class StEvent;
00031 class St_geant_Maker;
00032 class StIOMaker;
00033 class St_XDFFile;
00034 class StEventDisplayMaker;
00035 class StEventMaker;
00036 class StTpcT0Maker;
00037 #endif
00038 TBrowser *b = 0;
00039 StBFChain *chain=0;
00040 StMaker *treeMk=0;
00041 StEvent *Event;
00042 St_geant_Maker *geant = 0;
00043 StEventDisplayMaker *dsMk = 0;
00044 StEventMaker *evMk = 0;
00045 StTpcT0Maker *t0mk = 0;
00046
00047 void Load(){
00048 if (gClassTable->GetID("TTable") < 0) gSystem->Load("libTable");
00049 gSystem->Load("St_base");
00050 gSystem->Load("StChain");
00051 gSystem->Load("StUtilities");
00052 gSystem->Load("StBFChain");
00053 gSystem->Load("StChallenger");
00054 }
00055
00056 void bfcS(const Int_t First,
00057 const Int_t Last,
00058 const Char_t *Chain="gstar Cy2b tfs -NoHits",
00059 const Char_t *infile=0,
00060 const Char_t *outfile=0,
00061 const Char_t *TreeFile=0)
00062 {
00063
00064
00065
00066
00067
00068
00069 if (gClassTable->GetID("StBFChain") < 0) Load();
00070 if (chain) delete chain;
00071 chain = new StBFChain;
00072 if (!chain) gSystem->Exit(1);
00073 chain->SetFlags(Chain);
00074 if (TreeFile) chain->SetTFile(new TFile(TreeFile,"RECREATE"));
00075 printf ("QAInfo:Process [First=%6i/Last=%6i/Total=%6i] Events\n",First,Last,Last-First+1);
00076 chain->Set_IO_Files(infile,outfile);
00077 if (chain->Load() > kStOk)
00078 {printf("Error:Problems with loading of shared library(ies)\n"); gSystem->Exit(1);}
00079 if (Last < -1) return;
00080 if (chain->Instantiate() > kStOk)
00081 {printf("Error:Problems with instantiation of Maker(s)\n"); gSystem->Exit(1);}
00082 if (Last < 0) return;
00083 if (chain->GetOption("DISPLAY")) dsMk = (StEventDisplayMaker *) chain->GetMaker("EventDisplay");
00084
00085
00086 Char_t *myMaker = "StTpcHitFilterMaker";
00087 if (gClassTable->GetID(myMaker) < 0) gSystem->Load(myMaker);
00088 StMaker *myMk = chain->GetMaker(myMaker);
00089 if (myMk) delete myMk;
00090
00091 myMk = chain->New(myMaker,"tpc_hit_filter");
00092 if (myMk) {
00093 Char_t *after = "tpc_tracks";
00094 StMaker *tclmk = chain->GetMaker(after);
00095 if (tclmk) chain->AddAfter(after,myMk);
00096 }
00097 StTpcHitFilterMaker* filter = (StTpcHitFilterMaker*)myMk;
00098 filter->RidiculousErrorsInner();
00099 filter->DoNotDeleteHits();
00100
00101 #ifdef __CINT__
00102 if (chain->GetOption("TCL") && chain->GetOption("Eval")) {
00103 St_tcl_Maker *tclMk= (St_tcl_Maker *) chain->GetMaker("tpc_hits");
00104 if (tclMk) {
00105 tclMk->tclPixTransOn();
00106 tclMk->tclEvalOn();
00107 }
00108 }
00109 if (chain->GetOption("TPT")) {
00110 St_tpt_Maker *tptMk = (St_tpt_Maker *) chain->GetMaker("tpc_tracks");
00111 if (tptMk && chain->GetOption("MINIDAQ")) tptMk->Set_final(kTRUE);
00112 if (tptMk && chain->GetOption("Eval")) {
00113 tptMk->tteEvalOn();
00114 tptMk->tptResOn();
00115 }
00116 }
00117 if (chain->GetOption("TpcT0")) {
00118 StTpcT0Maker *t0mk = (StTpcT0Maker *) chain->GetMaker("TpcT0");
00119 if (t0mk) t0mk->SetDesiredEntries(10);
00120 }
00121 if (chain->GetOption("McAss")) {
00122
00123
00124 StMcParameterDB* parameterDB = StMcParameterDB::instance();
00125
00126 parameterDB->setXCutTpc(.5);
00127 parameterDB->setYCutTpc(.5);
00128 parameterDB->setZCutTpc(.2);
00129 parameterDB->setReqCommonHitsTpc(3);
00130
00131 parameterDB->setRCutFtpc(.3);
00132 parameterDB->setPhiCutFtpc(5*(3.1415927/180.0));
00133 parameterDB->setReqCommonHitsFtpc(3);
00134
00135 parameterDB->setXCutSvt(.1);
00136 parameterDB->setYCutSvt(.1);
00137 parameterDB->setZCutSvt(.1);
00138 parameterDB->setReqCommonHitsSvt(1);
00139 }
00140 if (chain->GetOption("V0") && chain->GetOption("Eval")) {
00141 StV0Maker *v0Mk = (StV0Maker *) chain->GetMaker("v0");
00142 if (v0Mk) v0Mk->ev0EvalOn();
00143 }
00144 #endif
00145 {
00146 TDatime t;
00147 printf ("QAInfo:Run is started at Date/Time %i/%i\n",t.GetDate(),t.GetTime());
00148 }
00149 printf ("QAInfo:Run on %s in %s\n",
00150 gSystem->HostName(),
00151 gSystem->WorkingDirectory());
00152 printf ("QAInfo: with %s\n", chain->GetCVS());
00153
00154
00155 Int_t iTotal = 0, iBad = 0;
00156 St_XDFFile *xdf_out = 0;
00157 TBenchmark evnt;
00158 Int_t iMake = 0, i = First;
00159 if (Last >= 0) {
00160 Int_t iInit = chain->Init();
00161 if (iInit >= kStEOF) {
00162 chain->Fatal(iInit,"on init");
00163 goto END;
00164 }
00165 StEvtHddr *hd = (StEvtHddr*)chain->GetDataSet("EvtHddr");
00166 if (hd) hd->SetRunNumber(-2);
00167
00168 if (First > 1) {
00169 if (chain->GetOption("fzin")) {
00170 geant = (St_geant_Maker *) chain->GetMaker("geant");
00171 if (geant) {
00172 if (geant->IsActive()) geant->Skip(First-1);
00173 }
00174 }
00175 else {
00176 StIOMaker *inpMk = (StIOMaker *) chain->GetMaker("inputStream");
00177 if (inpMk) {printf ("Skip %i Events\n",First-1);inpMk->Skip(First-1);}
00178 }
00179 }
00180 }
00181 xdf_out = chain->GetXdfOut();
00182 if (chain->GetOption("Event")) evMk = (StEventMaker *) chain->GetMaker("StEventMaker");
00183 treeMk = chain->GetMaker("OutputStream");
00184 EventLoop: if (i <= Last && iMake != kStEOF && iMake != kStFatal) {
00185 evnt.Reset();
00186 evnt.Start("QAInfo:");
00187 chain->Clear();
00188 iMake = chain->Make(i);
00189 if (iMake <kStEOF) {
00190 if (xdf_out){
00191 St_DataSet *dstSet = chain->GetInputDS("dst");
00192 if (dstSet) xdf_out->NextEventPut(dstSet);
00193 }
00194 iTotal++;
00195 if (treeMk && iMake == kStErr) {treeMk->Make(i); iBad++;}
00196
00197 evnt.Stop("QAInfo:");
00198
00199 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",
00200 i,chain->GetRunNumber(),chain->GetEventNumber(),chain->GetDate(), chain->GetTime(),
00201 iMake,evnt.GetRealTime("QAInfo:"),evnt.GetCpuTime("QAInfo:"));
00202 }
00203 i++; goto EventLoop;
00204 }
00205 END:
00206 fflush(stdout);
00207 printf ("QAInfo:Run completed ");
00208 gSystem->Exec("date");
00209 if (evMk) Event = (StEvent *) chain->GetInputDS("StEvent");
00210 {
00211 TDatime t;
00212 printf ("\nQAInfo:Run is finished at Date/Time %i/%i; Total events processed :%i and not completed: %i\n",
00213 t.GetDate(),t.GetTime(),iTotal,iBad);
00214 }
00215 }
00216
00217 void bfcS (const Int_t Last,
00218 const Char_t *Chain="gstar Cy2b tfs evout -NoHits",
00219 const Char_t *infile=0,
00220 const Char_t *outfile=0,
00221 const Char_t *TreeFile=0)
00222 {
00223 bfcS(1,Last,Chain,infile,outfile,TreeFile);
00224 }
00225
00226 void bfcS (const Char_t *Chain="",
00227 const Char_t *infile=0,
00228 const Char_t *outfile=0,
00229 const Char_t *TreeFile=0)
00230 {
00231 if (!Chain || !strlen(Chain)) {
00232 Usage();
00233 }
00234 }
00235
00236 void Usage() {
00237 #if 0
00238 printf ("============= \tImportant two changes:\n"
00239 " \tIt is required exact matching in Chain definition\n"
00240 " \tAll Chain options set in supplyed order\n");
00241 #endif
00242 if (gClassTable->GetID("StBFChain") < 0) Load();
00243 chain = new StBFChain;
00244 chain->SetFlags("");
00245 printf ("============= \t U S A G E =============\n");
00246 printf ("bfc(Int_t First, Int_t Last, Char_t *Chain, Char_t *infile, Char_t *outfile,, Char_t *TreeFile)\n");
00247 printf ("bfc(Int_t Last, Char_t *Chain, Char_t *infile, Char_t *outfile, Char_t *TreeFile)\n");
00248 printf ("bfc(Char_t *Chain, Char_t *infile, Char_t *outfile)\n");
00249 printf ("where\n");
00250 printf (" First \t- First event to process \t(Default = 1)\n");
00251 printf (" Last \t- Last event to process \t(Default = 1)\n");
00252 printf (" Chain \t- Chain specification \t(without First & Last: Default is \"\" which gives this message)\n");
00253 printf (" \t \t with First || Last: Default is \"gstar tfs\")\n");
00254 printf (" infile \t- Name of Input file \t(Default = 0, i.e. use preset file names depending on Chain)\n");
00255 printf (" outfile \t- Name of Output file \t(Default = 0, i.e. define Output file name from Input one)\n");
00256 printf ("Examples:\n");
00257 printf (" root4star bfc.C \t// Create this message\n");
00258 printf (" root4star 'bfc.C(1)' \t// Run one event with default Chain=\"gstar tfs\"\n");
00259 printf (" root4star 'bfc.C(1,1)' \t// the same\n");
00260 printf ("\n root4star 'bfc.C(1,\"off tdaq tpc HalfField global dst display\",\"/star/rcf/daq/1999/12/st_cluster2_0351027_raw_0001.daq\")'\n");
00261 printf (" \t// create a DST by processing a DAQ data from <st_cluster2_0351027_raw_0001.daq>\n\n");
00262 printf (" root4star 'bfc.C(2,40,\"Cy1b fzin\")'\t// run for configuration year_1b, \n");
00263 printf (" \t// reading /star/rcf/disk1/star/test/psc0050_01_40evts.fzd\n");
00264 printf (" \t// skipping the 1-st event and processing the remaining 39 events\n");
00265 printf (" root4star 'bfc.C(40,\"Cy1b fzin\",\"/star/rcf/disk1/star/test/psc0050_01_40evts.fzd\")'\n");
00266 printf (" root4star 'bfc.C(40,\"Cy1b fzin\")'\t// the same as above\n");
00267 printf (" root4star 'bfc.C(2,40,\"Cy1b fzin -l3t\")'//the as above but remove L3T from chain\n");
00268 printf (" root4star 'bfc.C(40,\"Cy2a fzin\",\"/star/rcf/disk0/star/test/venus412/b0_3/year_2a/psc0208_01_40evts.fz\")'\n");
00269 printf (" root4star 'bfc.C(40,\"Cy2a fzin\")'\t// the same as above\n");
00270 printf (" root4star 'bfc.C(5,10,\"Cy1b in xout\",\"/afs/rhic.bnl.gov/star/tpc/data/tpc_s18e_981105_03h_cos_t22_f1.xdf\")'\n");
00271 printf (" \t// skipping the 4 events and processing the remaining 6 events\n");
00272 printf (" root4star 'bfc.C(1,\"off in tpc FieldOff sd97 eval\",\"Mini_Daq.xdf\")'\t// the same as Chain=\"minidaq\"\n");
00273 printf (" root4star 'bfc.C(1,\"gstar Cy1a tfs allevent\")' \t// run gstar and write all event into file branches\n");
00274 printf (" root4star 'bfc.C(1,\"off in Cy1a l3t\",\"gtrack.tpc_hits.root\")'\t// run l3t only with prepaired file\n");
00275 printf (" root4star 'bfc.C(1,\"tdaq display\",\"/star/rcf/disk1/star/daq/990727.3002.01.daq\")' \n");
00276 printf (" \t//Cosmics (56) events with full magnetic field, TPC only \n");
00277 printf (" root4star 'bfc.C(1,\"tdaq FieldOn\",\"/star/rcf/disk1/star/daq/990624.306.daq\")' \n");
00278 printf (" \t//Cosmics (56) events with full magnetic field \n");
00279 printf (" root4star 'bfc.C(1,\"tdaq HalfField\",\"/star/rcf/disk1/star/daq/990630.602.daq\")' \n");
00280 printf (" \t//Laser (10) events with half magnetic field \n");
00281 printf (" root4star 'bfc.C(1,\"tdaq FieldOff\",\"/star/rcf/disk1/star/daq/990701.614.daq\")' \n");
00282 printf (" \t//Laser (12) events with no magnetic field \n");
00283 gSystem->Exit(1);
00284 }