19 #include <TDirectory.h>
37 tests_ = ps.
getParameter<std::vector<ParameterSet> >(
"testParams");
39 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called constructor" << endl;}
51 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called destructor" << endl;}
60 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called BeginJob" << endl;}
77 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called endJob" << endl;}
93 cout <<
"[L1TOccupancyClient:] Called beginRun" << endl;
96 file_ = TFile::Open(
"DQM_L1TOccupancyClient_Snapshots_LS.root",
"RECREATE");
105 for (vector<ParameterSet>::iterator it = tests_.begin(); it != tests_.end(); it++) {
108 if((*it).getUntrackedParameter<
string>(
"algoName",
"XYSymmetry")==
"XYSymmetry") {
111 string testName = (*it).getParameter<
string> (
"testName");
113 string histPath = algoParameters.
getParameter<
string>(
"histPath");
116 cout <<
"[L1TOccupancyClient:] Monitored histogram path: " << histPath << endl;
130 if(hservice_->loadHisto(testName,histPath)){
135 hservice_->setMaskedBins(testName,algoParameters.getParameter<vector<ParameterSet> >(
"maskedAreas"));
140 string title = testName;
149 m =
dbe_->
book2D(title.c_str(),hservice_->getDifferentialHistogram(testName));
152 meDifferential[
title] =
m;
157 m =
dbe_->
book1D(title.c_str(),title.c_str(),2500,-.5,2500.-.5);
159 meCertification[
title] =
m;
161 mValidTests.push_back(&(*it));
178 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called endRun()" << endl;}
181 for (std::vector<ParameterSet*>::iterator it = mValidTests.begin(); it != mValidTests.end(); it++) {
185 string test_name = test.
getParameter <
string>(
"testName");
187 if(verbose_) {
cout <<
"[L1TOccupancyClient:] Starting calculations for: " << algo_name <<
" on: " << test_name << endl;}
189 if(algo_name ==
"XYSymmetry") {
194 vector<pair<int,double> > deadChannels;
195 vector<pair<int,double> > statDev;
196 bool enoughStats =
false;
199 hservice_->updateHistogramEndRun(test_name);
202 double dead = xySymmetry(ps,test_name,deadChannels,statDev,enoughStats);
204 str << test_name <<
"_cumu_LS_EndRun";
207 TH2F* cumulative_save = (TH2F*) hservice_->getDifferentialHistogram(test_name)->Clone(str.str().c_str());
209 cumulative_save->SetTitle(str.str().c_str());
211 TDirectory* td = file_->GetDirectory(test_name.c_str());
213 td->cd(
string(test_name+
"_Histos_AllLS").c_str());
215 cumulative_save->Write();
221 printDeadChannels(deadChannels,meResults[test_name]->
getTH2F(),statDev,test_name);
224 TH2F* cumulative_save = (TH2F*) hservice_->getDifferentialHistogram(test_name)->Clone(str.str().c_str());
225 cumulative_save->SetTitle(str.str().c_str());
226 TDirectory* td = file_->GetDirectory((
"DQM_L1TOccupancyClient_Snapshots_LS.root:/"+test_name).c_str());
227 td->cd(
string(test_name+
"_Histos").c_str());
228 cumulative_save->Write();
231 TH2F* h2f = meResults[test_name]->getTH2F();
233 str2 << test_name <<
"_result_LS_EndRun";
234 TH2F* dead_save = (TH2F*) h2f->Clone(str2.str().c_str());
236 td->cd(
string(test_name+
"_Results").c_str());
237 dead_save->SetTitle(str2.str().c_str());
242 meDifferential[test_name]->Reset();
243 meDifferential[test_name]->getTH2F()->Add(hservice_->getDifferentialHistogram(test_name));
245 vector<int> lsCertification = hservice_->getLSCertification(test_name);
248 for(
unsigned int i=0;
i<lsCertification.size();
i++){
249 int bin = meCertification[test_name]->getTH1()->FindBin(lsCertification[
i]);
250 meCertification[test_name]->getTH1()->SetBinContent(bin,1-dead);
254 hservice_->resetHisto(test_name);
256 if(verbose_) {
cout <<
"Now we have enough statstics for " << test_name << endl;}
259 if(verbose_){
cout <<
"we don't have enough statstics for " << test_name << endl;}
262 vector<int> lsCertification = hservice_->getLSCertification(test_name);
265 for(
unsigned int i=0;
i<lsCertification.size();
i++){
266 int bin = meCertification[test_name]->getTH1()->FindBin(lsCertification[
i]);
267 meCertification[test_name]->getTH1()->SetBinContent(bin,-1);
270 }
else {
if(verbose_){
cout <<
"No valid algorithm" << std::endl;}}
273 if(verbose_){file_->Close();}
287 if(verbose_){
cout <<
"[L1TOccupancyClient:] Called beginLuminosityBlock()" << endl;}
303 cout <<
"[L1TOccupancyClient:] Called endLuminosityBlock()" << endl;
304 cout <<
"[L1TOccupancyClient:] Lumisection: " << eventLS << endl;
308 for (std::vector<ParameterSet*>::const_iterator it = mValidTests.begin(); it != mValidTests.end(); it++) {
312 string test_name = test.
getParameter <
string>(
"testName");
314 if(verbose_) {
cout <<
"[L1TOccupancyClient:] Starting calculations for " << algo_name <<
" on:" << test_name << endl;}
316 if(algo_name ==
"XYSymmetry") {
321 vector<pair<int,double> > deadChannels;
322 vector<pair<int,double> > statDev;
323 bool enoughStats =
false;
326 hservice_->updateHistogramEndLS(test_name,histPath,eventLS);
329 double dead = xySymmetry(ps,test_name,deadChannels,statDev,enoughStats);
331 str << test_name <<
"_cumu_LS_" << eventLS;
334 TH2F* cumulative_save = (TH2F*) hservice_->getDifferentialHistogram(test_name)->Clone(str.str().c_str());
335 cumulative_save->SetTitle(str.str().c_str());
336 TDirectory* td = file_->GetDirectory(test_name.c_str());
337 td->cd(
string(test_name+
"_Histos_AllLS").c_str());
338 cumulative_save->Write();
345 printDeadChannels(deadChannels,meResults[test_name]->
getTH2F(),statDev,test_name);
348 TH2F* cumulative_save = (TH2F*) hservice_->getDifferentialHistogram(test_name)->Clone(str.str().c_str());
349 cumulative_save->SetTitle(str.str().c_str());
350 TDirectory* td = file_->GetDirectory((
"DQM_L1TOccupancyClient_Snapshots_LS.root:/"+test_name).c_str());
351 td->cd(
string(test_name+
"_Histos").c_str());
352 cumulative_save->Write();
355 TH2F* h2f = meResults[test_name]->getTH2F();
357 str2 << test_name <<
"_result_LS_" << eventLS;
358 TH2F* dead_save = (TH2F*) h2f->Clone(str2.str().c_str());
360 td->cd(
string(test_name+
"_Results").c_str());
361 dead_save->SetTitle(str2.str().c_str());
366 meDifferential[test_name]->Reset();
367 meDifferential[test_name]->getTH2F()->Add(hservice_->getDifferentialHistogram(test_name));
369 vector<int> lsCertification = hservice_->getLSCertification(test_name);
372 for(
unsigned int i=0;
i<lsCertification.size();
i++){
373 int bin = meCertification[test_name]->getTH1()->FindBin(lsCertification[
i]);
374 meCertification[test_name]->getTH1()->SetBinContent(bin,1-dead);
378 hservice_->resetHisto(test_name);
380 if(verbose_) {
cout <<
"Now we have enough statstics for " << test_name << endl;}
382 }
else{
if(verbose_){
cout <<
"we don't have enough statstics for " << test_name << endl;}}
383 }
else {
if(verbose_){
cout <<
"No valid algorithm" << std::endl;}}
410 vector< pair<int,double> >& deadChannels,
411 vector< pair<int,double> >& statDev,
415 TH2F* diffHist = hservice_->getDifferentialHistogram(iTestName);
419 int nBinsX = diffHist->GetNbinsX();
420 int nBinsY = diffHist->GetNbinsY();
425 int maxBinStrip, centralBinStrip;
427 maxBinStrip = nBinsX;
433 double pAxisSymmetryValue = ps.
getParameter <
double>(
"axisSymmetryValue");
434 getBinCoordinateOnAxisWithValue(diffHist, pAxisSymmetryValue, centralBinStrip, 1);
438 int upBinStrip = centralBinStrip;
439 int lowBinStrip = centralBinStrip;
442 if(nBinsX%2==0){lowBinStrip--;}
445 double* maxAvgs =
new double[maxBinStrip-upBinStrip+1];
447 for(
int i=0,
j=upBinStrip,
k=lowBinStrip;
j<=maxBinStrip;
i++,
j++,
k--) {
448 double avg1 = getAvrg(diffHist,iTestName,pAxis,nBinsY,j,pAverageMode);
449 double avg2 = getAvrg(diffHist,iTestName,pAxis,nBinsY,
k,pAverageMode);
452 if(!hservice_->isStripMasked(iTestName,j,pAxis) && !hservice_->isStripMasked(iTestName,
k,pAxis)) {
458 vector<double> defaultMu0up;
459 defaultMu0up.push_back(13.7655);
460 defaultMu0up.push_back(184.742);
461 defaultMu0up.push_back(50735.3);
462 defaultMu0up.push_back(-97.6793);
464 TF1* tf =
new TF1(
"myFunc",
"[0]*(TMath::Log(x*[1]+[2]))+[3]",10.,11000.);
466 for(
unsigned int i=0;
i<params.size();
i++) {tf->SetParameter(
i,params[
i]);}
467 int statsup = (int)tf->Eval(hservice_->getNBinsHistogram(iTestName));
469 vector<double> defaultMu0low;
470 defaultMu0low.push_back(2.19664);
471 defaultMu0low.push_back(1.94546);
472 defaultMu0low.push_back(-99.3263);
473 defaultMu0low.push_back(19.388);
476 for(
unsigned int i=0;
i<params.size();
i++) {tf->SetParameter(
i,params[
i]);}
477 int statslow = (int)tf->Eval(hservice_->getNBinsHistogram(iTestName));
480 cout <<
"nbins: " << hservice_->getNBinsHistogram(iTestName) << endl;
481 cout <<
"statsup= " << statsup <<
", statslow= " << statslow << endl;
484 enoughStats = TMath::MinElement(nActualStrips,maxAvgs)>
TMath::Max(statsup,statslow);
486 cout <<
"stats: " << TMath::MinElement(nActualStrips,maxAvgs) <<
", statsAvg: " << diffHist->GetEntries()/hservice_->getNBinsHistogram(iTestName) <<
", threshold: " <<
TMath::Max(statsup,statslow) << endl;
492 for(;upBinStrip<=maxBinStrip;upBinStrip++,lowBinStrip--) {
493 double avg = getAvrg(diffHist, iTestName, pAxis, nBinsY, upBinStrip, pAverageMode);
494 compareWithStrip(diffHist,iTestName,lowBinStrip,nBinsY,pAxis,avg,ps,deadChannels);
496 avg = getAvrg(diffHist, iTestName, pAxis, nBinsY, lowBinStrip, pAverageMode);
497 compareWithStrip(diffHist,iTestName,upBinStrip,nBinsY,pAxis,avg,ps,deadChannels);
504 int maxBinStrip, centralBinStrip;
506 maxBinStrip = nBinsY;
511 double pAxisSymmetryValue = ps.
getParameter<
double>(
"axisSymmetryValue");
512 getBinCoordinateOnAxisWithValue(diffHist, pAxisSymmetryValue, centralBinStrip, 2);
517 int lowBinStrip = centralBinStrip, upBinStrip = centralBinStrip;
526 double* maxAvgs =
new double[maxBinStrip-upBinStrip+1];
527 int nActualStrips = 0;
528 for(
int i=0,
j=upBinStrip,
k=lowBinStrip;
j<=maxBinStrip;
i++,
j++,
k--) {
529 double avg1 = getAvrg(diffHist, iTestName, pAxis, nBinsX, j, pAverageMode);
530 double avg2 = getAvrg(diffHist, iTestName, pAxis, nBinsX,
k, pAverageMode);
531 if(!hservice_->isStripMasked(iTestName,j,pAxis) && !hservice_->isStripMasked(iTestName,
k,pAxis)) {
537 vector<double> defaultMu0up;
538 defaultMu0up.push_back(13.7655);
539 defaultMu0up.push_back(184.742);
540 defaultMu0up.push_back(50735.3);
541 defaultMu0up.push_back(-97.6793);
543 vector<double> params = ps.
getUntrackedParameter<std::vector<double> >(
"params_mu0_up",defaultMu0up);
544 TF1* tf =
new TF1(
"myFunc",
"[0]*(TMath::Log(x*[1]+[2]))+[3]",10.,11000.);
545 for(
unsigned int i=0;
i<params.size();
i++) {
546 tf->SetParameter(
i,params[
i]);
548 int statsup = (int)tf->Eval(hservice_->getNBinsHistogram(iTestName));
550 vector<double> defaultMu0low;
551 defaultMu0low.push_back(2.19664);
552 defaultMu0low.push_back(1.94546);
553 defaultMu0low.push_back(-99.3263);
554 defaultMu0low.push_back(19.388);
557 for(
unsigned int i=0;
i<params.size();
i++) {
558 tf->SetParameter(
i,params[
i]);
560 int statslow = (int)tf->Eval(hservice_->getNBinsHistogram(iTestName));
562 cout <<
"statsup= " << statsup <<
", statslow= " << statslow << endl;
564 enoughStats = TMath::MinElement(nActualStrips,maxAvgs)>
TMath::Max(statsup,statslow);
566 cout <<
"stats: " << TMath::MinElement(nActualStrips,maxAvgs) <<
", statsAvg: " << diffHist->GetEntries()/hservice_->getNBinsHistogram(iTestName) <<
", threshold: " <<
TMath::Max(statsup,statslow) << endl;
572 for(;upBinStrip<=maxBinStrip;upBinStrip++,lowBinStrip--) {
573 double avg = getAvrg(diffHist, iTestName, pAxis, nBinsX, upBinStrip, pAverageMode);
574 compareWithStrip(diffHist,iTestName, lowBinStrip,nBinsX,pAxis,avg,ps,deadChannels);
576 avg = getAvrg(diffHist, iTestName, pAxis, nBinsX, lowBinStrip, pAverageMode);
577 compareWithStrip(diffHist,iTestName, upBinStrip,nBinsX,pAxis,avg,ps,deadChannels);
581 else {
if(verbose_){
cout <<
"Invalid axis" << endl;}}
583 return (deadChannels.size()-hservice_->getNBinsMasked(iTestName))*1.0/hservice_->getNBinsHistogram(iTestName);
604 TH2F*
histo = (TH2F*) iHist->Clone();
606 std::vector<double>
values;
615 marked = hservice_->maskBins(iTestName,histo,iBinStrip,iAxis);
616 proj = histo->ProjectionX();
617 avg = proj->GetBinContent(iBinStrip)/(iNBins-marked);
622 marked = hservice_->maskBins(iTestName,histo,iBinStrip,iAxis);
623 proj = histo->ProjectionY(
"_py",iBinStrip,iBinStrip);
624 for(
int i=0;
i<iNBins;
i++) {
625 values.push_back(proj->GetBinContent(
i+1));
627 avg = TMath::Median(iNBins,&values[0]);
630 if(verbose_){
cout <<
"Invalid averaging mode!" << endl;}
639 marked = hservice_->maskBins(iTestName,histo,iBinStrip,iAxis);
640 proj = histo->ProjectionY();
641 avg = proj->GetBinContent(iBinStrip)/(iNBins-marked);
645 marked = hservice_->maskBins(iTestName,histo,iBinStrip,iAxis);
646 proj = histo->ProjectionX(
"_px",iBinStrip,iBinStrip);
647 for(
int i=0;
i<iNBins;
i++) {
648 values.push_back(proj->GetBinContent(
i+1));
651 avg = TMath::Median(iNBins,&values[0]);
654 if(verbose_) {
cout <<
"invalid averaging mode!" << endl;}
659 if(verbose_) {
cout <<
"invalid axis" << endl;}
678 oHistDeadChannels->Reset();
679 if(verbose_) {
cout <<
"suspect or masked channels of " << iTestName <<
": ";}
685 for (std::vector<pair<int,double> >::const_iterator it = iDeadChannels.begin(); it != iDeadChannels.end(); it++) {
687 int bin = (*it).first;
688 oHistDeadChannels->GetBinXYZ(bin,x,y,z);
690 if(hservice_->isMasked(iTestName,x,y)){
691 oHistDeadChannels->SetBinContent(bin,-1);
692 if(verbose_){printf(
"(%4i,%4i) Masked\n",x,y);}
695 oHistDeadChannels->SetBinContent(bin, 1);
696 if(verbose_){printf(
"(%4i,%4i) Failed test\n",x,y);}
701 for (std::vector<pair<int,double> >::const_iterator it = statDev.begin(); it != statDev.end(); it++) {
702 double dev = (*it).second;
708 cout <<
"total number of suspect channels: " << (iDeadChannels.size()-(hservice_->getNBinsMasked(iTestName))) << endl;
735 TF1* fmuup =
new TF1(
"fmuup" ,
"TMath::Log(TMath::PoissonI(x,[0])/TMath::PoissonI(x,[1]))",-10000.,10000.);
736 TF1* fmulow =
new TF1(
"fmulow",
"TMath::Log(TMath::PoissonI(x,[0])/TMath::PoissonI(x,[1]))",-10000.,10000.);
738 fmuup ->SetParameter(1,iAvg);
740 fmulow->SetParameter(1,iAvg);
742 TF1* fchi =
new TF1(
"fchi",
"[0]*x**2+[1]*x+[2]",0.,1500.);
745 vector<double> defaultChi2up;
746 defaultChi2up.push_back(5.45058
e-05);
747 defaultChi2up.push_back(0.268756);
748 defaultChi2up.push_back(-11.7515);
751 for(
unsigned int i=0;
i<params.size();
i++){fchi->SetParameter(
i,params[
i]);}
752 double sigma_up = fchi->Eval(iAvg);
755 vector<double> defaultChi2low;
756 defaultChi2low.push_back(4.11095
e-05);
757 defaultChi2low.push_back(0.577451);
758 defaultChi2low.push_back(-10.378);
761 for(
unsigned int i=0;
i<params.size();
i++){fchi->SetParameter(
i,params[
i]);}
762 double sigma_low = fchi->Eval(iAvg);
764 if(verbose_){
cout <<
"binstrip= " << iBinStrip <<
", sigmaup= " << sigma_up <<
", sigmalow= " << sigma_low << endl;}
766 for(
int i=1;
i<=iNBins;
i++) {
768 cout <<
" " <<
i <<
" binContent: up:" << fmuup ->Eval(iHist->GetBinContent(iBinStrip,
i))
769 <<
" low: " << fmulow->Eval(iHist->GetBinContent(iBinStrip,
i)) << endl;
773 double muup = fmuup ->Eval(iHist->GetBinContent(iBinStrip,
i));
774 double mulow = fmulow->Eval(iHist->GetBinContent(iBinStrip,
i));
777 if(hservice_->isMasked(iTestName,iBinStrip,
i)) {
778 oChannels.push_back(pair<int,double>(iHist->GetBin(iBinStrip,
i),-1.0));
781 else if(muup > sigma_up ||
786 oChannels.push_back(pair<int,double>(iHist->GetBin(iBinStrip,
i),
abs(iHist->GetBinContent(iBinStrip,
i)-iAvg)/iAvg));
794 TF1* fmuup =
new TF1(
"fmuup" ,
"TMath::Log(TMath::PoissonI(x,[0])/TMath::PoissonI(x,[1]))",-10000.,10000.);
795 TF1* fmulow =
new TF1(
"fmulow",
"TMath::Log(TMath::PoissonI(x,[0])/TMath::PoissonI(x,[1]))",-10000.,10000.);
797 fmuup ->SetParameter(1,iAvg);
799 fmulow->SetParameter(1,iAvg);
801 TF1* fchi =
new TF1(
"fchi",
"[0]*x**2+[1]*x+[2]",0.,1500.);
804 vector<double> defaultChi2up;
805 defaultChi2up.push_back(5.45058
e-05);
806 defaultChi2up.push_back(0.268756);
807 defaultChi2up.push_back(-11.7515);
810 for(
unsigned int i=0;
i<params.size();
i++){fchi->SetParameter(
i,params[
i]);}
811 double sigma_up = fchi->Eval(iAvg);
814 vector<double> defaultChi2low;
815 defaultChi2low.push_back(4.11095
e-05);
816 defaultChi2low.push_back(0.577451);
817 defaultChi2low.push_back(-10.378);
820 for(
unsigned int i=0;
i<params.size();
i++){fchi->SetParameter(
i,params[
i]);}
821 double sigma_low = fchi->Eval(iAvg);
823 if(verbose_) {
cout <<
"binstrip= " << iBinStrip <<
", sigmaup= " << sigma_up <<
", sigmalow= " << sigma_low << endl;}
825 for(
int i=1;
i<=iNBins;
i++) {
827 cout <<
" " <<
i <<
" binContent: up:" << fmuup ->Eval(iHist->GetBinContent(
i,iBinStrip))
828 <<
" low: " << fmulow->Eval(iHist->GetBinContent(
i,iBinStrip)) << endl;
832 double muup = fmuup ->Eval(iHist->GetBinContent(
i,iBinStrip));
833 double mulow = fmulow->Eval(iHist->GetBinContent(
i,iBinStrip));
836 if(hservice_->isMasked(iTestName,
i,iBinStrip)) {
837 oChannels.push_back(pair<int,double>(iHist->GetBin(iBinStrip,
i),-1.0));
840 else if(muup > sigma_up ||
845 oChannels.push_back(pair<int,double>(iHist->GetBin(
i,iBinStrip),
abs(iHist->GetBinContent(
i,iBinStrip)-iAvg)/iAvg));
849 else {
if(verbose_) {
cout <<
"invalid axis" << endl;}}
865 int nBinsX = iHist->GetNbinsX();
866 int nBinsY = iHist->GetNbinsY();
869 int global = iHist->GetXaxis()->FindFixBin(iValue);
872 if(global > nBinsX*nBinsY) {global = iHist->GetXaxis()->GetLast();}
876 iHist->GetBinXYZ(global,oBinCoordinate,y,z);
879 int global = iHist->GetYaxis()->FindFixBin(iValue);
882 if(global > nBinsX*nBinsY) {global = iHist->GetYaxis()->GetLast();}
886 iHist->GetBinXYZ(global,x,oBinCoordinate,z);
LuminosityBlockID id() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void analyze(const edm::Event &e, const edm::EventSetup &c)
Fake Analyze.
void beginRun(const edm::Run &r, const edm::EventSetup &c)
BeginRun.
void getBinCoordinateOnAxisWithValue(TH2F *h2f, double content, int &coord, int axis)
virtual ~L1TOccupancyClient()
Destructor.
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
void rmdir(const std::string &fullpath)
#define DEFINE_FWK_MODULE(type)
void beginJob(void)
BeginJob.
int compareWithStrip(TH2F *histo, std::string test, int binStrip, int nBins, int axis, double avg, edm::ParameterSet ps, std::vector< std::pair< int, double > > &deadChannels)
double getAvrg(TH2F *h2f, std::string test, int axis, int nBins, int binStrip, int avrgMode)
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
double xySymmetry(edm::ParameterSet ps, std::string test_name, std::vector< std::pair< int, double > > &deadChannels, std::vector< std::pair< int, double > > &statDev, bool &enoughStats)
void endRun(const edm::Run &r, const edm::EventSetup &c)
void setTitle(const std::string &title)
set (ie. change) histogram/profile title
LuminosityBlockNumber_t luminosityBlock() const
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &context)
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
void printDeadChannels(std::vector< std::pair< int, double > > deadChannels, TH2F *h2f, std::vector< std::pair< int, double > > statDev, std::string test_name)
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
void Reset(void)
reset ME (ie. contents, errors, etc)
void setCurrentFolder(const std::string &fullpath)
L1TOccupancyClient(const edm::ParameterSet &ps)
Constructor.