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