00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012 class StBFChain;
00013 StBFChain *chain=0;
00014 class StMaker;
00015 StMaker *treeMk=0;
00016 StBFChain *chain1, *chain2, *chain3;
00017 class StEvent;
00018 StEvent *Event;
00019 class St_geant_Maker;
00020 class StIOMaker;
00021 class StEventDisplayMaker; StEventDisplayMaker *dsMk = 0;
00022 class StEventMaker; StEventMaker *evMk = 0;
00023 class StMixerMaker;
00024
00025 class StEvtHddr;
00026
00027 void Load(){
00028 gSystem->Load("St_base");
00029 gSystem->Load("StChain");
00030 gSystem->Load("StUtilities");
00031 gSystem->Load("StBFChain");
00032
00033
00034 gSystem->Load("StAnalysisUtilities");
00035
00036
00037 if (chain) delete chain;
00038 }
00039
00040 void bfcMixer_v4_noFTPC(const Int_t Nevents=10,
00041
00042 const Char_t *file1="/star/data03/daq/2004/090/st_physics_adc_5090009_raw_2060002.daq",
00043
00044 const Char_t *file2="./gtest.fz",
00045
00046
00047 const Char_t *file3="./st_physics_adc_5090009_raw_2060002.vertices.dat",
00048 const Float_t zvertex_low=-175.0,
00049 const Float_t zvertex_high=175.0,
00050 const Char_t *mode="strange",
00051 const Char_t *acc_mode="off" )
00052 {
00053
00054 if (gClassTable->GetID("StBFChain") < 0) Load();
00055
00056
00057 chain = new StBFChain("Embedding");
00058
00059 StMaker *saveMk = 0;
00060 chain->SetFlags("-ittf,NoDefault");
00061
00062 chain1 = new StBFChain("One");
00063
00064 saveMk = chain1->cd();
00065
00066
00067
00068 chain1->SetFlags("in Physics DbV20060421 NoDefault -ittf");
00069 chain1->Set_IO_Files(file1);
00070 chain1->Load();
00071 chain1->Instantiate();
00072
00073 saveMk->cd();
00074
00075
00076 chain2 = new StBFChain("Two");
00077 saveMk = chain2->cd();
00078
00079 chain2->SetFlags("fzin DbV20060421 gen_T geomT sim_T tpc trs -tcl -tpt -PreVtx -tpc_daq -ittf");
00080 chain2->Set_IO_Files(file2);
00081 chain2->Load();
00082 chain2->Instantiate();
00083 St_geant_Maker *geantMk = chain2->GetMaker("geant");
00084 if (geantMk) geantMk->SetMode(1);
00085
00086 if (chain2->GetOption("TRS")){
00087 StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs");
00088 trsMk->setNormalFactor(1.25);
00089 }
00090
00091
00092 if (!strcmp(mode,"strange")){
00093 if (!strcmp(acc_mode,"on")){
00094
00095 Char_t *extraMaker = "StV0AccMaker";
00096 if (gClassTable->GetID(extraMaker) < 0) gSystem->Load(extraMaker);
00097 StMaker *extraMk = (StMaker *)chain1->GetMaker(extraMaker);
00098 if(extraMk) delete extraMk;
00099 extraMk = chain->New(extraMaker,"before");
00100 if (extraMk) {
00101 Char_t *before = "Trs";
00102 StMaker *trsmk = chain1->GetMaker(before);
00103 if (trsmk) chain1->AddBefore(before,extraMk);
00104 StV0AccCuts *cuts = ((StV0AccMaker *)extraMk)->GetCutsPtr();
00105 cuts->SetFilter();
00106 cuts->SetV0MinDecayLen(0.);
00107 cuts->SetV0DaughterMinImpact(0);
00108 cuts->SetV0DaughterMinHit(10.);
00109 cuts->SetXiV0MaxImpact(5);
00110 cuts->SetXiMinDecayLen(2.);
00111 cuts->SetXiV0PiMinImpact(0.);
00112 cuts->SetXiDaughterMinHit(10.);
00113 cuts->SetKinkMinDecayRad(128.);
00114 cuts->SetKinkMaxDecayRad(184.);
00115 }
00116 }
00117 }
00118
00119
00120 saveMk->cd();
00121
00122
00123 gSystem->Load("StMixerMaker");
00124 StMixerMaker *mixer = new StMixerMaker("Mixer","daq","trs");
00125 chain1->SetInput("Input1","StDAQReader");
00126 chain2->SetInput("Input2","Event");
00127 mixer->writeFile("mixer.trs",Nevents);
00128
00129
00130
00131
00132
00133 chain3 = new StBFChain("Three");
00134 saveMk = chain3->cd();
00135
00136
00137
00138
00139
00140
00141 chain3->SetFlags("Simu NoDefault NoInput onlraw -onlcl DbV20050515 ry2005b tpc_daq tpc emcDY2 global dst Kalman event evout QA Tree GeantOut fcf ctf -Prevtx -nohits CMuDST ZDCvtx tofDat Xi2 Kink2 EST ToF svt_daq SvtD svtdEdx xiSvt l3onl fpd eemcD pmdRaw EmbeddingShortCut");
00142
00143
00144
00145 chain3->SetFlags("Simu NoDefault NoInput onlraw -onlcl ry2005b,tpc_daq,tpcI,svt_daq,SvtD,Physics,Idst,l0,Tree,evout l3onl fcf emcDY2 fpd trgd ZDCvtx DbV20060421 useCDV ITTF tofDat -SvtIT MuDST -trg VFMinuit GeantOut EmbeddingShortCut");
00146
00147
00148
00149
00150
00151
00152
00153 TString OutputFileName(gSystem->BaseName(file1));
00154 OutputFileName.ReplaceAll("*","");
00155 OutputFileName.ReplaceAll(".daq","");
00156 OutputFileName.Append(".root");
00157 cout <<"AAR - Setting file output to: " <<OutputFileName.Data()<<endl;
00158
00159 chain3->Set_IO_Files(0,OutputFileName.Data());
00160 chain3->Load();
00161 chain3->Instantiate();
00162 St_geant_Maker *geantMk = (St_geant_Maker *) chain->GetMaker("geant");
00163 geantMk->SetActive(kTRUE);
00164 StMaker *tpcdaqMk = chain3->GetMaker("tpc_raw");
00165 if(!tpcdaqMk )
00166 {
00167 cout <<" Error: no tpc daq maker. End. "<<endl;
00168 return;
00169 }
00170 tpcdaqMk->SetMode(1);
00171 tpcdaqMk->SetInput("Event","MixerEvent");
00172
00173
00174
00175 cout <<"AAR - going to file"<<endl;
00176
00177 saveMk->cd();
00178 {
00179 TDatime t;
00180 printf ("QAInfo:Run is started at Date/Time%i/%i\n",t.GetDate(),t.GetTime());
00181 }
00182 printf ("QAInfo:Run on %s in %s\n",
00183 gSystem->HostName(),
00184 gSystem->WorkingDirectory());
00185 printf ("QAInfo: with %s\n", chain->GetCVS());
00186
00187
00188 cout <<"AAR - initializing the chain"<<endl;
00189
00190 chain->SetDEBUG(0);
00191 if (Nevents >= 0) {
00192 Int_t iInit = chain->Init();
00193 }
00194
00195
00196 treeMk = chain->GetMaker("tree");
00197 TBenchmark evnt;
00198 Int_t iMake = 0, i = 1, iBad = 0;
00199
00200
00201 StIOMaker *inpMk = (StIOMaker *)chain1->GetMaker("inputStream");
00202 FILE *fp = fopen(file3,"r");
00203 Float_t x, y, z;
00204 Int_t ncols, eventnumber, mult, skip=0, oldskip = 0, skiptest=0;
00205 printf("zvertex_low = %f zvertex_high = %f\n",zvertex_low, zvertex_high);
00206
00207
00208
00209
00210 cout <<"AAR - Entering Event Loop"<<endl;
00211 EventLoop: if (i <= Nevents && iMake != kStEOF && iMake != kStFatal) {
00212 evnt.Reset();
00213 evnt.Start("QAInfo:");
00214 printf ("ELH3\n");
00215 chain->Clear();
00216 printf ("ELH4\n");
00217
00218 ncols = fscanf(fp,"%d %d %d %f %f %f",&eventnumber,&skip,&mult,&x,&y,&z);
00219 if(ncols<0) break;
00220
00221 printf("\nEvent number: %d Multiplicity = %d\n",eventnumber,mult);
00222 printf("vertex in bfcMixer: %16f %16f %16f\n",x,y,z);
00223
00224
00225
00226
00227
00228
00229 printf ("bfcMixer: i = %i\n",i);
00230 printf ("bfcMixer: skip = %i\n",skip);
00231 printf ("bfcMixer: oldskip = %i\n",oldskip);
00232 if (inpMk && skip>0) {
00233 if(i == 1) {skip++;}
00234 skiptest = inpMk->Skip(skip-oldskip-1);
00235 printf("bfcMixer: skiptest1 = %i\n",skiptest);
00236 skiptest = inpMk->Skip();
00237 printf("bfcMixer: skiptest2 = %i\n",skiptest);
00238 if(i == 1) {skip--;}
00239 }
00240 oldskip = skip;
00241
00242 use this to force the vertex position to match:
00243
00244
00245 iMake = chain->Make(i);
00246 if (treeMk && iMake == kStErr) {treeMk->Make(i); iBad++;}
00247 StEvtHddr *fEvtHddr = (StEvtHddr*)chain->GetDataSet("EvtHddr");
00248 StEvtHddr *fEvtHddrDaq = (StEvtHddr*)chain1->GetDataSet("EvtHddr");
00249 *fEvtHddr = *fEvtHddrDaq;
00250
00251 evnt.Stop("QAInfo:");
00252
00253 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(),
00254 iMake,evnt.GetRealTime("QAInfo:"),evnt.GetCpuTime("QAInfo:"));
00255
00256
00257
00258 if(eventnumber == chain->GetEventNumber()){
00259 printf("bfcMixer: Event number %d found in both .fz file and .daq file\n",eventnumber);
00260 }else{
00261 printf("bfcMixer: Error! Event number from .fz file: %d\n",eventnumber);
00262 printf("bfcMixer: Error! Event number from .daq file: %d\n",chain->GetEventNumber());
00263 printf("bfcMixer: Error! Events are out-of-sync, exiting!\n");
00264 break;
00265 }
00266 i++;
00267 goto EventLoop;
00268 }
00269
00270 fflush(stdout);
00271 printf ("QAInfo:Run completed ");
00272 gSystem->Exec("date");
00273 if (evMk) Event = (StEvent *) chain->GetInputDS("StEvent");
00274 {
00275 TDatime t;
00276 printf ("\nQAInfo:Run is finished at Date/Time%i/%i\n",t.GetDate(),t.GetTime());
00277 }
00278 }
00279