/* Module to fileter events with photons and electrons See emfilter.C for an example of how to run it. */ //_____________________________________________________________________________ // Em filter module //_____________________________________________________________________________ #include #include #include "TF1.h" #include "TCanvas.h" #include "TMath.h" #include "Stntuple/loop/TStnAna.hh" #include "Stntuple/obj/TStnTrackBlock.hh" #include "TEmFilterModule.hh" // ClassImp(TEmFilterModule) //_____________________________________________________________________________ TEmFilterModule::TEmFilterModule(const char* name, const char* title): TStnModule(name,title) { fMinEmEt1 = 5.0; fMinEmEt2 = -1.0; fMaxEmIso1 = 9999.0; fMaxEmIso2 = 9999.0; fMaxEmEta1 = 9999.0; fMaxEmEta2 = 9999.0; fMinEleEt1 = -1.0; fMinEleEt2 = -1.0; fMaxEleIso1 = 9999.0; fMaxEleIso2 = 9999.0; fMaxEleEta1 = 9999.0; fMaxEleEta2 = 9999.0; fMinElePt1 = -1.0; fMinElePt2 = -1.0; } //_____________________________________________________________________________ TEmFilterModule::~TEmFilterModule() { } //_____________________________________________________________________________ void TEmFilterModule::BookHistograms() { // char name [200]; // char title[200]; DeleteHistograms(); HBook1F(fHist.fNEmObj,"n_photons","N(EM objects in Photon Block)",10,-0,10); HBook1F(fHist.fEmEt,"photon_et","EM object Et",150,0.,150); HBook1F(fHist.fEmPt,"electron_track_pt","EM object track Pt",150,0.,150); HBook1F(fHist.fEmEta,"photon_eta","EM object eta",100,-5.0,5.0); HBook1F(fHist.fEmIso,"photon_iso","EM Object isolation",100,0.0,50.0); HBook1F(fHist.fEmEt2,"photon_et2","Et2",100,0.,150); HProf(fHist.fEmSkim,"skim","EM object skim rate",21,-0.5,20.5,0,100); } //_____________________________________________________________________________ int TEmFilterModule::BeginJob() { // register the data block RegisterDataBlock("TrackBlock" ,"TStnTrackBlock" ,&fTrackBlock ); RegisterDataBlock("TriggerBlock" ,"TStnTriggerBlock" ,&fTriggerBlock ); RegisterDataBlock("PhotonBlock" ,"TStnPhotonBlock" ,&fPhotonBlock ); RegisterDataBlock("ElectronBlock","TStnElectronBlock",&fElectronBlock); // book histograms BookHistograms(); return 0; } //_____________________________________________________________________________ int TEmFilterModule::BeginRun() { return 0; } //_____________________________________________________________________________ int TEmFilterModule::Event(int ientry) { // if fMyronFlag >= 0, select event with the given L2 bucket = fMyronFlag if (fMyronFlag >= 0) { fTriggerBlock->GetEntry(ientry); if (fTriggerBlock->Tsid()->MyronFlag() != fMyronFlag) { return 0; } } // fTrackBlock->GetEntry(ientry); // if (! fPhotonBlock) return 0; fPhotonBlock->GetEntry(ientry); bool pass = false; int npho = fPhotonBlock->NPhotons(); fHist.fNEmObj->Fill(npho); if(npho>=1) fHist.fEmSkim->Fill(1.,1.); else fHist.fEmSkim->Fill(1.,0.); if(npho>=2) fHist.fEmSkim->Fill(2.,1.); else fHist.fEmSkim->Fill(2.,0.); if(npho>=3) fHist.fEmSkim->Fill(3.,1.); else fHist.fEmSkim->Fill(3.,0.); float et,pt,iso,et1,et2,eta; int n1,n2; et1 = -1; et2 = -1; n1=0; n2=0; for(int i=0; iPhoton(i)); et = TMath::Max(pho.fEt,pho.fEtc); iso = TMath::Min(pho.fCo4,pho.fCo4PJW); eta = pho.fDteta; if(et>fMinEmEt1 && isofMinEmEt2 && isoFill(et); fHist.fEmEta->Fill(eta); fHist.fEmIso->Fill(iso); if(et>et1) { et2 = et1; et1 = et; } else if(et>et2) { et2 = et; } } if(npho>=2) fHist.fEmEt2->Fill(et2); if(n1>=1) { pass = true; fHist.fEmSkim->Fill(4.,1.); } else { fHist.fEmSkim->Fill(4.,0.); } if(n2>=2) { pass = true; fHist.fEmSkim->Fill(5.,1.); } else { fHist.fEmSkim->Fill(5.,0.); } fElectronBlock->GetEntry(ientry); int nele = fElectronBlock->NElectrons(); n1=0; n2=0; for(int i=0; iElectron(i)); et = TMath::Max(ele.Et(),ele.Etcor()); eta = ele.DetEta(); pt = ele.TrackPt(); iso = ele.Iso(); if(et>fMinEleEt1 && isofMinElePt1 && abs(eta)fMinEleEt2 && isofMinElePt2 && abs(eta)Fill(ele.TrackPt()); } if(n1>=1) { pass = true; fHist.fEmSkim->Fill(6.,1.); } else { fHist.fEmSkim->Fill(6.,0.); } if(n2>=2) { pass = true; fHist.fEmSkim->Fill(7.,1.); } else { fHist.fEmSkim->Fill(7.,0.); } if(pass) { fHist.fEmSkim->Fill(0.,1.); } else { fHist.fEmSkim->Fill(0.,0.); } if ( pass ) SetPassed(1); else SetPassed(0); return 0; } //_____________________________________________________________________________ void TEmFilterModule::Display() { TCanvas* cEM = new TCanvas("EmFilt","EmFilter Printout",100,100,700,900); cEM->Divide(2,4); cEM->cd(1); fHist.fNEmObj->Draw(); cEM->cd(2); fHist.fEmEt->Draw(); cEM->cd(3); fHist.fEmPt->Draw(); cEM->cd(4); fHist.fEmEta->Draw(); cEM->cd(5); fHist.fEmIso->Draw(); cEM->cd(6); fHist.fEmEt2->Draw(); cEM->cd(7); fHist.fEmSkim->Draw(); return; } int TEmFilterModule::EndJob() { TProfile& pr = *(fHist.fEmSkim); std::cout << " TEmFilterModule Summary: Total input events " << pr.GetBinEntries(1) << std::endl; std::cout << " Skim bit Nevents Rate" << std::endl; for(int i=0; i<=10; i++) { float r = pr.GetBinContent(i+1); int n = pr.GetBinEntries(i+1) * r + 0.1; std::cout << std::setw(7) << i << std::setw(10) << n << std::setw(12) << r << std::endl; } return 0; }