/////////////////////////////////////////////////////////////////////////////// // Plug strip d-bank analysis module: below are the examples of what // one can do in the interactive session // fPrintLevel = 1: print Cal data block for all the events // fPrintLevel = 11: print events with nctow[5] == 0 /////////////////////////////////////////////////////////////////////////////// /* ****** to run: (note naming convention: class_name = "T"+module_name+"Module"), the source code of the class is stored in TStnAna x("results/ar0192ea.0001cmu0.stn_new"); TStnAna x("results/dataval_muon.root"); .L TCalAnaModule.cc+ x.AddModule(new TCalAnaModule); x.Run(); ****** to display a histogram TCalAnaModule::Hist_t* c; TCalAnaModule* m = (TCalAnaModule*) x.GetModule("CalAna"); c = m->GetHist(); c->fAdcCounts->Draw(); ****** to process one event (#11 in the ntuple) and to print the data x.ProcessEvent(11) TCalAnaModule* m = (TCalAnaModule*) x.GetModule("CalAna"); TCesDataBlock* ces = m->GetCesDataBlock(); TStnHeaderBlock* hdr = m->GetHeaderBlock (); ces->Print(); hdr->Print(); */ #include "TF1.h" #include "TCanvas.h" #include "Stntuple/obj/TStnTriggerBlock.hh" #include "Stntuple/obj/TStnHeaderBlock.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "TCalAnaModule.hh" // ClassImp(TCalAnaModule) //_____________________________________________________________________________ TCalAnaModule::TCalAnaModule(const char* name, const char* title): TStnModule(name,title) { fAdcThreshold = 0; } //_____________________________________________________________________________ TCalAnaModule::~TCalAnaModule() { } //_____________________________________________________________________________ void TCalAnaModule::BookHistograms() { char name [200]; char title[200]; Delete("hist"); // book histograms sprintf(name, "%s_sum_et",GetName()); sprintf(title,"CAL: Sum(Et)"); fHist.fSumEt = new TH1F(name, title, 400,0,200); AddHistogram(fHist.fSumEt); sprintf(name, "%s_myron_vs_sumet",GetName()); sprintf(title,"CAL: Myron Flag vs Sum(Et)"); fHist.fMyronVsSumEt = new TH2F(name,title, 400,0,200,4,0,4); AddHistogram(fHist.fMyronVsSumEt); sprintf(name, "%s_tower_et",GetName()); sprintf(title,"CAL: Tower Et"); fHist.fTowerEt = new TH1F(name, title, 200,0,20); AddHistogram(fHist.fTowerEt); sprintf(name, "%s_tower_eta_phi",GetName()); sprintf(title,"tower eta:phi"); fHist.fTowerEtaPhi = new TH2F(name,title, 60,0,60,50,0,50); AddHistogram(fHist.fTowerEtaPhi); for (int i=0; i<10; i++) { sprintf(name, "%s_ntowers_%i",GetName(),i); sprintf(title,"CAL: N towers[%i]",i); fHist.fNTowers[i] = new TH1F(name, title, 400,0,2000); AddHistogram(fHist.fNTowers[i]); sprintf(name, "%s_n_central_towers_%i",GetName(),i); sprintf(title,"CAL: N central towers[%i]",i); fHist.fNCentralTowers[i] = new TH1F(name, title, 400,0,400); AddHistogram(fHist.fNCentralTowers[i]); } sprintf(name, "%s_ntowers1",GetName()); sprintf(title,"N(cal) towers, thr=%i",fAdcThreshold); fHist.fNTow1 = new TH1F(name, title, 400,0,2000); AddHistogram(fHist.fNTow1); sprintf(name, "%s_em_pmt",GetName()); sprintf(title,"EM ADC counts, thr=%i",fAdcThreshold); fHist.fEmPmt = new TH1F(name, title, 250,0,2500); AddHistogram(fHist.fEmPmt); sprintf(name, "%s_had_pmt",GetName()); sprintf(title,"HAD ADC counts, thr=%i",fAdcThreshold); fHist.fHadPmt = new TH1F(name, title, 250,0,2500); AddHistogram(fHist.fHadPmt); sprintf(name, "%s_em_eta_phi_0",GetName()); sprintf(title,"EM0 eta:phi, thr=%i",fAdcThreshold); fHist.fEmEtaPhi[0] = new TH2F(name,title, 60,0,60,50,0,50); AddHistogram(fHist.fEmEtaPhi[0]); sprintf(name, "%s_em_eta_phi_1",GetName()); sprintf(title,"EM0 eta:phi, thr=%i",fAdcThreshold); fHist.fEmEtaPhi[1] = new TH2F(name,title, 60,0,60,50,0,50); AddHistogram(fHist.fEmEtaPhi[1]); sprintf(name, "%s_had_eta_phi_0",GetName()); sprintf(title,"HAD0 eta:phi, thr=%i",fAdcThreshold); fHist.fHadEtaPhi[0] = new TH2F(name,title,60,0,60,50,0,50); AddHistogram(fHist.fHadEtaPhi[0]); sprintf(name, "%s_had_eta_phi_1",GetName()); sprintf(title,"HAD0 eta:phi, thr=%i",fAdcThreshold); fHist.fHadEtaPhi[1] = new TH2F(name,title,60,0,60,50,0,50); AddHistogram(fHist.fHadEtaPhi[1]); } //_____________________________________________________________________________ int TCalAnaModule::BeginJob() { // register the data block RegisterDataBlock("CalDataBlock","TCalDataBlock",&fCalData); // RegisterDataBlock("TriggerBlock",&fTriggerBlock); // book histograms BookHistograms(); //----------------------------------------------------------------------------- // disable module if branch we're interested in doesn't exist //----------------------------------------------------------------------------- if (! fCalData) fEnabled = 0; return 0; } //_____________________________________________________________________________ int TCalAnaModule::BeginRun() { return 0; } //_____________________________________________________________________________ int TCalAnaModule::Event(int ientry) { fCalData->GetEntry(ientry); // fTriggerBlock->GetEntry(ientry); // do whatever you want if (PrintLevel() == 1) { GetHeaderBlock()->Print(); fCalData->Print(); // fTriggerBlock->Print(); } int ntow[10]; int nctow[10]; int ntow1 = 0; int ntowers = fCalData->NTowers(); for (int i=0; i<10; i++) { ntow [i] = 0; nctow[i] = 0; } ntow[0] = ntowers; for (int i=0; iTower(i); int ok = 0; float et = t->Et(); fHist.fTowerEt->Fill(et); fHist.fTowerEtaPhi->Fill(t->IEta(),t->IPhi()); if (et > 0.1) ntow[1]++; if (et > 0.2) ntow[2]++; if (et > 0.5) ntow[3]++; if (et > 1.0) ntow[4]++; if (et > 2.0) ntow[5]++; if (et > 5.0) ntow[6]++; if (et > 10.0) ntow[7]++; if (t->IsCentral()) { nctow[0]++; if (et > 0.1) nctow[1]++; if (et > 0.2) nctow[2]++; if (et > 0.5) nctow[3]++; if (et > 1.0) nctow[4]++; if (et > 2.0) nctow[5]++; if (et > 5.0) nctow[6]++; if (et > 10.0) nctow[7]++; } for (int ipmt=0; ipmt<2; ipmt++) { if (t->EmPmt(ipmt) > fAdcThreshold) { fHist.fEmEtaPhi[ipmt]->Fill((float) t->IEta(), (float) t->IPhi()); fHist.fEmPmt->Fill(t->EmPmt(ipmt)); ok = 1; } } for (int ipmt=0; ipmt<4; ipmt++) { if (t->HadPmt(ipmt) > fAdcThreshold) { if (ipmt < 2) { // for the moment fill only 1st 2 channels fHist.fHadEtaPhi[ipmt]->Fill((float) t->IEta(), (float) t->IPhi()); fHist.fHadPmt->Fill(t->HadPmt(ipmt)); } ok = 1; } } ntow1 += ok; } for (int i=0; i<10; i++) { fHist.fNTowers[i]->Fill(ntow[i]); fHist.fNCentralTowers[i]->Fill(nctow[i]); } fHist.fNTow1->Fill(ntow1); fHist.fSumEt->Fill(fCalData->SumEt()); // fHist.fMyronVsSumEt->Fill(fCalData->SumEt(), // (float) fTriggerBlock->Tsid()->MyronFlag()); if (PrintLevel() == 11) { if (nctow[5] == 0) GetHeaderBlock()->Print("nctow[5] == 0"); } return 0; } //_____________________________________________________________________________ void TCalAnaModule::DisplayEvent() { // char name[] = "TCalAnaModule_DisplayEvent_canvas"; // char title[] = "West plug CES events"; // TCanvas* c = (TCanvas*) gROOT->FindObject(name); // if (! c) { // c = new TCanvas(name, title,0,0,800,600); // c->Divide(2,2); // } // for (int k=0; k<2; k++) { // c->cd(2*k+1); // fHist.fStripProfile[k]->Draw(); // c->cd(2*k+2); // fHist.fWireProfile[k]->Draw(); // } // c->Modified(); // c->Update(); } //_____________________________________________________________________________ int TCalAnaModule::EndJob() { printf("----- end job: ---- %s\n",GetName()); return 0; }