void PrintTimer(StMaker *chain) { TIter next(chain->GetMakeList()); StMaker *maker; while (maker = (StMaker *)next()) { maker->PrintTimer(); PrintTimer(maker); // Hack to reset timer maker->StartTimer(true); maker->StopTimer(); } }
/************************************************************************* * This function prints timing information about KMETIS **************************************************************************/ void PrintTimingInfo(CtrlType *ctrl) { /* PrintTimer(ctrl, ctrl->CoarsenTmr, " Coarsening"); */ PrintTimer(ctrl, ctrl->SetupTmr, " Setup"); PrintTimer(ctrl, ctrl->MatchTmr, " Matching"); PrintTimer(ctrl, ctrl->ContractTmr, "Contraction"); PrintTimer(ctrl, ctrl->InitPartTmr, " InitPart"); /* PrintTimer(ctrl, ctrl->RefTmr, " Refinement"); */ PrintTimer(ctrl, ctrl->ProjectTmr, " Project"); PrintTimer(ctrl, ctrl->KWayInitTmr, " Initialize"); PrintTimer(ctrl, ctrl->KWayTmr, " K-way"); PrintTimer(ctrl, ctrl->MoveTmr, " Move"); PrintTimer(ctrl, ctrl->RemapTmr, " Remap"); PrintTimer(ctrl, ctrl->TotalTmr, " Total"); PrintTimer(ctrl, ctrl->AuxTmr1, " Aux1"); PrintTimer(ctrl, ctrl->AuxTmr2, " Aux2"); PrintTimer(ctrl, ctrl->AuxTmr3, " Aux3"); PrintTimer(ctrl, ctrl->AuxTmr4, " Aux4"); PrintTimer(ctrl, ctrl->AuxTmr5, " Aux5"); PrintTimer(ctrl, ctrl->AuxTmr6, " Aux6"); }
/** * This is an alternative to bfcMixer_pythia() allowing the user to explicitly * specify BFC options for all three chains. * * Sample input values: * * daqFileList = "@run10148002.list" * fzdFile = "/path/to/my_pythia.fzd" * flag = "W" * */ void EmbeddingReco(const int nEvents, const std::string daqFileList, const std::string fzdFile, const std::string bfcOptionsChain1, const std::string bfcOptionsChain2, const std::string bfcOptionsChain3, const std::string flag) { // Dynamically link some shared libs gROOT->LoadMacro("bfc.C"); if (gClassTable->GetID("StBFChain") < 0) Load(); //______________Create the main chain object______________________________________ Chain = new StChain("Embedding"); //________________________________________________________________________________ bfc(-1, bfcOptionsChain1.c_str(), daqFileList.c_str()); chain1 = chain; chain1->SetName("One"); chain1->SetAttr(".call", "SetActive(0)", "St_db_Maker::"); // Use DB cache to reduce overhead Chain->cd(); //________________________________________________________________________________ bfc(-1, bfcOptionsChain2.c_str(), fzdFile.c_str()); chain2 = chain; chain2->SetName("Two"); Chain->cd(); if (chain2->GetOption("TRS")) { StTrsMaker *trsMk = (StTrsMaker *) chain2->GetMaker("Trs"); if (!trsMk) { cout << "Cannot find Trs in chain2" << endl; return; } trsMk->setNormalFactor(1.32); trsMk->SetMode(0); } //________________________________________________________________________________ // gSystem->Load("StFtpcMixerMaker"); // StFtpcMixerMaker *ftpcmixer = new StFtpcMixerMaker("FtpcMixer","daq","trs"); //________________________________________________________________________________ TString OutputFileName(gSystem->BaseName(fzdFile.c_str())); OutputFileName.ReplaceAll("*", ""); OutputFileName.ReplaceAll(".fzd", ""); // OutputFileName.Append("_emb.root"); OutputFileName.Append(".root"); bfc(-1, bfcOptionsChain3.c_str(), 0, OutputFileName); chain3 = chain; chain3->SetName("Three"); Chain->cd(); //________________________________________________________________________________ StTpcMixerMaker *mixer = (StTpcMixerMaker *) chain3->Maker("TpcMixer"); mixer->SetInput("Input1", "TpxRaw/.data/Event"); if (bfcOptionsChain2.find("TpcRS") != std::string::npos) { mixer->SetInput("Input2", "TpcRS/Event"); } else { mixer->SetInput("Input2", "Trs/.const/Event"); } Chain->cd(); if (flag == "W") { // blacklist some detectors to save DB load St_db_Maker *dbMk = (St_db_Maker *)chain3->GetMaker("db"); dbMk->SetAttr("blacklist", "svt"); dbMk->SetAttr("blacklist", "ssd"); // dbMk->SetAttr("blacklist", "ftpc"); // S.F. } //------------------------------------ EMC MIXERS ------------------------------------ // Add BEMC mixer to chain3 StEmcRawMaker *emcRaw = (StEmcRawMaker *)chain3->GetMaker("emcRaw"); emcRaw->getBemcRaw()->saveAllStEvent(true); // use all 4800 BEMC towers gSystem->Load("StEmcMixerMaker"); StEmcMixerMaker *bemcMixer = new StEmcMixerMaker; chain3->AddAfter("EmcSimulator", bemcMixer); // Set EEMC fast and slow simulator in embedding mode StEEmcFastMaker *eefs = (StEEmcFastMaker *)chain3->GetMaker("eefs"); eefs->SetEmbeddingMode(); // Use local StEmcCollection eefs->UseFullTower(true); // Use full ETOW detector StEEmcSlowMaker *eess = new StEEmcSlowMaker; eess->setEmbeddingMode(true); // Add EEMC mixer to chain3 StEEmcMixerMaker *eemcMixer = new StEEmcMixerMaker; //------------------------------------------------------------------------------------ //----------------------------- TRIGGER FILTER ----------------------------- // We want to achieve the following ordering for makers: // 1. BBC simulator // 2. BEMC simulator // 3. BEMC mixer // 4. EEMC fast simulator // 5. EEMC slow simulator // 6. EEMC mixer // 7. Pythia event maker // 8. Trigger simulator // 9. Trigger filter // 10. TPC maker // Place TPC chain after EMC makers chain3->AddAfter("eefs", chain3->GetMaker("tpcChain")); chain3->AddAfter("eefs", eemcMixer); chain3->AddAfter("eefs", eess); if (flag == "Jet") { // Place Pythia maker after GEANT maker // and trigger filter after EMC makers gSystem->Load("StJetSkimEvent"); gSystem->Load("StMCAsymMaker"); gSystem->Load("StBfcTriggerFilterMaker"); StPythiaEventMaker *pythia = new StPythiaEventMaker; TString pyfile = gSystem->BaseName(fzdFile.c_str()); pyfile.ReplaceAll(".fzd", ".pythia.root"); pythia->SetPythiaFile(pyfile); chain3->AddAfter("geant", pythia); // Place trigger simulator after EMC makers gSystem->Load("StTriggerUtilities"); StTriggerSimuMaker *trgsim = new StTriggerSimuMaker; trgsim->setMC(1); // BBC was not used in Run 9 jet triggers //trgsim->useBbc(); //trgsim->bbc->setSource("StEvent"); trgsim->useBemc(); trgsim->bemc->setConfig(StBemcTriggerSimu::kOnline); trgsim->useEemc(); trgsim->eemc->setSource("StEvent"); /* trgsim->bemc->setBarrelJetPatchTh0(32); trgsim->bemc->setBarrelJetPatchTh1(43); trgsim->bemc->setBarrelJetPatchTh2(64); */ trgsim->setBarrelJetPatchTh(0, 32); // set for Run-11 based on trigger versioning page 20130728 trgsim->setBarrelJetPatchTh(1, 43); trgsim->setBarrelJetPatchTh(2, 64); trgsim->setOverlapJetPatchTh(0, 32); trgsim->setOverlapJetPatchTh(1, 43); trgsim->setOverlapJetPatchTh(2, 64); trgsim->setEndcapJetPatchTh(0, 32); trgsim->setEndcapJetPatchTh(1, 43); trgsim->setEndcapJetPatchTh(2, 64); trgsim->setBarrelHighTowerTh(0, 11); trgsim->setBarrelHighTowerTh(1, 18); trgsim->setBarrelHighTowerTh(2, 25); trgsim->setBarrelHighTowerTh(3, 31); trgsim->setEndcapHighTowerTh(0, 25); trgsim->setEndcapHighTowerTh(1, 31); // StBfcTriggerFilterMaker* trgfilt = new StBfcTriggerFilterMaker; // no trigger filter for Run-11 VPDMB // trgfilt->SetOkAllEvents(1); // The BFC trigger filter will select only JP1, AJP and BHT3 events // trgfilt->SetJP1(); // trgfilt->SetAJP(); // trgfilt->SetBHT3(); // Lower all jet patch thresholds by one unit from // their values obtained from the database using // the current timestamp. //trgfilt->changeJPThresh(-1); chain3->AddBefore("tpcChain", trgsim); // chain3->AddBefore("tpcChain",trgfilt); // no trigger filter for Run-11 VPDMB // Move these makers after trigger decision // *** VERY IMPORTANT *** // The order of TpxRaw and TpcRS *must* be preserved // or the embedding will *not* work. [RT# 2299] // http://www.star.bnl.gov/rt2/Ticket/Display.html?id=2299 StTpcRSMaker *TpcRS = (StTpcRSMaker *)chain2->GetMaker("TpcRS"); StTpcHitMaker *TpxRaw = (StTpcHitMaker *)chain1->GetMaker("TpxRaw"); chain3->AddBefore("TpcMixer", TpxRaw); chain3->AddBefore("TpcMixer", TpcRS); #if 0 // Turn on debugging of DB maker St_db_Maker *db = (St_db_Maker *)chain1->GetMaker("db"); db->SetDebug(2); #endif //-------------------------------------------------------------------------- TString trgfile = gSystem->BaseName(fzdFile.c_str()); trgfile.ReplaceAll(".fzd", ".trig.root"); TFile *ofile = TFile::Open(trgfile, "recreate"); assert(ofile); TH2F *hBarrelHighTowerSimu = new TH2F("hBarrelHighTowerSimu", "BEMC high tower simu;trigger patch;high tower", 300, 0, 300, 64, 0, 64); TH2F *hBarrelPatchSumSimu = new TH2F("hBarrelPatchSumSimu", "BEMC patch sum simu;trigger patch;patch sum", 300, 0, 300, 64, 0, 64); TH2F *hEndcapHighTowerSimu = new TH2F("hEndcapHighTowerSimu", "EEMC high tower simu;trigger patch;high tower", 90, 0, 90, 64, 0, 64); TH2F *hEndcapPatchSumSimu = new TH2F("hEndcapPatchSumSimu", "EEMC patch sum simu;trigger patch;patch sum", 90, 0, 90, 64, 0, 64); TH2F *hBarrelJetPatchSimu = new TH2F("hBarrelJetPatchSimu", "BEMC jet patch;jet patch;adc", 18, 0, 18, 160, 0, 160); TH2F *hEndcapJetPatchSimu = new TH2F("hEndcapJetPatchSimu", "EEMC jet patch;jet patch;adc", 6, 0, 6, 160, 0, 160); TH2F *hOverlapJetPatchSimu = new TH2F("hOverlapJetPatchSimu", "BEMC-EEMC-overlap;jet patch;adc", 6, 0, 6, 160, 0, 160); } //-------------------------------------------------------------------------- // Initialize chain Chain->Init(); PrintTimer(Chain); puts("Order of makers in BFCMIXER:"); StMaker::lsMakers(Chain); // Event loop int mNTotal = 0; int mNFailed = 0; TBenchmark evnt; StIOMaker *inputStream = (StIOMaker *)chain1->GetMaker("inputStream"); for (int iEvent = 1; iEvent <= nEvents; ++iEvent) { evnt.Reset(); evnt.Start("QAInfo:"); Chain->Clear(); int iMake = Chain->Make(iEvent); if (iMake == kStErr) ++mNFailed; if (inputStream->GetMakeReturn() % 10 == kStEOF) { inputStream->Rewind(); --iEvent; continue; } //if (iMake == kStSkip) continue; if (iMake % 10 == kStEOF || iMake % 10 == kStFatal) break; ++mNTotal; PrintTimer(Chain); //-------------------------------------------------------------------------- if (flag == "Jet") { // BEMC high towers and trigger patches for (int triggerpatch = 0; triggerpatch < 300; ++triggerpatch) { hBarrelHighTowerSimu->Fill(triggerpatch, trgsim->bemc->getBEMC_FEE_HT_ADC()[triggerpatch]); hBarrelPatchSumSimu->Fill(triggerpatch, trgsim->bemc->getBEMC_FEE_TP_ADC()[triggerpatch]); } // for triggerpatch // BEMC jet patches for (int jetpatch = 0; jetpatch < 18; ++jetpatch) { hBarrelJetPatchSimu->Fill(jetpatch, trgsim->bemc->barrelJetPatchAdc(jetpatch)); } // for jetpatch // EEMC high towers and trigger patches for (int triggerpatch = 0; triggerpatch < 90; ++triggerpatch) { hEndcapHighTowerSimu->Fill(triggerpatch, trgsim->eemc->getEndcapHighTower(triggerpatch)); hEndcapPatchSumSimu->Fill(triggerpatch, trgsim->eemc->getEndcapPatchSum(triggerpatch)); } // for triggerpatch // EEMC jet patches for (int jetpatch = 0; jetpatch < 6; ++jetpatch) { hEndcapJetPatchSimu->Fill(jetpatch, trgsim->eemc->endcapJetPatchAdc(jetpatch)); } // for jetpatch // BEMC-EEMC-overlap jet patches for (int i = 0; i < 2; ++i) { int jetpatch, adc; trgsim->emc->getOverlapJetPatchAdc(i, jetpatch, adc); hOverlapJetPatchSimu->Fill(jetpatch, adc); } // for i } //end of if("jet") //-------------------------------------------------------------------------- evnt.Stop("QAInfo:"); 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", iEvent, Chain->GetRunNumber(), Chain->GetEventNumber(), Chain->GetDate(), Chain->GetTime(), chain3->GetMakeReturn(), evnt.GetRealTime("QAInfo:"), evnt.GetCpuTime("QAInfo:")); } // End event loop printf("QAInfo:EventLoop completed code %d\n", iMake); gSystem->Exec("date"); TDatime t; printf("QAInfo:Run is finished at Date/Time %i/%i; Total events processed: %i and not completed: %i\n", t.GetDate(), t.GetTime(), mNTotal, mNFailed); //-------------------------------------------------------------------------- if (flag == "Jet") { ofile->Write(); ofile->Close(); } }
Int TimerList::PrintTimer(std::string timerName, std::ostream& str) { Int tnum = GetNumber(timerName); return (PrintTimer(tnum, str)); }