CMS 3D CMS Logo

Public Member Functions | Private Attributes

HcalDetDiagNoiseMonitorClient Class Reference

#include <HcalDetDiagNoiseMonitorClient.h>

Inheritance diagram for HcalDetDiagNoiseMonitorClient:
HcalBaseDQClient

List of all members.

Public Member Functions

void analyze (void)
void beginJob (void)
void beginRun (void)
void calculateProblems (void)
void cleanup (void)
void endJob (void)
void endRun (void)
bool hasErrors_Temp (void)
bool hasOther_Temp (void)
bool hasWarnings_Temp (void)
 HcalDetDiagNoiseMonitorClient (std::string myname)
 HcalDetDiagNoiseMonitorClient ()
 Constructors.
 HcalDetDiagNoiseMonitorClient (std::string myname, const edm::ParameterSet &ps)
void setup (void)
bool test_enabled (void)
void updateChannelStatus (std::map< HcalDetId, unsigned int > &myqual)
 ~HcalDetDiagNoiseMonitorClient ()
 Destructor.

Private Attributes

int nevts_

Detailed Description

Definition at line 8 of file HcalDetDiagNoiseMonitorClient.h.


Constructor & Destructor Documentation

HcalDetDiagNoiseMonitorClient::HcalDetDiagNoiseMonitorClient ( ) [inline]

Constructors.

Definition at line 13 of file HcalDetDiagNoiseMonitorClient.h.

References HcalBaseDQClient::name_.

{name_="";};
HcalDetDiagNoiseMonitorClient::HcalDetDiagNoiseMonitorClient ( std::string  myname)

Definition at line 20 of file HcalDetDiagNoiseMonitorClient.cc.

References HcalBaseDQClient::name_.

{
  name_=myname;
}
HcalDetDiagNoiseMonitorClient::HcalDetDiagNoiseMonitorClient ( std::string  myname,
const edm::ParameterSet ps 
)

Definition at line 25 of file HcalDetDiagNoiseMonitorClient.cc.

References HcalBaseDQClient::badChannelStatusMask_, HcalBaseDQClient::cloneME_, HcalBaseDQClient::debug_, HcalBaseDQClient::enableCleanup_, edm::ParameterSet::getUntrackedParameter(), HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::minevents_, HcalBaseDQClient::name_, HcalBaseDQClient::prefixME_, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, HcalBaseDQClient::subdir_, and HcalBaseDQClient::validHtmlOutput_.

{
  name_=myname;
  enableCleanup_         = ps.getUntrackedParameter<bool>("enableCleanup",false);
  debug_                 = ps.getUntrackedParameter<int>("debug",0);
  prefixME_              = ps.getUntrackedParameter<std::string>("subSystemFolder","Hcal/");
  if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
    prefixME_.append("/");
  subdir_                = ps.getUntrackedParameter<std::string>("DetDiagNoiseMonitorFolder","DetDiagNoiseMonitor_Hcal/"); // DetDiagNoiseMonitor_Hcal/
  if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
    subdir_.append("/");
  subdir_=prefixME_+subdir_;

  validHtmlOutput_       = ps.getUntrackedParameter<bool>("DetDiagNoiseMonitor_validHtmlOutput",true);
  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
  badChannelStatusMask_   = ps.getUntrackedParameter<int>("DetDiagNoiseMonitor_BadChannelStatusMask",
                                                          ps.getUntrackedParameter<int>("BadChannelStatusMask",0));
  
  minerrorrate_ = ps.getUntrackedParameter<double>("DetDiagNoiseMonitor_minerrorrate",
                                                   ps.getUntrackedParameter<double>("minerrorrate",0.05));
  minevents_    = ps.getUntrackedParameter<int>("DetDiagNoiseMonitor_minevents",
                                                ps.getUntrackedParameter<int>("minevents",1));
  ProblemCells=0;
  ProblemCellsByDepth=0;
}
HcalDetDiagNoiseMonitorClient::~HcalDetDiagNoiseMonitorClient ( )

Destructor.


Member Function Documentation

void HcalDetDiagNoiseMonitorClient::analyze ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 51 of file HcalDetDiagNoiseMonitorClient.cc.

References calculateProblems(), gather_cfg::cout, and HcalBaseDQClient::debug_.

Referenced by endRun().

{
  if (debug_>2) std::cout <<"\tHcalDetDiagNoiseMonitorClient::analyze()"<<std::endl;
  calculateProblems();
}
void HcalDetDiagNoiseMonitorClient::beginJob ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 187 of file HcalDetDiagNoiseMonitorClient.cc.

References gather_cfg::cout, HcalBaseDQClient::debug_, HcalBaseDQClient::dqmStore_, cmsCodeRules::cppFunctionSkipper::operator, and DQMStore::showDirStructure().

{
  dqmStore_ = edm::Service<DQMStore>().operator->();
  if (debug_>0) 
    {
      std::cout <<"<HcalDetDiagNoiseMonitorClient::beginJob()>  Displaying dqmStore directory structure:"<<std::endl;
      dqmStore_->showDirStructure();
    }
}
void HcalDetDiagNoiseMonitorClient::beginRun ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 198 of file HcalDetDiagNoiseMonitorClient.cc.

References DQMStore::book2D(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, HcalBaseDQClient::dqmStore_, HcalBaseDQClient::enoughevents_, MonitorElement::getName(), i, nevts_, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, HcalBaseDQClient::problemnames_, DQMStore::setCurrentFolder(), EtaPhiHists::setup(), and HcalBaseDQClient::subdir_.

{
  enoughevents_=false;
  if (!dqmStore_) 
    {
      if (debug_>0) std::cout <<"<HcalDetDiagNoiseMonitorClient::beginRun> dqmStore does not exist!"<<std::endl;
      return;
    }
  dqmStore_->setCurrentFolder(subdir_);
  problemnames_.clear();

  // Put the appropriate name of your problem summary here
  ProblemCells=dqmStore_->book2D(" ProblemDetDiagNoiseMonitor",
                                 " Problem DetDiagNoiseMonitor Rate for all HCAL;ieta;iphi",
                                 85,-42.5,42.5,
                                 72,0.5,72.5);
  problemnames_.push_back(ProblemCells->getName());
  if (debug_>1)
    std::cout << "Tried to create ProblemCells Monitor Element in directory "<<subdir_<<"  \t  Failed?  "<<(ProblemCells==0)<<std::endl;
  dqmStore_->setCurrentFolder(subdir_+"problem_DetDiagNoiseMonitor");
  ProblemCellsByDepth = new EtaPhiHists();
  ProblemCellsByDepth->setup(dqmStore_," Problem DetDiagNoiseMonitor Rate");
  for (unsigned int i=0; i<ProblemCellsByDepth->depth.size();++i)
    problemnames_.push_back(ProblemCellsByDepth->depth[i]->getName());
  nevts_=0;
}
void HcalDetDiagNoiseMonitorClient::calculateProblems ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 57 of file HcalDetDiagNoiseMonitorClient.cc.

References HcalBaseDQClient::badstatusmap, CalcIeta(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, HcalBaseDQClient::dqmStore_, HcalBaseDQClient::enoughevents_, eta(), MonitorElement::Fill(), FillUnphysicalHEHFBins(), MonitorElement::getBinContent(), MonitorElement::getTH2F(), HcalBarrel, HcalEmpty, HcalEndcap, HcalEtaPhiHistNames(), HcalForward, HcalOuter, isHB(), isHE(), isHF(), isHO(), min, HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::name(), phi, HcalBaseDQClient::ProblemCells, HcalBaseDQClient::ProblemCellsByDepth, MonitorElement::Reset(), and MonitorElement::setBinContent().

Referenced by analyze().

{
 if (debug_>2) std::cout <<"\t\tHcalDetDiagNoiseMonitorClient::calculateProblems()"<<std::endl;
  if(!dqmStore_) return;
  double totalevents=0;
  int etabins=0, phibins=0, zside=0;
  double problemvalue=0;

  // Clear away old problems
  if (ProblemCells!=0)
    {
      ProblemCells->Reset();
      (ProblemCells->getTH2F())->SetMaximum(1.05);
      (ProblemCells->getTH2F())->SetMinimum(0.);
    }
  for  (unsigned int d=0;ProblemCellsByDepth!=0 && d<ProblemCellsByDepth->depth.size();++d)
    {
      if (ProblemCellsByDepth->depth[d]!=0) 
        {
          ProblemCellsByDepth->depth[d]->Reset();
          (ProblemCellsByDepth->depth[d]->getTH2F())->SetMaximum(1.05);
          (ProblemCellsByDepth->depth[d]->getTH2F())->SetMinimum(0.);
        }
    }
  enoughevents_=true;
  // Get histograms that are used in testing
  // currently none used,

  std::vector<std::string> name = HcalEtaPhiHistNames();

  // This is a sample of how to get a histogram from the task that can then be used for evaluation purposes
  /*
  TH2F* BadTiming[4];
  TH2F* BadEnergy[4];
  MonitorElement* me;
  for (int i=0;i<4;++i)
    {
      std::string s=subdir_+name[i]+" Problem Bad Laser Timing";
      me=dqmStore_->get(s.c_str());
      if (me!=0) BadTiming[i]=HcalUtilsClient::getHisto<TH2F*>(me, cloneME_, BadTiming[i], debug_);
      else if (debug_>0) std::cout <<"<HcalDetDiagNoiseMonitorClient::analyze> could not get histogram '"<<s<<"'"<<std::endl;
      s=subdir_+name[i]+" Problem Bad Laser Energy";
      me=dqmStore_->get(s.c_str());
      if (me!=0) BadEnergy[i]=HcalUtilsClient::getHisto<TH2F*>(me, cloneME_, BadEnergy[i], debug_);
      else if (debug_>0) std::cout <<"<HcalDetDiagNoiseMonitorClient::analyze> could not get histogram '"<<s<<"'"<<std::endl;
    }      
  */

  // Because we're clearing and re-forming the problem cell histogram here, we don't need to do any cute
  // setting of the underflow bin to 0, and we can plot results as a raw rate between 0-1.
  
  for (unsigned int d=0;ProblemCellsByDepth!=0 && d<ProblemCellsByDepth->depth.size();++d)
    {
      if (ProblemCellsByDepth->depth[d]==0) continue;
    
      //totalevents=DigiPresentByDepth[d]->GetBinContent(0);
      totalevents=0;
      // Check underflow bins for events processed
      /*
      if (BadTiming[d]!=0) totalevents = BadTiming[d]->GetBinContent(0);
      else if (BadEnergy[d]!=0) totalevents = BadEnergy[d]->GetBinContent(0);
      */
      //if (totalevents==0 || totalevents<minevents_) continue;
      
      totalevents=1; // temporary value pending removal of histogram normalization from tasks

      etabins=(ProblemCellsByDepth->depth[d]->getTH2F())->GetNbinsX();
      phibins=(ProblemCellsByDepth->depth[d]->getTH2F())->GetNbinsY();
      for (int eta=0;eta<etabins;++eta)
        {
          int ieta=CalcIeta(eta,d+1);
          if (ieta==-9999) continue;
          for (int phi=0;phi<phibins;++phi)
            {
              problemvalue=0;
              /*
              if (BadTiming[d]!=0) problemvalue += BadTiming[d]->GetBinContent(eta+1,phi+1)*1./totalevents;
              else if (BadEnergy[d]!=0) problemvalue += BadEnergy[d]->GetBinContent(eta+1,phi+1)*1./totalevents;
              */
              if (problemvalue==0) continue;
              // problem value is a rate; we can normalize it here
              problemvalue = std::min(1.,problemvalue);
              
              zside=0;
              if (isHF(eta,d+1)) // shift ieta by 1 for HF
                ieta<0 ? zside = -1 : zside = 1;

              // For problem cells that exceed our allowed rate,
              // set the values to -1 if the cells are already marked in the status database
              if (problemvalue>minerrorrate_)
                {
                  HcalSubdetector subdet=HcalEmpty;
                  if (isHB(eta,d+1))subdet=HcalBarrel;
                  else if (isHE(eta,d+1)) subdet=HcalEndcap;
                  else if (isHF(eta,d+1)) subdet=HcalForward;
                  else if (isHO(eta,d+1)) subdet=HcalOuter;
                  HcalDetId hcalid(subdet, ieta, phi+1, (int)(d+1));
                  if (badstatusmap.find(hcalid)!=badstatusmap.end())
                    problemvalue=999;           
                }

              ProblemCellsByDepth->depth[d]->setBinContent(eta+1,phi+1,problemvalue);
              if (ProblemCells!=0) ProblemCells->Fill(ieta+zside,phi+1,problemvalue);
            } // loop on phi
        } // loop on eta
    } // loop on depth

  if (ProblemCells==0)
    {
      if (debug_>0) std::cout <<"<HcalDetDiagNoiseMonitorClient::analyze> ProblemCells histogram does not exist!"<<std::endl;
      return;
    }

  // Normalization of ProblemCell plot, in the case where there are errors in multiple depths
  etabins=(ProblemCells->getTH2F())->GetNbinsX();
  phibins=(ProblemCells->getTH2F())->GetNbinsY();
  for (int eta=0;eta<etabins;++eta)
    {
      for (int phi=0;phi<phibins;++phi)
        {
          if (ProblemCells->getBinContent(eta+1,phi+1)>1. && ProblemCells->getBinContent(eta+1,phi+1)<999)
            ProblemCells->setBinContent(eta+1,phi+1,1.);
        }
    }

  FillUnphysicalHEHFBins(*ProblemCellsByDepth);
  FillUnphysicalHEHFBins(ProblemCells);
  return;
}
void HcalDetDiagNoiseMonitorClient::cleanup ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 228 of file HcalDetDiagNoiseMonitorClient.cc.

{}
void HcalDetDiagNoiseMonitorClient::endJob ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 196 of file HcalDetDiagNoiseMonitorClient.cc.

{}
void HcalDetDiagNoiseMonitorClient::endRun ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 225 of file HcalDetDiagNoiseMonitorClient.cc.

References analyze().

{analyze();}
bool HcalDetDiagNoiseMonitorClient::hasErrors_Temp ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 230 of file HcalDetDiagNoiseMonitorClient.cc.

References CalcIeta(), gather_cfg::cout, HcalBaseDQClient::debug_, EtaPhiHists::depth, MonitorElement::getTH2F(), HcalBaseDQClient::minerrorrate_, HcalBaseDQClient::ProblemCells, and HcalBaseDQClient::ProblemCellsByDepth.

{
  if (!ProblemCells)
    {
      if (debug_>1) std::cout <<"<HcalDetDiagNoiseMonitorClient::hasErrors_Temp>  ProblemCells histogram does not exist!"<<std::endl;
      return false;
    }
  int problemcount=0;
  int ieta=-9999;

  for (int depth=0;depth<4; ++depth)
    {
      int etabins  = (ProblemCells->getTH2F())->GetNbinsX();
      int phibins  = (ProblemCells->getTH2F())->GetNbinsY();
      for (int hist_eta=0;hist_eta<etabins;++hist_eta)
        {
          for (int hist_phi=0; hist_phi<phibins;++hist_phi)
            {
              ieta=CalcIeta(hist_eta,depth+1);
              if (ieta==-9999) continue;
              if (ProblemCellsByDepth->depth[depth]==0)
                  continue;
              if (ProblemCellsByDepth->depth[depth]->getBinContent(hist_eta,hist_phi)>minerrorrate_)
                ++problemcount;

            } // for (int hist_phi=1;...)
        } // for (int hist_eta=1;...)
    } // for (int depth=0;...)

  if (problemcount>0) return true;
  return false;
}
bool HcalDetDiagNoiseMonitorClient::hasOther_Temp ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 264 of file HcalDetDiagNoiseMonitorClient.cc.

{return false;}
bool HcalDetDiagNoiseMonitorClient::hasWarnings_Temp ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 263 of file HcalDetDiagNoiseMonitorClient.cc.

{return false;}
void HcalDetDiagNoiseMonitorClient::setup ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 227 of file HcalDetDiagNoiseMonitorClient.cc.

{}
bool HcalDetDiagNoiseMonitorClient::test_enabled ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 265 of file HcalDetDiagNoiseMonitorClient.cc.

{return true;}
void HcalDetDiagNoiseMonitorClient::updateChannelStatus ( std::map< HcalDetId, unsigned int > &  myqual) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 268 of file HcalDetDiagNoiseMonitorClient.cc.

{
  // This gets called by HcalMonitorClient
  // trigger primitives don't yet contribute to channel status (though they could...)
  // see dead or hot cell code for an example

} //void HcalDetDiagNoiseMonitorClient::updateChannelStatus

Member Data Documentation

Definition at line 36 of file HcalDetDiagNoiseMonitorClient.h.

Referenced by beginRun().