CMS 3D CMS Logo

Public Member Functions | Private Attributes

HcalDetDiagLaserClient Class Reference

#include <HcalDetDiagLaserClient.h>

Inheritance diagram for HcalDetDiagLaserClient:
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)
 HcalDetDiagLaserClient ()
 Constructors.
 HcalDetDiagLaserClient (std::string myname)
 HcalDetDiagLaserClient (std::string myname, const edm::ParameterSet &ps)
void htmlOutput (std::string)
void setup (void)
bool test_enabled (void)
void updateChannelStatus (std::map< HcalDetId, unsigned int > &myqual)
bool validHtmlOutput ()
 ~HcalDetDiagLaserClient ()
 Destructor.

Private Attributes

int nevts_
int status

Detailed Description

Definition at line 8 of file HcalDetDiagLaserClient.h.


Constructor & Destructor Documentation

HcalDetDiagLaserClient::HcalDetDiagLaserClient ( ) [inline]

Constructors.

Definition at line 13 of file HcalDetDiagLaserClient.h.

References HcalBaseDQClient::name_.

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

Definition at line 37 of file HcalDetDiagLaserClient.cc.

References ntuplemaker::status.

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

Definition at line 42 of file HcalDetDiagLaserClient.cc.

References edm::ParameterSet::getUntrackedParameter(), and prefixME_.

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

  validHtmlOutput_       = ps.getUntrackedParameter<bool>("DetDiagLaser_validHtmlOutput",true);
  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
  badChannelStatusMask_   = ps.getUntrackedParameter<int>("DetDiagLaser_BadChannelStatusMask",
                                                          ps.getUntrackedParameter<int>("BadChannelStatusMask",0));
  
  minerrorrate_ = ps.getUntrackedParameter<double>("DetDiagLaser_minerrorrate",
                                                   ps.getUntrackedParameter<double>("minerrorrate",0.05));
  minevents_    = ps.getUntrackedParameter<int>("DetDiagLaser_minevents",
                                                ps.getUntrackedParameter<int>("minevents",1));
  Online_                = ps.getUntrackedParameter<bool>("online",false);

  ProblemCells=0;
  ProblemCellsByDepth=0;
}
HcalDetDiagLaserClient::~HcalDetDiagLaserClient ( )

Destructor.


Member Function Documentation

void HcalDetDiagLaserClient::analyze ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 70 of file HcalDetDiagLaserClient.cc.

References gather_cfg::cout.

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

Reimplemented from HcalBaseDQClient.

Definition at line 202 of file HcalDetDiagLaserClient.cc.

References gather_cfg::cout, and cmsCodeRules::cppFunctionSkipper::operator.

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

Reimplemented from HcalBaseDQClient.

Definition at line 213 of file HcalDetDiagLaserClient.cc.

References gather_cfg::cout, and i.

{
  enoughevents_=false;
  if (!dqmStore_) 
    {
      if (debug_>0) std::cout <<"<HcalDetDiagLaserClient::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(" ProblemDetDiagLaser",
                                 " Problem DetDiagLaser 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_DetDiagLaser");
  ProblemCellsByDepth = new EtaPhiHists();
  ProblemCellsByDepth->setup(dqmStore_," Problem DetDiagLaser Rate");
  for (unsigned int i=0; i<ProblemCellsByDepth->depth.size();++i)
    problemnames_.push_back(ProblemCellsByDepth->depth[i]->getName());
  nevts_=0;
}
void HcalDetDiagLaserClient::calculateProblems ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 76 of file HcalDetDiagLaserClient.cc.

References HcalObjRepresent::CalcIeta(), gather_cfg::cout, eta(), HcalObjRepresent::FillUnphysicalHEHFBins(), HcalBarrel, HcalEmpty, HcalEndcap, HcalEtaPhiHistNames(), HcalForward, HcalOuter, i, isHB(), isHE(), isHF(), isHO(), min, mergeVDriftHistosByStation::name, phi, and asciidump::s.

{
 if (debug_>2) std::cout <<"\t\tHcalDetDiagLaserClient::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;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)
    {
      BadTiming[i]=0;
      BadEnergy[i]=0;
      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 <<"<HcalDetDiagLaserClient::calculateProblems> 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 <<"<HcalDetDiagLaserClient::calculateProblems> 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;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);
      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;
              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 = 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 <<"<HcalDetDiagLaserClient::calculateProblems> ProblemCells histogram does not exist!"<<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 HcalDetDiagLaserClient::cleanup ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 243 of file HcalDetDiagLaserClient.cc.

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

Reimplemented from HcalBaseDQClient.

Definition at line 211 of file HcalDetDiagLaserClient.cc.

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

Reimplemented from HcalBaseDQClient.

Definition at line 240 of file HcalDetDiagLaserClient.cc.

References python::Vispa::Share::Profiling::analyze().

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

Reimplemented from HcalBaseDQClient.

Definition at line 245 of file HcalDetDiagLaserClient.cc.

References HcalObjRepresent::CalcIeta(), gather_cfg::cout, and ntuplemaker::status.

{
   if(status&2) return true;
    return false;

  if (!ProblemCells)
    {
      if (debug_>1) std::cout <<"<HcalDetDiagLaserClient::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 HcalDetDiagLaserClient::hasOther_Temp ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 285 of file HcalDetDiagLaserClient.cc.

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

Reimplemented from HcalBaseDQClient.

Definition at line 281 of file HcalDetDiagLaserClient.cc.

References ntuplemaker::status.

                                                 {
    if(status&1) return true;
    return false;
}
void HcalDetDiagLaserClient::htmlOutput ( std::string  ) [virtual]

Reimplemented from HcalBaseDQClient.

void HcalDetDiagLaserClient::setup ( void  ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 242 of file HcalDetDiagLaserClient.cc.

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

Reimplemented from HcalBaseDQClient.

Definition at line 286 of file HcalDetDiagLaserClient.cc.

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

Reimplemented from HcalBaseDQClient.

Definition at line 289 of file HcalDetDiagLaserClient.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 HcalDetDiagLaserClient::updateChannelStatus
bool HcalDetDiagLaserClient::validHtmlOutput ( ) [virtual]

Reimplemented from HcalBaseDQClient.

Definition at line 367 of file HcalDetDiagLaserClient.cc.

References n, asciidump::s, and MonitorElement::valueString().

                                            {
  string s=subdir_+"HcalDetDiagLaserMonitor Event Number";
  MonitorElement *me = dqmStore_->get(s.c_str());
  int n=0;
  if ( me ) {
    s = me->valueString();
    sscanf((s.substr(2,s.length()-2)).c_str(), "%d", &n);
  }
  if(n<100) return false;
  return true;
}

Member Data Documentation

Definition at line 37 of file HcalDetDiagLaserClient.h.

Definition at line 38 of file HcalDetDiagLaserClient.h.