00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "DQMOffline/Trigger/interface/FourVectorHLTClient.h"
00011
00012 #include "DQMServices/Core/interface/QTest.h"
00013 #include "FWCore/ServiceRegistry/interface/Service.h"
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015 #include "FWCore/Framework/interface/ESHandle.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018 #include "DQMServices/Core/interface/QReport.h"
00019 #include "DQMServices/Core/interface/DQMStore.h"
00020 #include "DQMServices/Core/interface/MonitorElement.h"
00021 #include "TRandom.h"
00022 #include <TF1.h>
00023 #include <TGraphAsymmErrors.h>
00024 #include <TGraph.h>
00025 #include <stdio.h>
00026 #include <sstream>
00027 #include <math.h>
00028 #include <TProfile.h>
00029 #include <TProfile2D.h>
00030 #include <memory>
00031 #include <iostream>
00032 #include <iomanip>
00033 #include <map>
00034 #include <vector>
00035 #include <string>
00036 #include <fstream>
00037 #include "TROOT.h"
00038
00039
00040 using namespace edm;
00041 using namespace std;
00042
00043 FourVectorHLTClient::FourVectorHLTClient(const edm::ParameterSet& ps)
00044 {
00045
00046 parameters_=ps;
00047 initialize();
00048
00049 }
00050
00051 FourVectorHLTClient::~FourVectorHLTClient(){
00052
00053 LogDebug("FourVectorHLTClient")<< "FourVectorHLTClient: ending...." ;
00054
00055 }
00056
00057
00058 void FourVectorHLTClient::initialize(){
00059
00060 counterLS_=0;
00061 counterEvt_=0;
00062
00063
00064 dbe_ = Service<DQMStore>().operator->();
00065
00066 processname_ = parameters_.getUntrackedParameter<std::string>("processname","HLT");
00067
00068
00069
00070 sourceDir_ = TString(parameters_.getUntrackedParameter<string>("hltSourceDir",""));
00071
00072
00073
00074
00075 while(sourceDir_.Last('/') == sourceDir_.Length()-1) {
00076 sourceDir_.Remove(sourceDir_.Length()-1);
00077 }
00078 LogDebug("FourVectorHLTClient")<< "Source dir = " << sourceDir_ << endl;
00079
00080 clientDir_ = TString(parameters_.getUntrackedParameter<string>("hltClientDir",""));
00081
00082
00083 while(clientDir_.Last('/') == clientDir_.Length()-1) {
00084 clientDir_.Remove(clientDir_.Length()-1);
00085 }
00086 LogDebug("FourVectorHLTClient")<< "Client dir = " << clientDir_ << endl;
00087
00088 prescaleLS_ = parameters_.getUntrackedParameter<int>("prescaleLS", -1);
00089 LogDebug("FourVectorHLTClient")<< "DQM lumi section prescale = " << prescaleLS_ << " lumi section(s)"<< endl;
00090
00091 prescaleEvt_ = parameters_.getUntrackedParameter<int>("prescaleEvt", -1);
00092 LogDebug("FourVectorHLTClient")<< "DQM event prescale = " << prescaleEvt_ << " events(s)"<< endl;
00093
00094 customEffDir_ = TString(parameters_.getUntrackedParameter<string>("customEffDir","custom-efficiencies"));
00095 LogDebug("FourVectorHLTClient")<< "Custom Efficiencies dir = " << customEffDir_ << endl;
00096
00097 std::vector<edm::ParameterSet> effpaths = parameters_.getParameter<std::vector<edm::ParameterSet> >("effpaths");
00098
00099 std::pair<std::string, std::string> custompathnamepair;
00100 for(std::vector<edm::ParameterSet>::iterator pathconf = effpaths.begin() ; pathconf != effpaths.end();
00101 pathconf++) {
00102 custompathnamepair.first =pathconf->getParameter<std::string>("pathname");
00103 custompathnamepair.second = pathconf->getParameter<std::string>("denompathname");
00104 custompathnamepairs_.push_back(custompathnamepair);
00105
00106
00107 }
00108
00109 pathsSummaryFolder_ = parameters_.getUntrackedParameter ("pathsSummaryFolder",std::string("HLT/FourVector/PathsSummary/"));
00110 pathsSummaryHLTCorrelationsFolder_ = parameters_.getUntrackedParameter ("hltCorrelationsFolder",std::string("HLT/FourVector/PathsSummary/HLT Correlations/"));
00111 pathsSummaryFilterCountsFolder_ = parameters_.getUntrackedParameter ("filterCountsFolder",std::string("HLT/FourVector/PathsSummary/Filters Counts/"));
00112 pathsSummaryFilterEfficiencyFolder_ = parameters_.getUntrackedParameter ("filterEfficiencyFolder",std::string("HLT/FourVector/PathsSummary/Filters Efficiencies/"));
00113
00114 }
00115
00116
00117 void FourVectorHLTClient::beginJob(){
00118
00119 LogDebug("FourVectorHLTClient")<<"[FourVectorHLTClient]: beginJob" << endl;
00120
00121 dbe_ = Service<DQMStore>().operator->();
00122
00123 }
00124
00125
00126 void FourVectorHLTClient::beginRun(const Run& r, const EventSetup& context) {
00127
00128 LogDebug("FourVectorHLTClient")<<"[FourVectorHLTClient]: beginRun" << endl;
00129
00130 bool changed=false;
00131
00132 if (!hltConfig_.init(r, context, processname_, changed)) {
00133
00134 processname_ = "FU";
00135
00136 if (!hltConfig_.init(r, context, processname_, changed)){
00137
00138 LogDebug("FourVectorHLTOffline") << "HLTConfigProvider failed to initialize.";
00139
00140 }
00141
00142
00143
00144
00145 }
00146
00147 }
00148
00149
00150 void FourVectorHLTClient::beginLuminosityBlock(const LuminosityBlock& lumiSeg, const EventSetup& context) {
00151
00152 }
00153
00154 void FourVectorHLTClient::endLuminosityBlock(const edm::LuminosityBlock& lumiSeg, const edm::EventSetup& c){
00155 }
00156
00157
00158
00159
00160 void FourVectorHLTClient::analyze(const Event& e, const EventSetup& context){
00161
00162 counterEvt_++;
00163 if (prescaleEvt_<1) return;
00164 if (prescaleEvt_>0 && counterEvt_%prescaleEvt_ != 0) return;
00165
00166 LogDebug("FourVectorHLTClient")<<"analyze..." << endl;
00167
00168 }
00169
00170
00171 void FourVectorHLTClient::endRun(const Run& r, const EventSetup& context){
00172
00173 LogDebug("FourVectorHLTClient")<<"FourVectorHLTClient:: endLuminosityBlock " << endl;
00174
00175
00176
00178 dbe_->setCurrentFolder(pathsSummaryFolder_.c_str());
00179
00180 std::vector<MonitorElement*> summaryME;
00181 summaryME = dbe_->getContents(pathsSummaryFilterCountsFolder_.c_str());
00182
00183 vector<float> hltPassCount;
00184
00185 for(unsigned int i=0; i< summaryME.size(); i++) {
00186
00187 TString nameME = (summaryME[i])->getName();
00188 LogDebug("FourVectorHLTClient") << "ME = " << nameME << endl;
00189
00190 TString fullPathToME = pathsSummaryFilterCountsFolder_ + nameME;
00191 LogDebug("FourVectorHLTClient") << "fullPathME = " << fullPathToME << endl;
00192
00193 if(nameME.Contains("Filters_")) {
00194
00195
00196 TH1F* MEHist = summaryME[i]->getTH1F() ;
00197 LogDebug("FourVectorHLTClient") << "this is TH1 first bin label = " << MEHist->GetXaxis()->GetBinLabel(1) << endl;
00198 LogDebug("FourVectorHLTClient") << "is this is TH1 = " << fullPathToME << endl;
00199
00200 TString nameMEeff = nameME+"_Eff";
00201 TString titleMEeff = nameME+" Efficiency wrt input to L1";
00202
00203 TH1F* effHist = (TH1F*) MEHist->Clone(nameMEeff.Data());
00204 effHist->SetTitle(titleMEeff.Data());
00205
00206 float firstBinContent = MEHist->GetBinContent(1);
00207
00208 if(firstBinContent !=0 ) {
00209
00210 effHist->Scale(1./firstBinContent);
00211
00212 }
00213 else {
00214
00215 unsigned int nBins = effHist->GetNbinsX();
00216 for(unsigned int bin = 0; bin < nBins+1; bin++) effHist->SetBinContent(bin, 0);
00217
00218 }
00219
00220 dbe_->setCurrentFolder(pathsSummaryFilterEfficiencyFolder_.c_str());
00221
00222 dbe_->book1D(nameMEeff.Data(), effHist);
00223
00224
00225 }
00226
00227 }
00228
00229
00231 vector<string> name;
00232 name.push_back("All");
00233 name.push_back("Muon");
00234 name.push_back("Egamma");
00235 name.push_back("Tau");
00236 name.push_back("JetMET");
00237 name.push_back("Rest");
00238 name.push_back("Special");
00239
00241 vector<string> datasetNames = hltConfig_.datasetNames() ;
00242
00243 for (unsigned int i=0;i<datasetNames.size();i++) {
00244
00245 name.push_back(datasetNames[i]);
00246
00247 }
00248
00249 string fullPathToME;
00250
00251 for (unsigned int i=0;i<name.size();i++) {
00252
00253 fullPathToME = pathsSummaryFolder_ +"HLT_"+name[i]+"_PassPass";
00254 v_ME_HLTPassPass_.push_back( dbe_->get(fullPathToME));
00255
00256 fullPathToME = pathsSummaryHLTCorrelationsFolder_+"HLT_"+name[i]+"_PassPass_Normalized";
00257 v_ME_HLTPassPass_Normalized_.push_back( dbe_->get(fullPathToME));
00258
00259 fullPathToME = pathsSummaryHLTCorrelationsFolder_+"HLT_"+name[i]+"_Pass_Normalized_Any";
00260 v_ME_HLTPass_Normalized_Any_.push_back( dbe_->get(fullPathToME));
00261
00262 }
00263 normalizeHLTMatrix();
00264
00265
00266
00267
00268 TObjArray *hltPathNameColl = new TObjArray(100);
00269 hltPathNameColl->SetOwner();
00270 std::vector<std::string> fullPathHLTFolders;
00271
00272
00274 dbe_->setCurrentFolder(sourceDir_.Data());
00275
00276 fullPathHLTFolders = dbe_->getSubdirs();
00277
00278
00279 LogDebug("FourVectorHLTClient")<<"endRun: sourceDir_(" << sourceDir_.Data() << ") has " << fullPathHLTFolders.size() << " folders. " << endl;
00280
00281
00282 for(unsigned int i=0;i<fullPathHLTFolders.size();i++) {
00283
00284 LogDebug("FourVectorHLTClient")<<"endRun: sourceDir_(" << sourceDir_.Data() << ") folder["<< i << "] = " << fullPathHLTFolders[i] << endl;
00285 TString hltPath = fullPathHLTFolders[i].substr(fullPathHLTFolders[i].rfind('/')+1, fullPathHLTFolders[i].size());
00286
00287
00288 hltPath = removeVersions(hltPath);
00289
00290
00292
00294
00295 TString currEffFolder = clientDir_ + "/" + hltPath + "/" + customEffDir_ + "/";
00296
00297
00298 currEffFolder = removeVersions(currEffFolder);
00299
00300
00301
00302 LogDebug("FourVectorHLTClient")<< "Custom Efficiencies dir path = " << currEffFolder << endl;
00303
00304 dbe_->setCurrentFolder(currEffFolder.Data());
00305
00306
00307 hltMEs = dbe_->getContents(fullPathHLTFolders[i]);
00308 LogDebug("FourVectorHLTClient")<< "Number of MEs for this HLT path = " << hltMEs.size() << endl;
00309
00310
00311
00312 for (std::vector<std::pair<std::string, std::string> >::iterator custompathnamepair = custompathnamepairs_.begin(); custompathnamepair != custompathnamepairs_.end(); ++custompathnamepair)
00313 {
00314
00315
00316
00317
00318
00319
00320
00321 if(!hltPath.Contains(TString(custompathnamepair->first))) continue;
00322
00323 TString numPathName=hltPath;
00324 TString denPathName=TString(custompathnamepair->second);
00325
00326 numPathName = removeVersions(numPathName);
00327
00328
00329
00330 vector<TString> vStage;
00331 vStage.push_back(TString("L1"));
00332 vStage.push_back(TString("On"));
00333 vStage.push_back(TString("Off"));
00334 vStage.push_back(TString("Mc"));
00335 vStage.push_back(TString("L1UM"));
00336 vStage.push_back(TString("OnUM"));
00337 vStage.push_back(TString("OffUM"));
00338 vStage.push_back(TString("McUM"));
00339
00340 vector<TString> vObj;
00341 vObj.push_back(TString("l1Et"));
00342 vObj.push_back(TString("onEt"));
00343 vObj.push_back(TString("offEt"));
00344 vObj.push_back(TString("mcEt"));
00345
00346
00347
00348 for (unsigned int k=0; k<vObj.size();k++) {
00349 for (unsigned int l=0; l<vStage.size();l++) {
00350 for (unsigned int m=0; m<vStage.size();m++) {
00351
00352 TString oldHistPathNum;
00353 TString oldHistPathNumBck;
00354 TString oldHistPathDen;
00355
00356
00357 oldHistPathNum = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+vStage[l]+vStage[m];
00358 oldHistPathNumBck = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+vStage[m]+vStage[l];
00359
00360
00361 TString tempDenString = vStage[l];
00362 tempDenString.ReplaceAll("UM","") ;
00363 oldHistPathDen = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+tempDenString;
00364
00365 MonitorElement *numME = dbe_->get(oldHistPathNum.Data());
00366 MonitorElement *numMEBck = dbe_->get(oldHistPathNumBck.Data());
00367 MonitorElement *denME = dbe_->get(oldHistPathDen.Data());
00368
00369 LogDebug("FourVectorHLTClient")<< " oldHistPathNum = " << oldHistPathNum << endl;
00370 LogDebug("FourVectorHLTClient")<< " oldHistPathNumBck = " << oldHistPathNumBck << endl;
00371 LogDebug("FourVectorHLTClient")<< " oldHistPathDen = " << oldHistPathDen << endl;
00372
00373
00374 if ( numME && denME ) {
00375
00376 LogDebug("FourVectorHLTClient")<< "DID find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00377 << " NUM = " << oldHistPathNum << endl
00378 << " DEN = " << oldHistPathDen << endl;
00379
00380 }
00381 else {
00382
00383 LogDebug("FourVectorHLTClient")<< "Cannot find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00384 << " NUM = " << oldHistPathNum << endl
00385 << " DEN = " << oldHistPathDen << endl;
00386
00387 if ( numMEBck && denME) {
00388
00389 LogDebug("FourVectorHLTClient")<< "DID find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00390 << " NUM = " << oldHistPathNumBck << endl
00391 << " DEN = " << oldHistPathDen << endl;
00392
00393 numME = numMEBck;
00394
00395 }
00396 else {
00397
00398 LogDebug("FourVectorHLTClient")<< "Cannot find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00399 << " NUM = " << oldHistPathNumBck << endl
00400 << " DEN = " << oldHistPathDen << endl;
00401
00402 continue;
00403 }
00404
00405 }
00406
00407
00408 TH1F * numHist = numME->getTH1F();
00409 TH1F * denHist = denME->getTH1F();
00410
00411
00412 TString newHistName = hltPath +"_wrt_" + denPathName +"_"+vObj[k]+"_Eff_"+vStage[m]+"To"+vStage[l];
00413
00414
00415 if(newHistName.Contains("UM")) {
00416
00417 newHistName.ReplaceAll("UM","");
00418 newHistName.Append("_UM");
00419
00420 }
00421
00422 TString newHistTitle = numPathName+" given " + denPathName +" "+vObj[k]+" Eff "+vStage[m]+"To"+vStage[l];
00423
00424
00425 if(newHistTitle.Contains("UM")) {
00426
00427 newHistTitle.ReplaceAll("UM","");
00428 newHistTitle.Append("_UM");
00429
00430 }
00431
00432 TString newHistPath = currEffFolder+newHistName;
00433
00434 LogDebug("FourVectorHLTClient")<< "Will make efficiency histogram " << newHistPath << endl;
00435
00436 TH1F* effHist = (TH1F*) numHist->Clone(newHistName.Data());
00437
00438 effHist->SetTitle(newHistTitle.Data());
00439
00440
00441
00442
00443
00444
00445
00446 calculateRatio(effHist, denHist);
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460 LogDebug("FourVectorHLTClient")<< "Numerator hist " << numHist->GetName() << endl;
00461 LogDebug("FourVectorHLTClient")<< "Denominator hist " << denHist->GetName() << endl;
00462
00463 LogDebug("FourVectorHLTClient")<< "Booking efficiency histogram path " << newHistPath << endl;
00464 LogDebug("FourVectorHLTClient")<< "Booking efficiency histogram name " << newHistName << endl;
00465
00466
00467 dbe_->book1D(newHistName.Data(), effHist);
00468
00469
00470 }
00471 }
00472 }
00473
00474 vObj.clear();
00475 vObj.push_back(TString("l1Etal1Phi"));
00476 vObj.push_back(TString("onEtaonPhi"));
00477 vObj.push_back(TString("offEtaoffPhi"));
00478 vObj.push_back(TString("mcEtamcPhi"));
00479
00480 for (unsigned int k=0; k<vObj.size();k++) {
00481 for (unsigned int l=0; l<vStage.size();l++) {
00482 for (unsigned int m=0; m<vStage.size();m++) {
00483
00484
00485 TString oldHistPathNum;
00486 TString oldHistPathNumBck;
00487 TString oldHistPathDen;
00488
00489
00490 oldHistPathNum = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+vStage[l]+vStage[m];
00491 oldHistPathNumBck = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+vStage[m]+vStage[l];
00492
00493
00494 TString tempDenString = vStage[l];
00495 tempDenString.ReplaceAll("UM","") ;
00496 oldHistPathDen = sourceDir_+"/"+hltPath+"/"+numPathName+"_wrt_"+denPathName+"_"+vObj[k]+tempDenString;
00497
00498 MonitorElement *numME = dbe_->get(oldHistPathNum.Data());
00499 MonitorElement *numMEBck = dbe_->get(oldHistPathNumBck.Data());
00500 MonitorElement *denME = dbe_->get(oldHistPathDen.Data());
00501
00502 LogDebug("FourVectorHLTClient")<< " oldHistPathNum = " << oldHistPathNum << endl;
00503 LogDebug("FourVectorHLTClient")<< " oldHistPathNumBck = " << oldHistPathNumBck << endl;
00504 LogDebug("FourVectorHLTClient")<< " oldHistPathDen = " << oldHistPathDen << endl;
00505
00506
00507 if ( numME && denME ) {
00508
00509 LogDebug("FourVectorHLTClient")<< "DID find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00510 << " NUM = " << oldHistPathNum << endl
00511 << " DEN = " << oldHistPathDen << endl;
00512
00513 }
00514 else {
00515
00516 LogDebug("FourVectorHLTClient")<< "Cannot find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00517 << " NUM = " << oldHistPathNum << endl
00518 << " DEN = " << oldHistPathDen << endl;
00519
00520 if ( numMEBck && denME) {
00521
00522 LogDebug("FourVectorHLTClient")<< "DID find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00523 << " NUM = " << oldHistPathNumBck << endl
00524 << " DEN = " << oldHistPathDen << endl;
00525 numME = numMEBck;
00526
00527 }
00528 else {
00529
00530 LogDebug("FourVectorHLTClient")<< "Cannot find NUM and DEN histograms to derive eff " << vStage[m]<<"To"<<vStage[l]<<" using:" <<endl
00531 << " NUM = " << oldHistPathNumBck << endl
00532 << " DEN = " << oldHistPathDen << endl;
00533
00534 continue;
00535
00536 }
00537
00538 }
00539
00540 TH2F* numHist = numME->getTH2F();
00541 TH2F* denHist = denME->getTH2F();
00542
00543
00544
00545 TString newHistName = hltPath +"_wrt_" + denPathName +"_"+vObj[k]+"_Eff_"+vStage[m]+"To"+vStage[l];
00546
00547
00548 if(newHistName.Contains("UM")) {
00549
00550 newHistName.ReplaceAll("UM","");
00551 newHistName.Append("_UM");
00552
00553 }
00554
00555 TString newHistTitle = numPathName+" given " + denPathName +" "+vObj[k]+" Eff "+vStage[m]+"To"+vStage[l];
00556
00557 if(newHistTitle.Contains("UM")) {
00558
00559 newHistTitle.ReplaceAll("UM","");
00560 newHistTitle.Append("_UM");
00561
00562 }
00563
00564 TString newHistPath = currEffFolder+newHistName;
00565 newHistPath = removeVersions(newHistPath);
00566
00567 LogDebug("FourVectorHLTClient")<< "Will make efficiency histogram " << newHistPath << endl;
00568
00569 TH2F* effHist = (TH2F*) numHist->Clone(newHistName.Data());
00570
00571 effHist->SetTitle(newHistTitle.Data());
00572 effHist->Sumw2();
00573
00574
00575 effHist->Divide(numHist,denHist,1.,1.);
00576
00577
00578
00579 LogDebug("FourVectorHLTClient")<< "Booking efficiency histogram path " << newHistPath << endl;
00580 LogDebug("FourVectorHLTClient")<< "Booking efficiency histogram name " << newHistName << endl;
00581
00582
00583 dbe_->book2D(newHistName.Data(), effHist);
00584
00585 }
00586 }
00587 }
00588
00589 }
00590
00591 }
00592
00593
00594 hltPathNameColl->Delete();
00595
00596 }
00597
00598
00599 void FourVectorHLTClient::endJob(){
00600 }
00601
00602
00603 TH1F * FourVectorHLTClient::get1DHisto(string meName, DQMStore * dbi)
00604 {
00605
00606 MonitorElement * me_ = dbi->get(meName);
00607
00608 if (!me_) {
00609 LogDebug("FourVectorHLTClient")<< "ME NOT FOUND." << endl;
00610 return NULL;
00611 }
00612
00613 return me_->getTH1F();
00614
00615 }
00616
00617
00618 TH2F * FourVectorHLTClient::get2DHisto(string meName, DQMStore * dbi)
00619 {
00620
00621
00622 MonitorElement * me_ = dbi->get(meName);
00623
00624 if (!me_) {
00625 LogDebug("FourVectorHLTClient")<< "ME NOT FOUND." << endl;
00626 return NULL;
00627 }
00628
00629 return me_->getTH2F();
00630 }
00631
00632
00633 TProfile2D * FourVectorHLTClient::get2DProfile(string meName, DQMStore * dbi)
00634 {
00635
00636 MonitorElement * me_ = dbi->get(meName);
00637
00638 if (!me_) {
00639 LogDebug("FourVectorHLTClient")<< "ME NOT FOUND." << endl;
00640 return NULL;
00641 }
00642
00643 return me_->getTProfile2D();
00644 }
00645
00646
00647 TProfile * FourVectorHLTClient::get1DProfile(string meName, DQMStore * dbi)
00648 {
00649
00650 MonitorElement * me_ = dbi->get(meName);
00651
00652 if (!me_) {
00653 LogDebug("FourVectorHLTClient")<< "ME NOT FOUND." << endl;
00654 return NULL;
00655 }
00656
00657 return me_->getTProfile();
00658 }
00659
00660 TString FourVectorHLTClient::removeVersions(TString histVersion) {
00661 for (int ii = 100; ii > 0; ii--) {
00662 string ver = "_v";
00663 string version ="";
00664 stringstream ss;
00665 ss << ver << ii;
00666 ss >> version;
00667
00668 if (histVersion.Contains(version)){
00669 histVersion.ReplaceAll(version,"");
00670 }
00671 }
00672 return histVersion;
00673 }
00674
00675 void FourVectorHLTClient::calculateRatio(TH1F* effHist, TH1F* denHist) {
00676
00677
00678 int nBins= effHist->GetNbinsX();
00679 for (int i=0;i<=nBins;i++) {
00680
00681 float k = effHist->GetBinContent(i);
00682 float N = denHist->GetBinContent(i);
00683
00684 float ratio;
00685 float err;
00686
00687
00688 if(N>0) ratio = k / N;
00689 else ratio = 0;
00690
00691 if(N > 0) {
00692
00693 if(ratio <= 1) {
00694 err = sqrt(ratio*(1-ratio)/N);
00695 }
00696
00697
00698
00699 else {
00700 err = 0;
00701 }
00702
00703 effHist->SetBinContent(i,ratio);
00704 effHist->SetBinError(i,err);
00705
00706 }
00707
00708 }
00709
00710 }
00711
00712
00713 void FourVectorHLTClient::normalizeHLTMatrix() {
00714
00715
00716 for (unsigned int i =0;i<v_ME_HLTPassPass_.size();i++) {
00717
00718 MonitorElement* ME_HLTPassPass_ = v_ME_HLTPassPass_[i];
00719 MonitorElement* ME_HLTPassPass_Normalized_ = v_ME_HLTPassPass_Normalized_[i];
00720 MonitorElement* ME_HLTPass_Normalized_Any_ = v_ME_HLTPass_Normalized_Any_[i];
00721
00722 if(!ME_HLTPassPass_ || !ME_HLTPassPass_Normalized_ || !ME_HLTPass_Normalized_Any_) return;
00723
00724 float passCount = 0;
00725 unsigned int nBinsX = ME_HLTPassPass_->getTH2F()->GetNbinsX();
00726 unsigned int nBinsY = ME_HLTPassPass_->getTH2F()->GetNbinsY();
00727
00728 for(unsigned int binX = 0; binX < nBinsX+1; binX++) {
00729
00730 passCount = ME_HLTPassPass_->getTH2F()->GetBinContent(binX,binX);
00731
00732
00733 for(unsigned int binY = 0; binY < nBinsY+1; binY++) {
00734
00735 if(passCount != 0) {
00736
00737
00738 float normalizedBinContentPassPass = (ME_HLTPassPass_->getTH2F()->GetBinContent(binX,binY))/passCount;
00739
00740
00741 ME_HLTPassPass_Normalized_->getTH2F()->SetBinContent(binX,binY,normalizedBinContentPassPass);
00742
00743
00744 if(binX == nBinsX) {
00745
00746 ME_HLTPass_Normalized_Any_->getTH1F()->SetBinContent(binY,normalizedBinContentPassPass);
00747
00748 }
00749
00750 }
00751 else {
00752
00753 ME_HLTPassPass_Normalized_->getTH2F()->SetBinContent(binX,binY,0);
00754
00755
00756 }
00757
00758 }
00759
00760 }
00761
00762 }
00763
00764 }