Go to the documentation of this file.00001 #include "DQMOffline/Trigger/interface/TopElectronHLTOfflineClient.h"
00002
00003
00004 #include "FWCore/Framework/interface/Run.h"
00005 #include "FWCore/Framework/interface/Event.h"
00006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00007 #include "FWCore/ServiceRegistry/interface/Service.h"
00008
00009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00010
00011 #include "DQMServices/Core/interface/DQMStore.h"
00012 #include "DQMServices/Core/interface/MonitorElement.h"
00013
00014
00015 TopElectronHLTOfflineClient::TopElectronHLTOfflineClient(const edm::ParameterSet& iConfig) : dbe_(NULL)
00016 {
00017 dbe_ = edm::Service<DQMStore>().operator->();
00018
00019 if (!dbe_)
00020 {
00021 edm::LogError("TopElectronHLTOfflineClient") << "unable to get DQMStore service, upshot is no client histograms will be made";
00022 }
00023
00024 if(iConfig.getUntrackedParameter<bool>("DQMStore", false))
00025 {
00026 if (dbe_) dbe_->setVerbose(0);
00027 }
00028
00029 dirName_=iConfig.getParameter<std::string>("DQMDirName");
00030
00031 if (dbe_)
00032 dbe_->setCurrentFolder(dirName_);
00033
00034 hltTag_ = iConfig.getParameter<std::string>("hltTag");
00035
00036 electronIdNames_ = iConfig.getParameter<std::vector<std::string> >("electronIdNames");
00037 superTriggerNames_ = iConfig.getParameter<std::vector<std::string> >("superTriggerNames");
00038 electronTriggerNames_ = iConfig.getParameter<std::vector<std::string> >("electronTriggerNames");
00039 addExtraId_ = iConfig.getParameter<bool>("addExtraId");
00040
00041 runClientEndLumiBlock_ = iConfig.getParameter<bool>("runClientEndLumiBlock");
00042 runClientEndRun_ = iConfig.getParameter<bool>("runClientEndRun");
00043 runClientEndJob_ = iConfig.getParameter<bool>("runClientEndJob");
00044
00045 }
00046
00047
00048 TopElectronHLTOfflineClient::~TopElectronHLTOfflineClient()
00049 {
00050 }
00051
00052 void TopElectronHLTOfflineClient::beginJob()
00053 {
00054
00055
00056
00057 std::vector<std::string> regions;
00058 regions.push_back("EB");
00059 regions.push_back("EE");
00060
00061
00062 std::vector<std::string> eleIdNames;
00063 for (size_t i = 0; i < electronIdNames_.size(); ++i)
00064 {
00065 eleIdNames.push_back(electronIdNames_[i]);
00066 if (addExtraId_)
00067 eleIdNames.push_back(electronIdNames_[i]+"extraId");
00068 }
00069
00070 std::vector<std::string> vars;
00071 vars.push_back("_et");
00072 vars.push_back("_eta");
00073 vars.push_back("_phi");
00074 vars.push_back("_isolEm");
00075 vars.push_back("_isolHad");
00076 vars.push_back("_minDeltaR");
00077 vars.push_back("_global_n30jets");
00078 vars.push_back("_global_sumEt");
00079 vars.push_back("_gsftrack_etaError");
00080 vars.push_back("_gsftrack_phiError");
00081 vars.push_back("_gsftrack_numberOfValidHits");
00082 vars.push_back("_gsftrack_dzPV");
00083
00084
00085 for (size_t i = 0; i < eleIdNames.size(); ++i)
00086 for (size_t j = 0; j < regions.size(); ++j)
00087 for (size_t k = 0; k < vars.size(); ++k)
00088 for (size_t l = 0; l < superTriggerNames_.size(); ++l)
00089 {
00090 superMeNames_.push_back("ele_"+superTriggerNames_[l]+"_"+regions[j]+"_"+eleIdNames[i]+vars[k] );
00091 for (size_t m = 0; m < electronTriggerNames_.size(); ++m)
00092 {
00093 eleMeNames_.push_back("ele_"+superTriggerNames_[l]+"_"+electronTriggerNames_[m] +"_"+regions[j]+"_"+eleIdNames[i]+vars[k]);
00094 }
00095 }
00096
00097
00098
00099 }
00100
00101 void TopElectronHLTOfflineClient::endJob()
00102 {
00103 if(runClientEndJob_)
00104 runClient_();
00105 }
00106
00107 void TopElectronHLTOfflineClient::beginRun(const edm::Run& run, const edm::EventSetup& c)
00108 {
00109 }
00110
00111
00112 void TopElectronHLTOfflineClient::endRun(const edm::Run& run, const edm::EventSetup& c)
00113 {
00114 if(runClientEndRun_)
00115 runClient_();
00116 }
00117
00118
00119 void TopElectronHLTOfflineClient::analyze(const edm::Event& iEvent,const edm::EventSetup& iSetup)
00120 {
00121 }
00122
00123 void TopElectronHLTOfflineClient::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,const edm::EventSetup& c)
00124 {
00125 if(runClientEndLumiBlock_)
00126 runClient_();
00127 }
00128
00129 void TopElectronHLTOfflineClient::runClient_()
00130 {
00131 if (!dbe_) return;
00132 dbe_->setCurrentFolder(dirName_);
00133
00134 size_t k = 0;
00135 for (size_t i = 0; i < superMeNames_.size(); ++i)
00136 {
00137 for (size_t j = 0; j < electronTriggerNames_.size(); ++j)
00138 {
00139 if (k >= eleMeNames_.size())
00140 continue;
00141 createSingleEffHists(superMeNames_[i], eleMeNames_[k], eleMeNames_[k]+"_eff");
00142 ++k;
00143 }
00144 }
00145 superTriggerNames_.size();
00146 electronTriggerNames_.size();
00147
00148
00149 }
00150
00151 void TopElectronHLTOfflineClient::createSingleEffHists(const std::string& denomName, const std::string& nomName, const std::string& effName)
00152 {
00153 MonitorElement* denom = dbe_->get(dirName_+"/"+denomName);
00154
00155 MonitorElement* nom = dbe_->get(dirName_+"/"+nomName);
00156 if(nom!=NULL && denom!=NULL)
00157 {
00158
00159 makeEffMonElemFromPassAndAll(effName, nom, denom);
00160 }
00161 }
00162
00163
00164 MonitorElement* TopElectronHLTOfflineClient::makeEffMonElemFromPassAndAll(const std::string& name, const MonitorElement* pass, const MonitorElement* all)
00165 {
00166 TH1F* passHist = pass->getTH1F();
00167 if(passHist->GetSumw2N()==0)
00168 passHist->Sumw2();
00169 TH1F* allHist = all->getTH1F();
00170 if(allHist->GetSumw2N()==0)
00171 allHist->Sumw2();
00172
00173 TH1F* effHist = (TH1F*) passHist->Clone(name.c_str());
00174 effHist->Divide(passHist,allHist,1,1,"B");
00175
00176 MonitorElement* eff = dbe_->get(dirName_+"/"+name);
00177 if(eff==NULL)
00178 {
00179 eff= dbe_->book1D(name,effHist);
00180 }
00181 else
00182 {
00183 *eff->getTH1F()=*effHist;
00184 delete effHist;
00185 }
00186 return eff;
00187 }