00001
00002
00003
00004
00005
00006
00007
00008 #include <iostream>
00009
00010 class StChain;
00011 StChain *chain=0;
00012 int useEtow=3;
00013
00014 int spinSort=false;
00015 int isJustin=false;
00016 bool isZ=true;
00017 int geant=false;
00018
00019 int rdMuWana(
00020 int nEve=1e6,
00021 char* inDir = "",
00022 char* file = "fillListE/sl11b/Wplus0.lis",
00023 int nFiles = 1e5,
00024 int isMC=350,
00025 int useJetFinder = 0
00026 ) {
00027 char *eemcSetupPath="/afs/rhic.bnl.gov/star/users/kocolosk/public/StarTrigSimuSetup/";
00028
00029 TString jetTreeDir="/star/u/stevens4/wAnalysis/efficXsec/outEmb/jets/";
00030 if(isMC==0) jetTreeDir="/star/data01/pwg/stevens4/wAnalysis/xSecPaper/sl11b/jets/";
00031
00032 if(isMC >= 350 && useJetFinder==2) geant=true;
00033
00034 if(isMC) spinSort=false;
00035 TString outF=file;
00036 int runNo=0,bht3ID=0,l2wID=0,fillNo=0;
00037 if(isMC==0) {
00038 printf("Unpack file=%s=\n",file);
00039 char *file1=strstr(file,"/R")+1;
00040 printf("file1=%s=%s=\n",file1);
00041 fillNo=atoi(file1-6);
00042 outF=file1; file1=outF.Data();
00043 char *p1=strstr(file1,"_");
00044 char *p2=strstr(p1+1,"_");
00045 runNo=atoi(file1+1);
00046 bht3ID=atoi(p1+1);
00047 l2wID=atoi(p2+1);
00048 p1[0]=0;
00049 outF=file1;
00050 outF=outF;
00051 printf("OutF=%s=\n",outF.Data());
00052 }
00053 else if(isMC < 400) {
00054 char *file1; char *file2;
00055 if(isMC==350) { file2=strstr(file,"/W"); file1=strstr(file2,"W"); }
00056 if(isMC==351) { file2=strstr(file,"/Wtau"); file1=strstr(file2,"Wtau"); }
00057 if(isMC==352) { file2=strstr(file,"/Z"); file1=strstr(file2,"Z"); }
00058 assert(file1); printf("file1=%s=\n",file1);
00059 outF=file1; outF.ReplaceAll(".lis","");
00060 TString nameReweight=file1; nameReweight.ReplaceAll(".lis","");
00061 for(int j=0; j<10; j++) nameReweight.ReplaceAll(Form("%d",j),"");
00062 cout<<"nameReweight="<<nameReweight<<endl;
00063 }
00064 else {
00065 cout<<"bad isMC flag"<<endl; return;
00066 }
00067 printf("TRIG ID: bht3=%d l2w=%d isMC=%d\n",bht3ID,l2wID,isMC);
00068
00069 gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
00070 loadSharedLibraries();
00071 gROOT->LoadMacro("LoadLogger.C");
00072 gMessMgr -> SwitchOff("D");
00073 gMessMgr -> SwitchOn("I");
00074
00075 assert( !gSystem->Load("StDaqLib"));
00076
00077
00078 assert( !gSystem->Load("StDetectorDbMaker"));
00079 assert( !gSystem->Load("StTpcDb"));
00080 assert( !gSystem->Load("StDbUtilities"));
00081 assert( !gSystem->Load("StDbBroker"));
00082 assert( !gSystem->Load("St_db_Maker"));
00083 assert( !gSystem->Load("StEEmcUtil"));
00084 assert( !gSystem->Load("StEEmcDbMaker"));
00085 assert( !gSystem->Load("StTriggerFilterMaker"));
00086 assert( !gSystem->Load("StWalgoB2009"));
00087
00088 gSystem->Load("StEmcRawMaker");
00089 gSystem->Load("StEmcADCtoEMaker");
00090 assert( !gSystem->Load("StTriggerUtilities"));
00091
00092 if(spinSort) assert( !gSystem->Load("StSpinDbMaker"));
00093
00094 if (useJetFinder ==1 || useJetFinder == 2){
00095 cout << "BEGIN: loading jetfinder libs" << endl;
00096 gSystem->Load("StEmcRawMaker");
00097 gSystem->Load("StEmcADCtoEMaker");
00098 gSystem->Load("StJetSkimEvent");
00099 gSystem->Load("StJets");
00100 gSystem->Load("StSpinDbMaker");
00101 gSystem->Load("StEmcTriggerMaker");
00102 gSystem->Load("StTriggerUtilities");
00103 gSystem->Load("StMCAsymMaker");
00104 gSystem->Load("StRandomSelector");
00105 gSystem->Load("StJetEvent");
00106 gSystem->Load("StJetFinder");
00107 gSystem->Load("StJetMaker");
00108 cout << "END: loading jetfinder libs" << endl;
00109 }
00110 else {
00111 cout << "\nWARN: Jet are NOT read in, W-algo will not wrk properly\n " << endl;
00112 }
00113
00114 if(geant){
00115
00116 assert( !gSystem->Load("StMcEvent"));
00117 assert( !gSystem->Load("StMcEventMaker"));
00118
00119
00120 assert( !gSystem->Load("StEmcSimulatorMaker"));
00121 assert( !gSystem->Load("StEEmcSimulatorMaker"));
00122 assert( !gSystem->Load("StEpcMaker"));
00123 }
00124
00125 cout << " loading done " << endl;
00126
00127
00128 chain = new StChain("StChain");
00129
00130 TObjArray* HList=new TObjArray;
00131
00132 if(geant){
00133
00134 ifstream infile(file); string line;
00135 StFile *setFiles= new StFile(); int j=0;
00136 while(infile.good()){
00137 getline (infile,line);
00138 TString name = line;
00139 name.ReplaceAll(".MuDst.root",".geant.root");
00140 if(line=="") break;
00141 setFiles->AddFile(name.Data());
00142 j++;
00143 if(j%10==0) cout<<"Added "<<j<<" files:"<<name.Data()<<endl;
00144 if(j==nFiles) break;
00145 }
00146
00147
00148 StIOMaker* ioMaker = new StIOMaker("IO","r",setFiles,"bfcTree");
00149
00150 ioMaker->SetIOMode("r");
00151 ioMaker->SetBranch("*",0,"0");
00152 ioMaker->SetBranch("geantBranch",0,"r");
00153 }
00154
00155
00156 muMk = new StMuDstMaker(0,0,inDir,file,"MuDst.root",nFiles);
00157 muMk->SetStatus("*",0);
00158 muMk->SetStatus("MuEvent",1);
00159 muMk->SetStatus("EmcTow",1);
00160 muMk->SetStatus("EmcSmde",1);
00161 muMk->SetStatus("EmcSmdp",1);
00162 muMk->SetStatus("PrimaryVertices",1);
00163 muMk->SetStatus("GlobalTracks",1);
00164 muMk->SetStatus("PrimaryTracks",1);
00165
00166
00167
00168 St_db_Maker *dbMk = new St_db_Maker("StarDb","MySQL:StarDb","MySQL:StarDb","$STAR/StarDb");
00169
00170 if (isMC==0) {
00171 dbMk->SetFlavor("Wbose","bsmdeCalib");
00172 dbMk->SetFlavor("Wbose","bsmdpCalib");
00173
00174
00175 }
00176 else if(isMC>=350) {
00177 dbMk->SetMaxEntryTime(20101215,0);
00178 dbMk->SetFlavor("Wbose2","bsmdpCalib");
00179 dbMk->SetFlavor("Wbose2","bsmdeCalib");
00180 }
00181 else {
00182 printf("???? unforeseen MC flag, ABORT\n"); assert(1==2);
00183 }
00184
00185
00186 StEEmcDbMaker* mEEmcDatabase = new StEEmcDbMaker("eemcDb");
00187
00188 if(geant){
00189 StMcEventMaker *mcEventMaker = new StMcEventMaker();
00190 mcEventMaker->doPrintEventInfo = false;
00191 mcEventMaker->doPrintMemoryInfo = false;
00192 }
00193
00194 if(useJetFinder!=1 && isMC){
00195
00196 StEmcADCtoEMaker *bemcAdc = new StEmcADCtoEMaker();
00197
00198
00199 StTriggerSimuMaker *simuTrig = new StTriggerSimuMaker("StarTrigSimu");
00200 simuTrig->setHList(HList);
00201 simuTrig->setMC(2);
00202 simuTrig->useBbc();
00203 simuTrig->useEemc(0);
00204 simuTrig->eemc->setSetupPath(eemcSetupPath);
00205 simuTrig->useBemc();
00206 simuTrig->bemc->setConfig(2);
00207 }
00208
00209
00210 if (useJetFinder > 0) {
00211 TString outFile = "jets_"+outF+".root";
00212 cout << "BEGIN: running jet finder/reader =" <<outFile<<"="<< endl;
00213 }
00214
00215 if (useJetFinder == 1){
00216 double pi = atan(1.0)*4.0;
00217
00218 StEmcADCtoEMaker *adc = new StEmcADCtoEMaker();
00219
00220
00221 bool doTowerSwapFix = true;
00222 bool use2003TowerCuts = false;
00223 bool use2006TowerCuts = true;
00224
00225 StBET4pMaker* bet4pMakerFrac100 = new StBET4pMaker("BET4pMakerFrac100",muMk,doTowerSwapFix,new StjTowerEnergyCorrectionForTracksFraction(1.0));
00226 bet4pMakerFrac100->setUse2003Cuts(use2003TowerCuts);
00227 bet4pMakerFrac100->setUseEndcap(true);
00228 bet4pMakerFrac100->setUse2006Cuts(use2006TowerCuts);
00229
00230 StBET4pMaker* bet4pMakerFrac100_noEEMC = new StBET4pMaker("BET4pMakerFrac100_noEEMC",muMk,doTowerSwapFix,new StjTowerEnergyCorrectionForTracksFraction(1.0));
00231 bet4pMakerFrac100_noEEMC->setUse2003Cuts(use2003TowerCuts);
00232 bet4pMakerFrac100_noEEMC->setUseEndcap(false);
00233 bet4pMakerFrac100_noEEMC->setUse2006Cuts(use2006TowerCuts);
00234
00235
00236 StJetMaker* emcJetMaker = new StJetMaker("emcJetMaker", muMk, outFile);
00237
00238
00239 StppAnaPars* anapars = new StppAnaPars();
00240 anapars->setFlagMin(0);
00241 anapars->setNhits(12);
00242 anapars->setCutPtMin(0.2);
00243 anapars->setAbsEtaMax(2.0);
00244 anapars->setJetPtMin(3.5);
00245 anapars->setJetEtaMax(100.0);
00246 anapars->setJetEtaMin(0);
00247 anapars->setJetNmin(0);
00248
00249
00250 StConePars* cpars = new StConePars();
00251 cpars->setGridSpacing(105, -3.0, 3.0, 120, -pi, pi);
00252 cpars->setConeRadius(0.7);
00253 cpars->setSeedEtMin(0.5);
00254 cpars->setAssocEtMin(0.1);
00255 cpars->setSplitFraction(0.5);
00256 cpars->setPerformMinimization(true);
00257 cpars->setAddMidpoints(true);
00258 cpars->setRequireStableMidpoints(true);
00259 cpars->setDoSplitMerge(true);
00260
00261 cpars->setDebug(false);
00262
00263 emcJetMaker->addAnalyzer(anapars, cpars, bet4pMakerFrac100, "ConeJets12_100");
00264 emcJetMaker->addAnalyzer(anapars, cpars, bet4pMakerFrac100_noEEMC, "ConeJets12_100_noEEMC");
00265
00266
00267 TChain* tree=muMk->chain(); assert(tree);
00268 int nEntries=(int) tree->GetEntries();
00269 printf("total eve in muDst chain =%d for run=%d\n",nEntries,runNo);
00270 if(nEntries<0) return;
00271
00272 chain->Init();
00273 chain->ls(3);
00274
00275 char txt[1000];
00276
00277 int eventCounter=0;
00278 int t1=time(0);
00279 TStopwatch tt;
00280 for (Int_t iev=0;iev<nEntries; iev++) {
00281 if(eventCounter>=nEve) break;
00282 chain->Clear();
00283 int stat = chain->Make();
00284
00285 if(stat != kStOk && stat != kStSkip) break;
00286 eventCounter++;
00287 }
00288 cout<<"run R"<<runNo<<" nEve="<<eventCounter<<" total "; tt.Print();
00289 printf("****************************************** \n");
00290
00291 int t2=time(0);
00292 if(t2==t1) t2=t1+1;
00293 float tMnt=(t2-t1)/60.;
00294 float rate=1.*eventCounter/(t2-t1);
00295 printf("#sorting R%d done %d of nEve= %d, CPU rate= %.1f Hz, total time %.1f minute(s) \n\n",runNo,eventCounter,nEntries,rate,tMnt);
00296
00297 cout << "END: jet finder " << endl;
00298 return;
00299 }
00300 if (useJetFinder == 2)
00301 {
00302 cout << "Configure to read jet trees " << endl;
00303 StJetReader *jetReader = new StJetReader;
00304 jetReader->InitFile(jetTreeDir+outFile);
00305 }
00306
00307
00308
00309 St2009WMaker *WmuMk=new St2009WMaker();
00310 if(isMC) {
00311 WmuMk->setMC(isMC);
00312 WmuMk->setNameReweight(nameReweight.Data());
00313
00314
00315
00316
00317
00318 }else {
00319 WmuMk->setTrigID(bht3ID,l2wID,runNo);
00320 }
00321
00322 if (useJetFinder == 2) WmuMk->setJetTreeBranch("ConeJets12_100","ConeJets12_100_noEEMC");
00323
00324 WmuMk->setMaxDisplayEve(10);
00325 WmuMk->useEtow(useEtow);
00326
00327
00328 if(isMC==0) WmuMk->setBtowScale(0.976);
00329 else WmuMk->setBtowScale(1.02);
00330
00331
00332
00333
00334
00335 WpubMk=new St2009pubWanaMaker("pubJan");
00336 WpubMk->attachWalgoMaker(WmuMk);
00337
00338
00339 WmuMk->setHList(HList);
00340 WpubMk->setHList(HList);
00341
00342
00343 if(isMC==0) {
00344 WlumiMk=new St2009WlumiMaker("lumi");
00345 WlumiMk->attachWalgoMaker(WmuMk);
00346 WlumiMk->attachMuMaker(muMk);
00347 WlumiMk->setHList(HList);
00348 }
00349
00350 StSpinDbMaker *spDb=0;
00351 if(spinSort){
00352 spDb=new StSpinDbMaker("spinDb");
00353 enum {mxSM=5};
00354 St2009pubSpinMaker *spinMkA[mxSM];
00355 for(int kk=0;kk<mxSM;kk++) {
00356 char ttx[100]; sprintf(ttx,"%cspin",'A'+kk);
00357 printf("add spinMaker %s %d \n",ttx,kk);
00358 spinMkA[kk]=new St2009pubSpinMaker(ttx);
00359 spinMkA[kk]->attachWalgoMaker(WmuMk);
00360 spinMkA[kk]->attachSpinDb(spDb);
00361 spinMkA[kk]->setHList(HList);
00362 if(kk==1) spinMkA[kk]->setEta(-1.,0.);
00363 if(kk==2) spinMkA[kk]->setEta(0,1.);
00364 if(kk==3) spinMkA[kk]->setQPT(-1);
00365 if(kk==4) spinMkA[kk]->setNoEEMC();
00366 }
00367 }
00368
00369 if(isZ){
00370 ZMk=new St2009ZMaker("Z");
00371 ZMk->attachWalgoMaker(WmuMk);
00372 ZMk->setHList(HList);
00373 ZMk->setClusterFrac24(0.95);
00374 ZMk->setDeltaR(7.0);
00375 ZMk->setNearEtFrac(0.88);
00376 ZMk->setClusterMinEt(15);
00377 ZMk->setPhi12Min(3.1416/2.);
00378 ZMk->setMinZMass(73.);
00379 ZMk->setMaxZMass(114.);
00380 }
00381
00382 if(geant){
00383 pubMcMk=new St2009pubMcMaker("pubMc");
00384 pubMcMk->attachWalgoMaker(WmuMk);
00385 pubMcMk->attachZalgoMaker(ZMk);
00386 pubMcMk->setHList(HList);
00387 }
00388
00389 TChain* tree=muMk->chain(); assert(tree);
00390 int nEntries=(int) tree->GetEntries();
00391 printf("total eve in muDst chain =%d\n",nEntries);
00392 if(nEntries<0) return;
00393
00394 chain->Init();
00395
00396
00397 char txt[1000];
00398
00399 int eventCounter=0;
00400 int t1=time(0);
00401 TStopwatch tt;
00402 for (Int_t iev=0;iev<nEntries; iev++) {
00403 if(eventCounter>=nEve) break;
00404 chain->Clear();
00405 int stat = chain->Make();
00406
00407 if(stat != kStOk && stat != kStSkip) break;
00408 eventCounter++;
00409 }
00410
00411 if(isMC==0)
00412 WlumiMk->FinishRun(runNo);
00413
00414 cout<<"run R"<<runNo<<" nEve="<<eventCounter<<" total "; tt.Print();
00415 printf("****************************************** \n");
00416
00417 int t2=time(0);
00418 if(t2==t1) t2=t1+1;
00419 float tMnt=(t2-t1)/60.;
00420 float rate=1.*eventCounter/(t2-t1);
00421 printf("#sorting R%d done %d of nEve= %d, CPU rate= %.1f Hz, total time %.1f minute(s) \n\n",runNo,eventCounter,nEntries,rate,tMnt);
00422
00423 TString outFh=outF+".wana.hist.root";
00424
00425 cout<<"Output histo file "<<outFh<<endl;
00426 hf=new TFile(outFh,"recreate");
00427 if(hf->IsOpen()) {
00428
00429 HList->Write();
00430 printf("\n Histo saved -->%s<\n",outFh.Data());
00431 }
00432 else {
00433 printf("\n Failed to open Histo-file -->%s<, continue\n",outFh.Data());
00434 }
00435
00436 return;
00437 }
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567