00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 class StChain;
00014 StChain *chain = 0;
00015
00016 int spinSort = false;
00017 bool isZ = false;
00018 int geant = false;
00019
00020 int rdMuWana2011(
00021 int nEve = 1e6,
00022 char* file = "st_W_12037063_raw_1380001_1201.MuDst.root",
00023 int isMC = 0,
00024 int useJetFinder = 0,
00025 int idL2BWtrg = 0,
00026 int idL2EWtrg = 0,
00027
00028 char* muDir = "",
00029 char* jetDir = "",
00030 char* histDir = "",
00031 char* wtreeDir = ""
00032 )
00033 {
00034 char *eemcSetupPath = "/afs/rhic.bnl.gov/star/users/kocolosk/public/StarTrigSimuSetup/";
00035
00036 if (isMC && useJetFinder == 2) geant = true;
00037
00038 if (isMC) spinSort = false;
00039
00040 string inputPathFile(file);
00041
00042 size_t iLastSlash = inputPathFile.find_last_of("/");
00043
00044 string inputPath("");
00045
00046 if (iLastSlash != string::npos)
00047 inputPath = inputPathFile.substr(0, iLastSlash);
00048 else inputPath = "";
00049
00050 string inputFile = inputPathFile.substr(iLastSlash + 1);
00051
00052 printf("Input path: %s\n", inputPath.c_str());
00053 printf("Input file: %s\n", inputFile.c_str());
00054
00055 TString outF = inputFile;
00056 outF = outF.ReplaceAll(".MuDst.root", "");
00057 outF = outF.ReplaceAll(".lis", "");
00058
00059 if (!isMC) {
00060
00061
00062 }
00063 else {
00064
00065 char *file1 = strstr(file, "cn100");
00066 assert(file1);
00067 file1--;
00068 printf("file1: %s\n", file1);
00069 outF = file1;
00070
00071 TString fileG = file;
00072 fileG.ReplaceAll("MuDst", "geant");
00073 }
00074
00075 printf("Output file: %s\n", outF.Data());
00076
00077 printf("TRIG ID: L2BW=%d, L2EW=%d isMC=%d useJetFinder=%d\n", idL2BWtrg, idL2EWtrg, isMC, useJetFinder );
00078
00079 gROOT->LoadMacro("$STAR/StRoot/StMuDSTMaker/COMMON/macros/loadSharedLibraries.C");
00080 loadSharedLibraries();
00081 gROOT->LoadMacro("LoadLogger.C");
00082 gMessMgr->SwitchOff("D");
00083 gMessMgr->SwitchOn("I");
00084
00085 assert( !gSystem->Load("StDaqLib"));
00086
00087
00088 assert( !gSystem->Load("StDetectorDbMaker"));
00089 assert( !gSystem->Load("StTpcDb"));
00090 assert( !gSystem->Load("StDbUtilities"));
00091 assert( !gSystem->Load("StDbBroker"));
00092 assert( !gSystem->Load("St_db_Maker"));
00093 assert( !gSystem->Load("StEEmcUtil"));
00094 assert( !gSystem->Load("StEEmcDbMaker"));
00095 assert( !gSystem->Load("StTriggerFilterMaker"));
00096 assert( !gSystem->Load("StWalgo2011"));
00097 assert( !gSystem->Load("StTriggerUtilities"));
00098 assert( !gSystem->Load("StSpinDbMaker"));
00099
00100 if (useJetFinder == 1 || useJetFinder == 2) {
00101 cout << "BEGIN: loading jetfinder libs" << endl;
00102 gSystem->Load("StEmcRawMaker");
00103 gSystem->Load("StEmcADCtoEMaker");
00104 gSystem->Load("StJetSkimEvent");
00105 gSystem->Load("StJets");
00106 gSystem->Load("StSpinDbMaker");
00107 gSystem->Load("StEmcTriggerMaker");
00108 gSystem->Load("StTriggerUtilities");
00109 gSystem->Load("StMCAsymMaker");
00110 gSystem->Load("StRandomSelector");
00111 gSystem->Load("StJetEvent");
00112 gSystem->Load("StJetFinder");
00113 gSystem->Load("StJetMaker");
00114 cout << "END: loading jetfinder libs" << endl;
00115 }
00116 else {
00117 cout << "\nWARN: Jet are NOT read in, W-algo will not wrk properly\n " << endl;
00118 }
00119
00120 if (geant) {
00121
00122 assert( !gSystem->Load("StMcEvent"));
00123 assert( !gSystem->Load("StMcEventMaker"));
00124
00125
00126 assert( !gSystem->Load("StEmcSimulatorMaker"));
00127 assert( !gSystem->Load("StEEmcSimulatorMaker"));
00128 assert( !gSystem->Load("StEpcMaker"));
00129 }
00130
00131 cout << " loading done " << endl;
00132
00133
00134 chain = new StChain("StChain");
00135
00136
00137 TObjArray* HList = new TObjArray;
00138
00139 if (geant) {
00140
00141 StIOMaker* ioMaker = new StIOMaker();
00142 printf("\n %s \n\n", fileG.Data());
00143 ioMaker->SetFile(fileG.Data());
00144
00145 ioMaker->SetIOMode("r");
00146 ioMaker->SetBranch("*", 0, "1");
00147 ioMaker->SetBranch("geantBranch", 0, "r");
00148 ioMaker->SetBranch("minimcBranch", 0, "r");
00149 }
00150
00151
00152 int maxFiles = 1000;
00153
00154 StMuDstMaker *stMuDstMaker = new StMuDstMaker(0, 0, muDir, file, "MuDst.root", maxFiles);
00155
00156 stMuDstMaker->SetStatus("*", 0);
00157 stMuDstMaker->SetStatus("MuEvent", 1);
00158 stMuDstMaker->SetStatus("EmcTow", 1);
00159 stMuDstMaker->SetStatus("EmcSmde", 1);
00160 stMuDstMaker->SetStatus("EmcSmdp", 1);
00161 stMuDstMaker->SetStatus("PrimaryVertices", 1);
00162 stMuDstMaker->SetStatus("GlobalTracks", 1);
00163 stMuDstMaker->SetStatus("PrimaryTracks", 1);
00164
00165 TChain* stMuDstMakerChain = stMuDstMaker->chain();
00166
00167 assert(stMuDstMakerChain);
00168
00169 int nEntries = (int) stMuDstMakerChain->GetEntries();
00170
00171 if (nEntries < 0) {
00172 Error("rdMuWana2011", "Invalid number of events %d", nEntries)
00173 return -1;
00174 }
00175
00176 printf("Total number of events in muDst chain = %d\n", nEntries);
00177
00178
00179 St_db_Maker *dbMk = new St_db_Maker("StarDb", "MySQL:StarDb", "MySQL:StarDb", "$STAR/StarDb");
00180
00181 if (isMC == 0) {
00182
00183 dbMk->SetFlavor("Wbose2", "bsmdeCalib");
00184 dbMk->SetFlavor("Wbose2", "bsmdpCalib");
00185 dbMk->SetFlavor("sim", "bemcCalib");
00186 dbMk->SetFlavor("sim", "eemcPMTcal");
00187 }
00188 else {
00189 printf("???? unforeseen MC flag, ABORT\n");
00190 assert(1 == 2);
00191 }
00192
00193
00194
00195 StEEmcDbMaker* mEEmcDatabase = new StEEmcDbMaker("eemcDb");
00196
00197 #if 0 // drop abs lumi for now
00198 if (!isMC && strstr(file, "fillListPhys")) {
00199 StTriggerFilterMaker *filterMaker = new StTriggerFilterMaker;
00200 filterMaker->addTrigger(230420);
00201 filterMaker->addTrigger(230411);
00202 filterMaker->addTrigger(bht3ID);
00203 }
00204 #endif
00205
00206 if (geant) {
00207 StMcEventMaker *mcEventMaker = new StMcEventMaker();
00208 mcEventMaker->doPrintEventInfo = false;
00209 mcEventMaker->doPrintMemoryInfo = false;
00210 }
00211
00212 if (geant && useJetFinder != 1) {
00213
00214 StEmcSimulatorMaker* emcSim = new StEmcSimulatorMaker();
00215 emcSim->setCalibSpread(kBarrelEmcTowerId, 0.15);
00216 StEmcADCtoEMaker *bemcAdc = new StEmcADCtoEMaker();
00217
00218
00219 new StEEmcDbMaker("eemcDb");
00220 StEEmcSlowMaker *slowSim = new StEEmcSlowMaker("slowSim");
00221
00222 slowSim->setAddPed(true);
00223 slowSim->setSmearPed(true);
00224
00225
00226 StTriggerSimuMaker *simuTrig = new StTriggerSimuMaker("StarTrigSimu");
00227 simuTrig->setHList(HList);
00228 simuTrig->setMC(isMC);
00229 simuTrig->useBbc();
00230 simuTrig->useEemc(0);
00231 simuTrig->eemc->setSetupPath(eemcSetupPath);
00232 simuTrig->useBemc();
00233 simuTrig->bemc->setConfig(2);
00234 }
00235
00236 TString jetFile = jetDir;
00237
00238
00239 if (useJetFinder > 0) {
00240
00241
00242 jetFile += "jets_";
00243 jetFile += outF + ".root";
00244 cout << "BEGIN: running jet finder/reader =" << jetFile << "=" << endl;
00245 }
00246
00247
00248 if (useJetFinder == 1)
00249 {
00250 double pi = atan(1.0) * 4.0;
00251
00252 StSpinDbMaker *uspDbMaker = new StSpinDbMaker("spinDb");
00253 StEmcADCtoEMaker *adc = new StEmcADCtoEMaker();
00254
00255
00256 bool doTowerSwapFix = true;
00257 bool use2003TowerCuts = false;
00258 bool use2006TowerCuts = true;
00259
00260
00261 StBET4pMaker* bet4pMakerFrac100 = new StBET4pMaker("BET4pMakerFrac100", stMuDstMaker, doTowerSwapFix, new StjTowerEnergyCorrectionForTracksFraction(1.0));
00262 bet4pMakerFrac100->setUse2003Cuts(use2003TowerCuts);
00263 bet4pMakerFrac100->setUseEndcap(true);
00264 bet4pMakerFrac100->setUse2006Cuts(use2006TowerCuts);
00265
00266
00267 StBET4pMaker* bet4pMakerFrac100_noEEMC = new StBET4pMaker("BET4pMakerFrac100_noEEMC", stMuDstMaker, doTowerSwapFix, new StjTowerEnergyCorrectionForTracksFraction(1.0));
00268 bet4pMakerFrac100_noEEMC->setUse2003Cuts(use2003TowerCuts);
00269 bet4pMakerFrac100_noEEMC->setUseEndcap(false);
00270 bet4pMakerFrac100_noEEMC->setUse2006Cuts(use2006TowerCuts);
00271
00272
00273 StJetMaker* emcJetMaker = new StJetMaker("emcJetMaker", stMuDstMaker, jetFile);
00274
00275
00276
00277 StppAnaPars* anapars = new StppAnaPars();
00278 anapars->setFlagMin(0);
00279 anapars->setNhits(12);
00280 anapars->setCutPtMin(0.2);
00281 anapars->setAbsEtaMax(2.0);
00282 anapars->setJetPtMin(3.5);
00283 anapars->setJetEtaMax(100.0);
00284 anapars->setJetEtaMin(0);
00285 anapars->setJetNmin(0);
00286
00287
00288 StConePars* cpars = new StConePars();
00289 cpars->setGridSpacing(105, -3.0, 3.0, 120, -pi, pi);
00290 cpars->setConeRadius(0.7);
00291 cpars->setSeedEtMin(0.5);
00292 cpars->setAssocEtMin(0.1);
00293 cpars->setSplitFraction(0.5);
00294 cpars->setPerformMinimization(true);
00295 cpars->setAddMidpoints(true);
00296 cpars->setRequireStableMidpoints(true);
00297 cpars->setDoSplitMerge(true);
00298
00299 cpars->setDebug(false);
00300
00301 emcJetMaker->addAnalyzer(anapars, cpars, bet4pMakerFrac100, "ConeJets12_100");
00302 emcJetMaker->addAnalyzer(anapars, cpars, bet4pMakerFrac100_noEEMC, "ConeJets12_100_noEEMC");
00303
00304 chain->Init();
00305 chain->ls(3);
00306
00307 char txt[1000];
00308
00309 int eventCounter = 0;
00310 int t1 = time(0);
00311 TStopwatch tt;
00312
00313 for (Int_t iev = 0; iev < nEntries; iev++) {
00314 if (eventCounter >= nEve) break;
00315 chain->Clear();
00316 int stat = chain->Make();
00317 if (stat != kStOk && stat != kStSkip) break;
00318 eventCounter++;
00319 }
00320
00321 cout << "run " << file << " nEve=" << eventCounter << " total ";
00322 tt.Print();
00323 printf("****************************************** \n");
00324
00325 int t2 = time(0);
00326 if (t2 == t1) t2 = t1 + 1;
00327 float tMnt = (t2 - t1) / 60.;
00328 float rate = 1.*eventCounter / (t2 - t1);
00329
00330 printf("jets sorting done %d of nEve= %d, CPU rate= %.1f Hz, total time %.1f minute(s) \n\n", eventCounter, nEntries, rate, tMnt);
00331
00332 cout << "END: jet finder " << endl;
00333
00334 return 1;
00335 }
00336
00337 if (useJetFinder == 2) {
00338 cout << "Configure to read jet trees " << endl;
00339 StJetReader *jetReader = new StJetReader;
00340 jetReader->InitFile(jetFile);
00341 }
00342
00343
00344 St2011WMaker *WmuMk = new St2011WMaker();
00345
00346 if (isMC) {
00347 WmuMk->setMC(isMC);
00348
00349
00350 }
00351 else {
00352 WmuMk->setTrigID(idL2BWtrg, idL2EWtrg);
00353 }
00354
00355 TString treeFileName = wtreeDir;
00356 treeFileName += outF;
00357 treeFileName += ".Wtree.root";
00358
00359 WmuMk->setTreeName(treeFileName);
00360
00361 if (useJetFinder == 2)
00362 WmuMk->setJetTreeBranch("ConeJets12_100", "ConeJets12_100_noEEMC");
00363
00364 WmuMk->setMaxDisplayEve(100);
00365
00366
00367
00368
00369
00370
00371
00372 St2011pubWanaMaker *WpubMk = new St2011pubWanaMaker("pubJan");
00373 WpubMk->attachWalgoMaker(WmuMk);
00374
00375
00376
00377 WmuMk->setHList(HList);
00378 WpubMk->setHList(HList);
00379
00380 StSpinDbMaker *spDb = 0;
00381 if (spinSort) {
00382 spDb = new StSpinDbMaker("spinDb");
00383 enum {mxSM = 5};
00384 St2011pubSpinMaker *spinMkA[mxSM];
00385
00386 for (int kk = 0; kk < mxSM; kk++) {
00387 char ttx[100];
00388 sprintf(ttx, "%cspin", 'A' + kk);
00389 printf("add spinMaker %s %d \n", ttx, kk);
00390 spinMkA[kk] = new St2011pubSpinMaker(ttx);
00391 spinMkA[kk]->attachWalgoMaker(WmuMk);
00392 spinMkA[kk]->attachSpinDb(spDb);
00393 spinMkA[kk]->setHList(HList);
00394 if (kk == 1) spinMkA[kk]->setEta(-1., 0.);
00395 if (kk == 2) spinMkA[kk]->setEta(0, 1.);
00396 if (kk == 3) spinMkA[kk]->setQPT(-1);
00397 if (kk == 4) spinMkA[kk]->setNoEEMC();
00398 }
00399 }
00400
00401 if (geant) {
00402 pubMcMk = new St2009pubMcMaker("pubMc");
00403 pubMcMk->attachWalgoMaker(WmuMk);
00404 pubMcMk->setHList(HList);
00405 }
00406
00407 if (isZ) {
00408 ZMk = new St2011ZMaker("Z");
00409 ZMk->attachWalgoMaker(WmuMk);
00410 ZMk->setHList(HList);
00411 ZMk->setNearEtFrac(0.88);
00412 ZMk->setClusterMinEt(15);
00413 ZMk->setPhi12Min(3.1416 / 2.);
00414 ZMk->setMinZMass(73.);
00415 ZMk->setMaxZMass(114.);
00416 }
00417
00418 chain->Init();
00419 chain->ls(3);
00420
00421 char txt[1000];
00422 int eventCounter = 0;
00423 int t1 = time(0);
00424
00425 TStopwatch tt;
00426
00427 for (Int_t iev = 0; iev < nEntries; iev++) {
00428 Info("rdMuWana2011", "Analyzing event %d", iev);
00429 if (eventCounter >= nEve) break;
00430 chain->Clear();
00431 int stat = chain->Make();
00432 if (stat != kStOk && stat != kStSkip) break;
00433 eventCounter++;
00434 }
00435
00436
00437
00438 cout << "run " << file << " nEve=" << eventCounter << " total ";
00439 tt.Print();
00440
00441 printf("****************************************** \n");
00442
00443 int t2 = time(0);
00444 if (t2 == t1) t2 = t1 + 1;
00445 float tMnt = (t2 - t1) / 60.;
00446 float rate = 1.*eventCounter / (t2 - t1);
00447
00448 printf("#sorting %s done %d of nEve= %d, CPU rate= %.1f Hz, total time %.1f minute(s) \n\n", file, eventCounter, nEntries, rate, tMnt);
00449
00450
00451 TString histFileName = histDir;
00452 histFileName += outF;
00453 histFileName += ".wana.hist.root";
00454
00455 cout << "Output histo file " << histFileName << endl;
00456
00457 hf = new TFile(histFileName, "recreate");
00458
00459 if (hf->IsOpen()) {
00460
00461 HList->Write();
00462 printf("\n Histo saved -->%s<\n", outFh.Data());
00463 }
00464 else {
00465 printf("\n Failed to open Histo-file -->%s<, continue\n", outFh.Data());
00466 }
00467
00468
00469
00470 return 2;
00471 }
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483