// $Id$ // // File: JEventProcessor_l3_trigger_test.cc // Created: Sun Feb 10 12:39:06 EST 2013 // Creator: davidl (on Darwin harriet.local 11.4.2 i386) // #include "JEventProcessor_l3_trigger_test.h" using namespace jana; using namespace std; #include #include #include #include // Routine used to create our JEventProcessor #include extern "C"{ void InitPlugin(JApplication *app){ InitJANAPlugin(app); app->AddProcessor(new JEventProcessor_l3_trigger_test()); } } // "C" //------------------ // JEventProcessor_l3_trigger_test (Constructor) //------------------ JEventProcessor_l3_trigger_test::JEventProcessor_l3_trigger_test() { } //------------------ // ~JEventProcessor_l3_trigger_test (Destructor) //------------------ JEventProcessor_l3_trigger_test::~JEventProcessor_l3_trigger_test() { } //------------------ // init //------------------ jerror_t JEventProcessor_l3_trigger_test::init(void) { japp->RootWriteLock(); TColor::CreateColorWheel(); logFOM = new TH1D("logFOM","", 10000.0, -500.0, 0.0); logFOM_r1 = (TH1D*)logFOM->Clone("logFOM_r1"); logFOM_r2 = (TH1D*)logFOM->Clone("logFOM_r2"); logFOM_r3 = (TH1D*)logFOM->Clone("logFOM_r3"); logFOM->SetLineColor(kBlack); logFOM_r1->SetLineColor(kRed); logFOM_r1->SetLineColor(kGreen+1); logFOM_r1->SetLineColor(kMagenta); TFile *f = new TFile("l3_probs.root"); if(f->IsOpen()){ AddProbHist("Ntagger"); AddProbHist("Ntof"); AddProbHist("Ephoton_truth"); AddProbHist("Nstart_counter"); AddProbHist("Nfdc"); AddProbHist("Nfdc_pseudo"); AddProbHist("Ncdc"); AddProbHist("Ntrack_candidates"); AddProbHist("Ntrack_wb"); AddProbHist("Nbcal_clusters"); AddProbHist("Nfcal_clusters"); AddProbHist("Ebcal"); AddProbHist("Efcal"); AddProbHist("Ptot_tracks_wb"); AddProbHist("Ncdc_layers"); AddProbHist("Nfdc_planes"); }else{ jerr<<"Unable to open ROOT file \"l3_probs.root\". Please make sure it is in the cwd."<RootUnLock(); // Print list of histograms we found cout<<"Level-3 input probability histograms:"<::iterator iter; for(iter=prob_hists.begin(); iter!=prob_hists.end(); iter++){ cout<<" "<first<GetSingle(l3trigger); // Multiply all probabilities to FOM double fom = 1.0; fom *= ProbFactor("Ntagger", l3trigger->Ntagger); fom *= ProbFactor("Ntof", l3trigger->Ntof); fom *= ProbFactor("Ephoton_truth", l3trigger->Ephoton_truth); fom *= ProbFactor("Nstart_counter", l3trigger->Nstart_counter); fom *= ProbFactor("Nfdc", l3trigger->Nfdc); fom *= ProbFactor("Nfdc_pseudo", l3trigger->Nfdc_pseudo); fom *= ProbFactor("Ncdc", l3trigger->Ncdc); fom *= ProbFactor("Ntrack_candidates", l3trigger->Ntrack_candidates); fom *= ProbFactor("Ntrack_wb", l3trigger->Ntrack_wb); fom *= ProbFactor("Nbcal_clusters", l3trigger->Nbcal_clusters); fom *= ProbFactor("Nfcal_clusters", l3trigger->Nfcal_clusters); fom *= ProbFactor("Ebcal", l3trigger->Ebcal); fom *= ProbFactor("Efcal", l3trigger->Efcal); fom *= ProbFactor("Ptot_tracks_wb", l3trigger->Ptot_tracks_wb); fom *= ProbFactor("Ncdc_layers", l3trigger->Ncdc_layers); fom *= ProbFactor("Nfdc_planes", l3trigger->Nfdc_planes); double lfom = log(fom); logFOM->Fill(lfom); if(l3trigger->Ephoton_truth < 7.0) logFOM_r1->Fill(lfom); else if(l3trigger->Ephoton_truth < 10.0) logFOM_r2->Fill(lfom); else if(l3trigger->Ephoton_truth < 12.0) logFOM_r3->Fill(lfom); return NOERROR; } //------------------ // erun //------------------ jerror_t JEventProcessor_l3_trigger_test::erun(void) { // This is called whenever the run number changes, before it is // changed to give you a chance to clean up before processing // events from the next run number. return NOERROR; } //------------------ // fini //------------------ jerror_t JEventProcessor_l3_trigger_test::fini(void) { // Called before program exit after event processing is finished. return NOERROR; } //------------------ // AddProbHist //------------------ void JEventProcessor_l3_trigger_test::AddProbHist(string what) { // Histogram we want has name with "_cut" added. string hname = what + "_cut"; TH1D *h = (TH1D*)gROOT->FindObject(hname.c_str()); if(h!=NULL){ // Normalize double integral = h->Integral(1, h->GetNbinsX()); if(integral==0) return; // don't allow empty histograms h->Scale(1.0/integral); // Add to list prob_hists[what] = h; } } //------------------ // ProbFactor //------------------ double JEventProcessor_l3_trigger_test::ProbFactor(string what, double val) { TH1D *h = prob_hists[what]; if(!h) return 1.0; int ibin = h->FindBin(val); if(ibin>=1 && ibin<=h->GetNbinsX()){ return h->GetBinContent(ibin); } return 0.0; }