CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/L1TMonitorClient/src/L1THcalClient.cc

Go to the documentation of this file.
00001 #include "DQM/L1TMonitorClient/interface/L1THcalClient.h"
00002 #include "FWCore/Framework/interface/ESHandle.h"
00003 #include "FWCore/Framework/interface/EventSetup.h"
00004 #include <FWCore/Framework/interface/ESHandle.h>
00005 #include "FWCore/ServiceRegistry/interface/Service.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "DQMServices/Core/interface/DQMStore.h"
00008 #include "DQMServices/Core/interface/MonitorElement.h"
00009 #include <iostream>
00010 #include <stdio.h>
00011 #include <string>
00012 #include <sstream>
00013 #include <math.h>
00014 #include <TROOT.h>
00015 #include <TStyle.h>
00016 #include <TH1F.h>
00017 #include <TH2F.h>
00018 #include <TF1.h>
00019 using namespace edm;
00020 using namespace std;
00021 
00022 // Local definitions for the limits of the histograms
00023 const unsigned int RTPBINS = 101;
00024 const float RTPMIN = -0.5;
00025 const float RTPMAX = 100.5;
00026 
00027 const unsigned int TPPHIBINS = 72;
00028 const float TPPHIMIN = 0.5;
00029 const float TPPHIMAX = 72.5;
00030 
00031 const unsigned int TPETABINS = 65;
00032 const float TPETAMIN = -32.5;
00033 const float TPETAMAX = 32.5;
00034 
00035 const unsigned int effBins = 50;
00036 const float effMinHBHE = -0.5;
00037 const float effMaxHBHE = 5.5;
00038 const float effMinHF = -0.5;
00039 const float effMaxHF = 2.5;
00040 
00041 const unsigned int ratiobins = 100;
00042 const float ratiomin = 0.0;
00043 const float ratiomax = 1.0;
00044 
00045 const unsigned int tvsrecbins = 100;
00046 const float tvsrecmin = 0.0;
00047 const float tvsrecmax = 100.0;
00048 
00049 const unsigned int effcombo = 6472;
00050 const float effcombomin = -3272;
00051 const float effcombomax = 3272;
00052 
00053 L1THcalClient::L1THcalClient(const edm::ParameterSet& iConfig)
00054 {
00055   minEventsforFit = iConfig.getUntrackedParameter<int>("minEventsforFit",1000);
00056   input_dir = "L1T/L1THCALTPGXAna/";
00057   output_dir = "L1T/L1THCALTPGXAna/Tests/";
00058 
00059   dbe = edm::Service<DQMStore>().operator->();
00060   //  dbe->showDirStructure();
00061   //  dbe->setVerbose(1); 
00062 
00063   LogInfo( "TriggerDQM");
00064 }
00065 
00066 // ---------------------------------------------------------
00067 
00068 L1THcalClient::~L1THcalClient()
00069 {
00070  
00071  LogInfo("TriggerDQM")<<"[TriggerDQM]: ending... ";
00072 
00073 }
00074 
00075 
00076 // ------------ method called to for each event  ------------
00077 
00078 
00079 
00080 // ------------ method called once each job just before starting event loop  ------------
00081 
00082 void L1THcalClient::beginJob(void)
00083 {
00084   LogInfo("TriggerDQM")<<"[TriggerDQM]: Begin Job";
00085   //  LogInfo("TriggerDQM")<<"[TriggerDQM]: Standalone = "<<stdalone;
00086   nevents = 0;
00087   dbe->setCurrentFolder(output_dir);
00088   //2-D plots
00089   hcalPlateau_ =
00090     dbe->book2D("FitPlateau","HCAL Fit Plateau",TPETABINS,TPETAMIN,TPETAMAX,
00091                 TPPHIBINS,TPPHIMIN,TPPHIMAX);
00092   hcalThreshold_ =
00093     dbe->book2D("FitThreshold","HCAL Fit Threshold",TPETABINS,TPETAMIN,TPETAMAX,
00094                 TPPHIBINS,TPPHIMIN,TPPHIMAX);
00095   hcalWidth_ =
00096     dbe->book2D("FitWidth","HCAL Fit Width",TPETABINS,TPETAMIN,TPETAMAX,
00097                 TPPHIBINS,TPPHIMIN,TPPHIMAX);
00098   hcalEff_1_ =
00099     dbe->book1D("HcalEff1","HCAL Efficiency - 1",effBins,effMinHBHE,effMaxHBHE);
00100   hcalEff_2_ =
00101     dbe->book1D("HcalEff2","HCAL Efficiency - 2",effBins,effMinHBHE,effMaxHBHE);
00102   hcalEff_3_ =
00103     dbe->book1D("HcalEff3","HCAL Efficiency - 3",effBins,effMinHBHE,effMaxHBHE);
00104   hcalEff_4_ =
00105     dbe->book1D("HcalEff4","HCAL Efficiency - 4",effBins,effMinHF,effMaxHF);
00106 
00107 
00108 
00109            
00110   if (0){ 
00111       //efficiency histos for HBHE
00112       for (int i=0; i < 56; i++)
00113         {      
00114           char hname[20],htitle[20];
00115           char dirname[80];
00116           int ieta, iphi;
00117           if (i<28) ieta = i-28;
00118           else ieta = i-27;
00119           sprintf(dirname,"%sEffByChannel/EtaTower%d",output_dir.c_str(),ieta);
00120           dbe->setCurrentFolder(dirname);
00121           for (int j=0; j < 72; j++) 
00122             {
00123               iphi = j+1;
00124               if (i<28) ieta = i-28;
00125               else ieta = i-27;
00126               sprintf(hname,"eff_%d_%d",ieta,iphi);
00127               sprintf(htitle,"Eff <%d,%d>",ieta,iphi);
00128               hcalEff_HBHE[i][j] = dbe->book1D(hname, htitle, effBins,effMinHBHE,effMaxHBHE);
00129             }        
00130         }
00131       //efficiency histos for HF
00132       for (int i=0; i < 8; i++)
00133         {
00134           char hname[20],htitle[20];
00135           char dirname[80];
00136           int ieta, iphi;
00137           if (i<4) ieta = i-32;
00138           else ieta = i+25;
00139           sprintf(dirname,"%sEffByChannel/EtaTower%d",output_dir.c_str(),ieta);
00140           dbe->setCurrentFolder(dirname);
00141           for (int j=0; j < 18; j++)
00142             {
00143               iphi = j*4+1;
00144               if (i<4) ieta = i-32;
00145               else ieta = i+25;
00146               sprintf(hname,"eff_%d_%d",ieta,iphi);
00147               sprintf(htitle,"Eff <%d,%d>",ieta,iphi);
00148               hcalEff_HF[i][j] = dbe->book1D(hname, htitle, effBins,effMinHF,effMaxHF);
00149             }
00150         }
00151      }
00152 
00153 }
00154 
00155 // ------------ method called once each job just after ending the event loop  ------------
00156 void L1THcalClient::endJob() {
00157 
00158    LogInfo("TriggerDQM")<<"[TriggerDQM]: endJob";
00159 
00160 }
00161 
00162 void
00163 L1THcalClient::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00164 {
00165    using namespace edm;
00166   nevents++;
00167   if (nevents%10 == 0)    LogInfo("TriggerDQM")<<"[TriggerDQM]: event analyzed "<<nevents;
00168 
00169   //}
00170   //  //void L1THcalClient::endLuminosityBlock(const edm::LuminosityBlock & iLumiSection, const edm::EventSetup & iSetup) {
00171   //  LogInfo("TriggerDQM")<<"[TriggerDQM]: end Lumi Section.";
00172   //dbe->setCurrentFolder("L1T/QTests");
00173   TF1 *turnon = new TF1("turnon","[0]*0.5*(TMath::Erf((x -[1])*0.5/[2])+1.)",0,30);
00174   TH1F *eff_histo;
00175 
00176   //efficiency by region
00177   //std::cout << "before eff calc \n";
00178   TH1F *hcalEff_num = this->get1DHisto(input_dir+"HcalTP1",dbe);
00179   if (!hcalEff_num) std::cout << "numerator not found\n";
00180   TH1F *hcalEff_den = this->get1DHisto(input_dir+"HcalAll1",dbe);
00181   if (!hcalEff_den) std::cout << "denominator not found\n";
00182   //hcalEff_1_ =
00183   //  dbe->book1D("HcalEff1","HCAL Efficiency - 1",effBins,effMinHBHE,effMaxHBHE);
00184   calcEff(hcalEff_num, hcalEff_den, hcalEff_1_);
00185   if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00186     {
00187       eff_histo = this->get1DHisto(output_dir+"HcalEff1",dbe);
00188       turnon->SetParameter(0,1);
00189       turnon->SetParameter(1,2);
00190       turnon->SetParameter(2,6);
00191       eff_histo->Fit("turnon","LL,E");
00192     }
00193   hcalEff_num = this->get1DHisto(input_dir+"HcalTP2",dbe);
00194   if (!hcalEff_num) std::cout << "numerator not found\n";
00195   hcalEff_den = this->get1DHisto(input_dir+"HcalAll2",dbe);
00196   if (!hcalEff_den) std::cout << "denominator not found\n";
00197   //hcalEff_2_ =
00198   // dbe->book1D("HcalEff2","HCAL Efficiency - 2",effBins,effMinHBHE,effMaxHBHE);
00199   calcEff(hcalEff_num, hcalEff_den, hcalEff_2_);
00200     if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00201       {
00202         eff_histo = this->get1DHisto(output_dir+"HcalEff2",dbe);
00203         turnon->SetParameter(0,1);
00204         turnon->SetParameter(1,2);
00205         turnon->SetParameter(2,6);
00206         eff_histo->Fit("turnon","LL,E");
00207       }
00208   hcalEff_num = this->get1DHisto(input_dir+"HcalTP3",dbe);
00209   if (!hcalEff_num) std::cout << "numerator not found\n";
00210   hcalEff_den = this->get1DHisto(input_dir+"HcalAll3",dbe);
00211   if (!hcalEff_den) std::cout << "denominator not found\n";
00212   //hcalEff_3_ =
00213   //dbe->book1D("HcalEff3","HCAL Efficiency - 3",effBins,effMinHBHE,effMaxHBHE);
00214   calcEff(hcalEff_num, hcalEff_den, hcalEff_3_);
00215   if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00216     {
00217       eff_histo = this->get1DHisto(output_dir+"HcalEff3",dbe);
00218       turnon->SetParameter(0,1);
00219       turnon->SetParameter(1,3);
00220       turnon->SetParameter(2,6);
00221       eff_histo->Fit("turnon","LL,E");
00222     }
00223   hcalEff_num = this->get1DHisto(input_dir+"HcalTP4",dbe);
00224   if (!hcalEff_num) std::cout << "numerator not found\n";
00225   hcalEff_den = this->get1DHisto(input_dir+"HcalAll4",dbe);
00226   if (!hcalEff_den) std::cout << "denominator not found\n";
00227   // hcalEff_4_ =
00228   //dbe->book1D("HcalEff4","HCAL Efficiency - 4",effBins,effMinHF,effMaxHF);
00229   calcEff(hcalEff_num, hcalEff_den, hcalEff_4_);
00230   if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00231     {
00232       eff_histo = this->get1DHisto(output_dir+"HcalEff4",dbe);
00233       turnon->SetParameter(0,1);
00234       turnon->SetParameter(1,1);
00235       turnon->SetParameter(2,6);
00236       eff_histo->Fit("turnon","LL,E");
00237     }
00238   double plateau, threshold, width;
00239 
00240   
00241   if (0){
00242   //efficiency histos for HBHE
00243   for (int i=0; i < 56; i++)
00244     {
00245       char hname[20],htitle[30];
00246       int ieta, iphi;
00247       char subdirname[80];
00248       for (int j=0; j < 72; j++)
00249         {
00250           iphi = j+1;
00251           if (i<28) ieta = i-28;
00252           else ieta = i-27;
00253           sprintf(hname,"eff_%d_%d",ieta,iphi);
00254           sprintf(htitle,"Eff  <%d,%d>",ieta,iphi);
00255           //hcalEff_HBHE[i][j] = dbe->book1D(hname, htitle, effBins,effMinHBHE,effMaxHBHE);
00256           sprintf(subdirname,"%sEffByChannel/EtaTower%d/",input_dir.c_str(),ieta);
00257           hcalEff_num = this->get1DHisto((string)subdirname+(string)hname+"_num",dbe);
00258           hcalEff_den = this->get1DHisto((string)subdirname+(string)hname+"_den",dbe);
00259      if (!hcalEff_num) std::cout <<(string)subdirname+(string)hname+"_num" << "numerator not found\n";
00260           if (!hcalEff_num) std::cout << "numerator not found\n";
00261           if (!hcalEff_den) std::cout << "denominator not found\n";
00262           calcEff(hcalEff_num, hcalEff_den, hcalEff_HBHE[i][j]);
00263 
00264           if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00265             {
00266               sprintf(subdirname,"%sEffByChannel/EtaTower%d/",output_dir.c_str(),ieta);
00267               eff_histo = this->get1DHisto((string)subdirname+(string)hname,dbe);
00268               turnon->SetParameter(0,1);
00269               turnon->SetParameter(1,3);
00270               turnon->SetParameter(2,6);
00271               eff_histo->Fit("turnon","LL,E");
00272               plateau = turnon->GetParameter(0);
00273               threshold = turnon->GetParameter(1);
00274               width = turnon->GetParameter(2);
00275               hcalPlateau_->Fill(ieta,iphi,plateau);
00276               hcalThreshold_->Fill(ieta,iphi,threshold);
00277               hcalWidth_->Fill(ieta,iphi,width);
00278             }
00279         }
00280     }
00281   //efficiency histos for HF
00282   for (int i=0; i < 8; i++)
00283     {
00284       char hname[20],htitle[30];
00285       int ieta, iphi;
00286       char subdirname[80];
00287       for (int j=0; j < 18; j++)
00288         {
00289           iphi = j*4+1;
00290           if (i<4) ieta = i-32;
00291           else ieta = i+25;
00292           sprintf(hname,"eff_%d_%d",ieta,iphi);
00293           sprintf(htitle,"Eff  <%d,%d>",ieta,iphi);
00294           //hcalEff_HF[i][j] = dbe->book1D(hname, htitle, effBins,effMinHF,effMaxHF);
00295           sprintf(subdirname,"%sEffByChannel/EtaTower%d/",input_dir.c_str(),ieta);
00296           hcalEff_num = this->get1DHisto((string)subdirname+(string)hname+"_num",dbe);
00297           hcalEff_den = this->get1DHisto((string)subdirname+(string)hname+"_den",dbe);
00298           if (!hcalEff_num) std::cout <<(string)subdirname+(string)hname+"_num" << "numerator not found\n";
00299           if (!hcalEff_den) std::cout << "denominator not found\n";
00300           calcEff(hcalEff_num, hcalEff_den, hcalEff_HF[i][j]);
00301           if (hcalEff_num->GetEntries() > minEventsforFit && nevents%1000 == 0)
00302             {
00303               sprintf(subdirname,"%sEffByChannel/EtaTower%d/",output_dir.c_str(),ieta);
00304               eff_histo = this->get1DHisto((string)subdirname+(string)hname,dbe);
00305               turnon->SetParameter(0,1);
00306               turnon->SetParameter(1,1);
00307               turnon->SetParameter(2,6);
00308               eff_histo->Fit("turnon","LL,E");
00309               plateau = turnon->GetParameter(0);
00310               threshold = turnon->GetParameter(1);
00311               width = turnon->GetParameter(2);
00312               hcalPlateau_->Fill(ieta,iphi,plateau);
00313               hcalThreshold_->Fill(ieta,iphi,threshold);
00314               hcalWidth_->Fill(ieta,iphi,width);
00315             }
00316         }
00317     }
00318   }
00319 }
00320 
00321 void L1THcalClient::calcEff(TH1F *num, TH1F *den, MonitorElement* me)
00322 {
00323   if (num->GetNbinsX() != den->GetNbinsX()) 
00324     {
00325       std::cout << "numerator and denominator do not have the same number of bins!\n";
00326       return;
00327     }
00328   double eff;
00329   for (int bin = 0; bin <= num->GetNbinsX(); bin++)
00330     {
00331       if (den->GetBinContent(bin) != 0) eff = num->GetBinContent(bin)/den->GetBinContent(bin);
00332       else eff = 0;
00333       me->setBinContent(bin,eff);
00334     }
00335 }
00336 
00337 TH1F * L1THcalClient::get1DHisto(string meName, DQMStore * dbi)
00338 {
00339 
00340   //  string mePath = "Collector/GlobalDQM/L1T/" + meName;
00341 
00342   //  MonitorElement * me_ = dbi->get(mePath);
00343   MonitorElement * me_ = dbi->get(meName);
00344 
00345   TH1F * meHisto = NULL;
00346 
00347   if (me_) {
00348 
00349     meHisto = me_->getTH1F();
00350   }
00351   else {               
00352                        
00353     LogInfo("TriggerDQM") << "ME " << meName << " NOT FOUND!";
00354                        
00355   }
00356                                    
00357   return meHisto;
00358 }
00359 
00360 TH2F * L1THcalClient::get2DHisto(string meName, DQMStore * dbi)
00361 {
00362 
00363   //  string mePath = "Collector/GlobalDQM/L1T/" + meName;
00364 
00365   MonitorElement * me_ = dbi->get(meName);
00366 
00367   TH2F * meHisto = NULL;
00368 
00369   if (me_) {
00370 
00371     meHisto = me_->getTH2F();
00372   }
00373   else {
00374         
00375     LogInfo("TriggerDQM") << "ME NOT FOUND.";
00376 
00377   }
00378 
00379   return meHisto;
00380 }
00381