CMS 3D CMS Logo

HcalRecHitMonitor.cc

Go to the documentation of this file.
00001 #include "DQM/HcalMonitorTasks/interface/HcalRecHitMonitor.h"
00002 
00003 #define OUT if(fverbosity_)cout
00004 #define TIME_MIN -250
00005 #define TIME_MAX 250
00006 
00007 using namespace std;
00008 
00009 HcalRecHitMonitor::HcalRecHitMonitor()
00010 {
00011   ievt_=0;
00012 } //constructor
00013 
00014 HcalRecHitMonitor::~HcalRecHitMonitor()
00015 {
00016 } //destructor
00017 
00018 
00019 /* ------------------------------------ */ 
00020 
00021 void HcalRecHitMonitor::setup(const edm::ParameterSet& ps,
00022                                 DQMStore* dbe)
00023 {
00024   HcalBaseMonitor::setup(ps,dbe);
00025 
00026   if (showTiming)
00027     {
00028       cpu_timer.reset(); cpu_timer.start();
00029     }
00030   if (fVerbosity>0)
00031     cout <<"<HcalRecHitMonitor::setup>  Setting up histograms"<<endl;
00032 
00033   baseFolder_ = rootFolder_+"RecHitMonitor_Hcal";
00034 
00035   // Assume subdetectors not present until shown otherwise
00036   HBpresent_=false;
00037   HEpresent_=false;
00038   HOpresent_=false;
00039   HFpresent_=false;
00040 
00041   // Rec Hit Monitor - specific cfg variables
00042 
00043   if (fVerbosity>1)
00044     cout <<"<HcalRecHitMonitor::setup>  Getting variable values from cfg files"<<endl;
00045   
00046   // rechit_makeDiagnostics_ will take on base task value unless otherwise specified
00047   rechit_makeDiagnostics_ = ps.getUntrackedParameter<bool>("RecHitMonitor_makeDiagnosticPlots",makeDiagnostics);
00048   
00049   // Set checkNevents values
00050   rechit_checkNevents_ = ps.getUntrackedParameter<int>("RecHitMonitor_checkNevents",checkNevents_);
00051   rechit_minErrorFlag_ = ps.getUntrackedParameter<double>("RecHitMonitor_minErrorFlag",0.0);
00052 
00053   energyThreshold_       = ps.getUntrackedParameter<double>("RecHitMonitor_energyThreshold",                  0);
00054   HBenergyThreshold_     = ps.getUntrackedParameter<double>("RecHitMonitor_HB_energyThreshold",energyThreshold_);
00055   HEenergyThreshold_     = ps.getUntrackedParameter<double>("RecHitMonitor_HE_energyThreshold",energyThreshold_);
00056   HOenergyThreshold_     = ps.getUntrackedParameter<double>("RecHitMonitor_HO_energyThreshold",energyThreshold_);
00057   HFenergyThreshold_     = ps.getUntrackedParameter<double>("RecHitMonitor_HF_energyThreshold",energyThreshold_);
00058   HFenergyThreshold_     = ps.getUntrackedParameter<double>("RecHitMonitor_HF_energyThreshold",            -999);
00059   ZDCenergyThreshold_    = ps.getUntrackedParameter<double>("RecHitMonitor_ZDC_energyThreshold",           -999);
00060 
00061   // Set initial event # to 0
00062   ievt_=0;
00063 
00064   // zero all counters
00065 
00066   // TH2F counters
00067   for (int i=0;i<ETABINS;++i)
00068     {
00069       for (int j=0;j<PHIBINS;++j)
00070         {
00071           for (int k=0;k<6;++k)
00072             {
00073               occupancy_[i][j][k]=0;
00074               occupancy_thresh_[i][j][k]=0;
00075               energy_[i][j][k]=0;
00076               energy_thresh_[i][j][k]=0;
00077               time_[i][j][k]=0;
00078               time_thresh_[i][j][k]=0;
00079             }
00080         } // for (int j=0;j<PHIBINS;++j)
00081     } // for (int i=0;i<ETABINS;++i)
00082 
00083   // TH1F counters
00084   
00085   // energy
00086   for (int i=0;i<200;++i)
00087     {
00088       HBenergy_[i]=0;
00089       HBenergy_thresh_[i]=0;
00090       HEenergy_[i]=0;
00091       HEenergy_thresh_[i]=0;
00092       HOenergy_[i]=0;
00093       HOenergy_thresh_[i]=0;
00094       HFenergy_[i]=0;
00095       HFenergy_thresh_[i]=0;
00096       HFenergyLong_[i]=0;
00097       HFenergyLong_thresh_[i]=0;
00098       HFenergyShort_[i]=0;
00099       HFenergyShort_thresh_[i]=0;
00100     }
00101 
00102   // time
00103   for (int i=0;i<(TIME_MAX-TIME_MIN);++i)
00104     {
00105       HBtime_[i]=0;
00106       HBtime_thresh_[i]=0;
00107       HEtime_[i]=0;
00108       HEtime_thresh_[i]=0;
00109       HOtime_[i]=0;
00110       HOtime_thresh_[i]=0;
00111       HFtime_[i]=0;
00112       HFtime_thresh_[i]=0;
00113       HFtimeLong_[i]=0;
00114       HFtimeLong_thresh_[i]=0;
00115       HFtimeShort_[i]=0;
00116       HFtimeShort_thresh_[i]=0;
00117     }
00118 
00119   // occupancy
00120   for (int i=0;i<2593;++i)
00121     {
00122       HB_occupancy_[i]=0;
00123       HE_occupancy_[i]=0;
00124       HB_occupancy_thresh_[i]=0;
00125       HE_occupancy_thresh_[i]=0;
00126       if (i<=2160)
00127         {
00128           HO_occupancy_[i]=0;
00129           HO_occupancy_thresh_[i]=0;
00130         }
00131       if (i<=1728)
00132         {
00133           HF_occupancy_[i]=0;
00134           HF_occupancy_thresh_[i]=0;
00135         }
00136       if (i<=864)
00137         {
00138           HFlong_occupancy_[i] =0;
00139           HFshort_occupancy_[i]=0;
00140           HFlong_occupancy_thresh_[i] =0;
00141           HFshort_occupancy_thresh_[i]=0;
00142         }
00143     } // for (int i=0;i<2592;++i)
00144 
00145 
00146   // Set up histograms
00147   if (m_dbe)
00148     {
00149       if (fVerbosity>1)
00150         cout <<"<HcalRecHitMonitor::setup>  Setting up histograms"<<endl;
00151 
00152       m_dbe->setCurrentFolder(baseFolder_);
00153       meEVT_ = m_dbe->bookInt("RecHit Event Number");
00154       meEVT_->Fill(ievt_);
00155 
00156       // Create problem cell plots
00157       // Overall plot gets an initial " " in its name
00158       ProblemRecHits=m_dbe->book2D(" ProblemRecHits",
00159                                      " Problem Rec Hit Rate for all HCAL",
00160                                      etaBins_,etaMin_,etaMax_,
00161                                      phiBins_,phiMin_,phiMax_);
00162       ProblemRecHits->setAxisTitle("i#eta",1);
00163       ProblemRecHits->setAxisTitle("i#phi",2);
00164       // Only show problem cells that are above problem threshold
00165       (ProblemRecHits->getTH2F())->SetMinimum(rechit_minErrorFlag_);
00166       (ProblemRecHits->getTH2F())->SetMaximum(1.);
00167       
00168       // Overall Problem plot appears in main directory; plots by depth appear \in subdirectory
00169       m_dbe->setCurrentFolder(baseFolder_+"/problem_rechits");
00170       setupDepthHists2D(ProblemRecHitsByDepth, " Problem RecHit Rate","");
00171       setMinMaxHists2D(ProblemRecHitsByDepth,rechit_minErrorFlag_,1.);
00172 
00173       m_dbe->setCurrentFolder(baseFolder_+"/rechit_energy");
00174       setupDepthHists2D(EnergyByDepth,"Rec Hit Average Energy","");
00175       setupDepthHists2D(EnergyThreshByDepth,"Rec Hit Average Energy Above Threshold","");
00176       
00177       m_dbe->setCurrentFolder(baseFolder_+"/rechit_occupancy");
00178       setupDepthHists2D(OccupancyByDepth,"Rec Hit Average Occupancy","");
00179       setMinMaxHists2D(OccupancyByDepth,0,1);
00180       setupDepthHists2D(OccupancyThreshByDepth,"Rec Hit Average Occupancy Above Threshold","");
00181       setMinMaxHists2D(OccupancyThreshByDepth,0,1);
00182       
00183       m_dbe->setCurrentFolder(baseFolder_+"/rechit_time");
00184       setupDepthHists2D(TimeByDepth,"Rec Hit Average Time","");
00185       setupDepthHists2D(TimeThreshByDepth,"Rec Hit Average Time Above Threshold","");
00186       
00187       if (rechit_makeDiagnostics_)
00188         {
00189           m_dbe->setCurrentFolder(baseFolder_+"/diagnostics/hb");
00190           h_HBEnergy=m_dbe->book1D("HB_energy","HB Rec Hit Energy",200,-5,5);
00191           h_HBThreshEnergy=m_dbe->book1D("HB_energy_thresh", "HB Rec Hit Energy Above Threshold",200,-5,5);
00192           h_HBTotalEnergy=m_dbe->book1D("HB_total_energy","HB Rec Hit Total Energy",200,-200,200);
00193           h_HBThreshTotalEnergy=m_dbe->book1D("HB_total_energy_thresh", "HB Rec Hit Total Energy Above Threshold",200,-200,200);
00194           h_HBTime=m_dbe->book1D("HB_time","HB Rec Hit Time",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00195           h_HBThreshTime=m_dbe->book1D("HB_time_thresh", "HB Rec Hit Time Above Threshold",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00196           h_HBOccupancy=m_dbe->book1D("HB_occupancy","HB Rec Hit Occupancy",2593,-0.5,2592.5);
00197           h_HBThreshOccupancy=m_dbe->book1D("HB_occupancy_thresh","HB Rec Hit Occupancy Above Threshold",2593,-0.5,2592.5);
00198           // hb
00199 
00200           m_dbe->setCurrentFolder(baseFolder_+"/diagnostics/he");       
00201           h_HEEnergy=m_dbe->book1D("HE_energy","HE Rec Hit Energy",200,-5,5);
00202           h_HEThreshEnergy=m_dbe->book1D("HE_energy_thresh", "HE Rec Hit Energy Above Threshold",200,-5,5);
00203           h_HETotalEnergy=m_dbe->book1D("HE_total_energy","HE Rec Hit Total Energy",200,-200,200);
00204           h_HEThreshTotalEnergy=m_dbe->book1D("HE_total_energy_thresh", "HE Rec Hit Total Energy Above Threshold",200,-200,200);
00205           h_HETime=m_dbe->book1D("HE_time","HE Rec Hit Time",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00206           h_HEThreshTime=m_dbe->book1D("HE_time_thresh", "HE Rec Hit Time Above Threshold",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00207           h_HEOccupancy=m_dbe->book1D("HE_occupancy","HE Rec Hit Occupancy",2593,-0.5,2592.5);
00208           h_HEThreshOccupancy=m_dbe->book1D("HE_occupancy_thresh","HE Rec Hit Occupancy Above Threshold",2593,-0.5,2592.5);
00209           // he
00210 
00211           m_dbe->setCurrentFolder(baseFolder_+"/diagnostics/ho");       
00212           h_HOEnergy=m_dbe->book1D("HO_energy","HO Rec Hit Energy",200,-5,5);
00213           h_HOThreshEnergy=m_dbe->book1D("HO_energy_thresh", "HO Rec Hit Energy Above Threshold",200,-5,5);
00214           h_HOTotalEnergy=m_dbe->book1D("HO_total_energy","HO Rec Hit Total Energy",200,-200,200);
00215           h_HOThreshTotalEnergy=m_dbe->book1D("HO_total_energy_thresh", "HO Rec Hit Total Energy Above Threshold",200,-200,200);
00216           h_HOTime=m_dbe->book1D("HO_time","HO Rec Hit Time",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00217           h_HOThreshTime=m_dbe->book1D("HO_time_thresh", "HO Rec Hit Time Above Threshold",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00218           h_HOOccupancy=m_dbe->book1D("HO_occupancy","HO Rec Hit Occupancy",2161,-0.5,2160.5);
00219           h_HOThreshOccupancy=m_dbe->book1D("HO_occupancy_thresh","HO Rec Hit Occupancy Above Threshold",2161,-0.5,2160.5);
00220           // ho
00221 
00222           m_dbe->setCurrentFolder(baseFolder_+"/diagnostics/hf");       
00223           h_HFEnergy=m_dbe->book1D("HF_energy","HF Rec Hit Energy",200,-5,5);
00224           h_HFThreshEnergy=m_dbe->book1D("HF_energy_thresh", "HF Rec Hit Energy Above Threshold",200,-5,5);
00225           h_HFTotalEnergy=m_dbe->book1D("HF_total_energy","HF Rec Hit Total Energy",200,-200,200);
00226           h_HFThreshTotalEnergy=m_dbe->book1D("HF_total_energy_thresh", "HF Rec Hit Total Energy Above Threshold",200,-200,200);
00227           h_HFTime=m_dbe->book1D("HF_time","HF Rec Hit Time",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00228           h_HFThreshTime=m_dbe->book1D("HF_time_thresh", "HF Rec Hit Time Above Threshold",int(TIME_MAX-TIME_MIN),TIME_MIN,TIME_MAX);
00229           h_HFOccupancy=m_dbe->book1D("HF_occupancy","HF Rec Hit Occupancy",1729,-0.5,1728.5);
00230           h_HFThreshOccupancy=m_dbe->book1D("HF_occupancy_thresh","HF Rec Hit Occupancy Above Threshold",1729,-0.5,1728.5);
00231           // hf
00232           
00233         } // if (rechit_Diagnostics_)
00234     } // if (m_dbe)
00235 
00236   return;
00237   
00238 } //void HcalRecHitMonitor::setup(...)
00239 
00240 
00241 /* --------------------------- */
00242 
00243 void HcalRecHitMonitor::reset(){}  // reset function is empty for now
00244 
00245 
00246 /* ------------------------- */
00247 
00248 void HcalRecHitMonitor::done()
00249 {
00250   // Can eventually dump bad rec hit info here, when we decide on a definition for bad rec hits
00251   return;
00252   
00253 } // void HcalRecHitMonitor::done()
00254 
00255 
00256 
00257 /* --------------------------------- */
00258 
00259 void HcalRecHitMonitor::clearME()
00260 {
00261   // I don't think this function gets cleared any more.  
00262   // And need to add code to clear out subfolders as well?
00263   if (m_dbe)
00264     {
00265       m_dbe->setCurrentFolder(baseFolder_);
00266       m_dbe->removeContents();
00267     }
00268   return;
00269 } // void HcalRecHitMonitor::clearME()
00270 
00271 /* -------------------------------- */
00272 
00273 
00274 void HcalRecHitMonitor::processEvent(const HBHERecHitCollection& hbHits,
00275                                      const HORecHitCollection& hoHits,
00276                                      const HFRecHitCollection& hfHits
00277                                      //const ZDCRecHitCollection& zdcHits,
00278                                      )
00279 {
00280 
00281   if (showTiming)
00282     {
00283       cpu_timer.reset(); cpu_timer.start();
00284     }
00285 
00286   ++ievt_;
00287   if (m_dbe) meEVT_->Fill(ievt_);
00288   
00289   if (hoHits.size()>0) HOpresent_=true;
00290   if (hfHits.size()>0) HFpresent_=true;
00291 
00292   if (fVerbosity>1) cout <<"<HcalRecHitMonitor::processEvent> Processing event..."<<endl;
00293 
00294   processEvent_rechit(hbHits, hoHits, hfHits);
00295   
00296   // Fill problem cells
00297   if (ievt_%rechit_checkNevents_ ==0)
00298     {
00299       fillNevents();
00300     }
00301 
00302   return;
00303 } // void HcalRecHitMonitor::processEvent(...)
00304 
00305 
00306 /* --------------------------------------- */
00307 
00308 
00309 void HcalRecHitMonitor::fillRecHitHistosAtEndRun()
00310 {
00311   // Fill histograms one last time at endRun call
00312   
00313   /*
00314     I'm not sure I like this feature.  Suppose checkNevents=500, and the end run occurs at 501?
00315     Then the occupancy plot would create errors for whichever digis were not found in a single event.
00316     That's not desired behavior.
00317     We could just exclude the occupancy test from running here, but I'm not sure that's the best solution either.
00318     For now (28 Oct. 2008), just disable this functionality.  We'll come back to it if necessary.
00319   */
00320   return;
00321 
00322   fillNevents();
00323 }
00324 
00325 /* --------------------------------------- */
00326 
00327 
00328 void HcalRecHitMonitor::processEvent_rechit( const HBHERecHitCollection& hbheHits,
00329                                              const HORecHitCollection& hoHits,
00330                                              const HFRecHitCollection& hfHits)
00331   
00332 {
00333   // Gather rechit info
00334   if (showTiming)
00335     {
00336       cpu_timer.reset(); cpu_timer.start();
00337     }
00338 
00339   if (fVerbosity>1) cout <<"<HcalRecHitMonitor::processEvent_rechitenergy> Processing rechits..."<<endl;
00340   
00341   // loop over HBHE
00342   
00343   int     hbocc=0;
00344   int     heocc=0;
00345   int     hboccthresh=0;
00346   int     heoccthresh=0;
00347   double  hbenergy=0;
00348   double  heenergy=0;
00349   double  hbenergythresh=0;
00350   double  heenergythresh=0;
00351   int HEbindepth=0;
00352 
00353   for (HBHERecHitCollection::const_iterator HBHEiter=hbheHits.begin(); HBHEiter!=hbheHits.end(); ++HBHEiter) 
00354     { // loop over all hits
00355       float en = HBHEiter->energy();
00356       float ti = HBHEiter->time();
00357 
00358       HcalDetId id(HBHEiter->detid().rawId());
00359       int ieta = id.ieta();
00360       int iphi = id.iphi();
00361       int depth = id.depth();
00362       if (id.subdet()==HcalBarrel)
00363         {
00364           HBpresent_=true;
00365           if (!checkHB_) continue;
00366         
00367           ++occupancy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00368           energy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00369           time_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00370           if (en>=HBenergyThreshold_)
00371             {
00372               ++occupancy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00373               energy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00374               time_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00375             }
00376           if (rechit_makeDiagnostics_)
00377             {
00378               ++hbocc;
00379               hbenergy+=en;
00380               if (ti<TIME_MIN || ti>TIME_MAX)
00381                 h_HBTime->Fill(ti);
00382               else
00383                 ++HBtime_[int(ti-TIME_MIN)];
00384               if (en<-5 || en>-5)
00385                 h_HBEnergy->Fill(en);
00386               else
00387                 ++HBenergy_[20*int(en+5)];
00388               if (en>=HBenergyThreshold_)
00389                 {
00390                   ++hboccthresh;
00391                   hbenergythresh+=en;
00392                   if (ti<TIME_MIN || ti>TIME_MAX)
00393                     h_HBThreshTime->Fill(ti);
00394                   else
00395                     ++HBtime_thresh_[int(ti-TIME_MIN)];
00396                   if (en<-5 || en>-5)
00397                     h_HBThreshEnergy->Fill(en);
00398                   else
00399                     ++HBenergy_thresh_[20*int(en+5)];
00400                 } // if (en>=HBenergyThreshold_)
00401             } // if (rechit_makeDiagnostics_)
00402         } // if (id.subdet()==HcalBarrel)
00403 
00404       else if (id.subdet()==HcalEndcap)
00405         {
00406           HEpresent_=true;
00407           if (!checkHE_) continue;
00408           HEbindepth=depth-1;
00409           if (depth<=2) HEbindepth+=4; 
00410           
00411           ++occupancy_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth];
00412           energy_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth]+=en;
00413           time_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth]+=ti;
00414           if (en>=HEenergyThreshold_)
00415             {
00416               ++occupancy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth];
00417               energy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth]+=en;
00418               time_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][HEbindepth]+=ti;
00419             }
00420           if (rechit_makeDiagnostics_)
00421             {
00422               ++heocc;
00423               heenergy+=en;
00424               if (ti<-100 || ti>200)
00425                 h_HETime->Fill(ti);
00426               else
00427                 ++HEtime_[int(ti+100)];
00428               if (en<-5 || en>-5)
00429                 h_HEEnergy->Fill(en);
00430               else
00431                 ++HEenergy_[20*int(en+5)];
00432               if (en>=HEenergyThreshold_)
00433                 {
00434                   ++heoccthresh;
00435                   heenergythresh+=en;
00436                   if (ti<-100 || ti>200)
00437                     h_HEThreshTime->Fill(ti);
00438                   else
00439                     ++HEtime_thresh_[int(ti+100)];
00440                   if (en<-5 || en>-5)
00441                     h_HEThreshEnergy->Fill(en);
00442                   else
00443                     ++HEenergy_thresh_[20*int(en+5)];
00444                 } // if (en>=HEenergyThreshold_)
00445             } // if (rechit_makeDiagnostics_)
00446 
00447 
00448         } // else if (id.subdet()==HcalEndcap)
00449      
00450     } //for (HBHERecHitCollection::const_iterator HBHEiter=...)
00451 
00452   if (rechit_makeDiagnostics_)
00453     {
00454       ++HB_occupancy_[hbocc];
00455       ++HE_occupancy_[heocc];
00456       ++HB_occupancy_thresh_[hboccthresh];
00457       ++HE_occupancy_thresh_[heoccthresh];
00458       h_HBTotalEnergy->Fill(hbenergy);
00459       h_HETotalEnergy->Fill(heenergy);
00460       h_HBThreshTotalEnergy->Fill(hbenergythresh);
00461       h_HEThreshTotalEnergy->Fill(heenergythresh);
00462     }
00463 
00464   // loop over HO
00465 
00466   if (checkHO_)
00467    {
00468      int hoocc=0;
00469      int hooccthresh=0;
00470      double hoenergy=0;
00471      double hoenergythresh=0;
00472      for (HORecHitCollection::const_iterator HOiter=hoHits.begin(); HOiter!=hoHits.end(); ++HOiter) 
00473        { // loop over all hits
00474          float en = HOiter->energy();
00475          float ti = HOiter->time();
00476 
00477          HcalDetId id(HOiter->detid().rawId());
00478          int ieta = id.ieta();
00479          int iphi = id.iphi();
00480          int depth = id.depth();
00481 
00482          ++occupancy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00483          energy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00484          time_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00485 
00486          if (en>=HOenergyThreshold_)
00487            {
00488              ++occupancy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00489              energy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00490              time_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00491            }
00492          if (rechit_makeDiagnostics_)
00493            {
00494              ++hoocc;
00495              hoenergy+=en;
00496              if (ti<-100 || ti>200)
00497                h_HOTime->Fill(ti);
00498              else
00499                ++HOtime_[int(ti+100)];
00500              if (en<-5 || en>-5)
00501                h_HOEnergy->Fill(en);
00502              else
00503                ++HOenergy_[20*int(en+5)];
00504              if (en>=HOenergyThreshold_)
00505                {
00506                  ++hooccthresh;
00507                  hoenergythresh+=en;
00508                  if (ti<-100 || ti>200)
00509                    h_HOThreshTime->Fill(ti);
00510                  else
00511                    ++HOtime_thresh_[int(ti+100)];
00512                  if (en<-5 || en>-5)
00513                    h_HOThreshEnergy->Fill(en);
00514                  else
00515                    ++HOenergy_thresh_[20*int(en+5)];
00516                } // if (en>=HOenergyThreshold_)
00517            } // if (rechit_makeDiagnostics_)
00518        } // loop over all HO hits
00519      if (rechit_makeDiagnostics_)
00520        {
00521          ++HO_occupancy_[hoocc];
00522          ++HO_occupancy_thresh_[hooccthresh];
00523          h_HOTotalEnergy->Fill(hoenergy);
00524          h_HOThreshTotalEnergy->Fill(hoenergythresh);
00525        }
00526 
00527    } // if (checkHO_)
00528  
00529   // loop over HF
00530   if (checkHF_)
00531    {
00532      int hfocc=0;
00533      int hfoccthresh=0;
00534      double hfenergy=0;
00535      double hfenergythresh=0;
00536      for (HFRecHitCollection::const_iterator HFiter=hfHits.begin(); HFiter!=hfHits.end(); ++HFiter) 
00537        { // loop over all hits
00538          float en = HFiter->energy();
00539          float ti = HFiter->time();
00540 
00541          HcalDetId id(HFiter->detid().rawId());
00542          int ieta = id.ieta();
00543          int iphi = id.iphi();
00544          int depth = id.depth();
00545 
00546          ++occupancy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00547          energy_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00548          time_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00549 
00550          if (en>=HFenergyThreshold_)
00551            {
00552              ++occupancy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1];
00553              energy_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=en;
00554              time_thresh_[ieta+(int)((etaBins_-2)/2)][iphi-1][depth-1]+=ti;
00555            }
00556          if (rechit_makeDiagnostics_)
00557            {
00558              ++hfocc;
00559              hfenergy+=en;
00560              if (ti<-100 || ti>200)
00561                h_HFTime->Fill(ti);
00562              else
00563                ++HFtime_[int(ti+100)];
00564              if (en<-5 || en>-5)
00565                h_HFEnergy->Fill(en);
00566              else
00567                ++HFenergy_[20*int(en+5)];
00568              if (en>=HFenergyThreshold_)
00569                {
00570                  ++hfoccthresh;
00571                  hfenergythresh+=en;
00572                  if (ti<-100 || ti>200)
00573                    h_HFThreshTime->Fill(ti);
00574                  else
00575                    ++HFtime_thresh_[int(ti+100)];
00576                  if (en<-5 || en>-5)
00577                    h_HFThreshEnergy->Fill(en);
00578                  else
00579                    ++HFenergy_thresh_[20*int(en+5)];
00580                } // if (en>=HFenergyThreshold_)
00581            } // if (rechit_makeDiagnostics_)
00582        } // loop over all HF hits
00583      if (rechit_makeDiagnostics_)
00584        {
00585          ++HF_occupancy_[hfocc];
00586          ++HF_occupancy_thresh_[hfoccthresh];
00587          h_HFTotalEnergy->Fill(hfenergy);
00588          h_HFThreshTotalEnergy->Fill(hfenergythresh);
00589        }
00590    } // if (checkHF_)
00591  
00592  if (showTiming)
00593    {
00594      cpu_timer.stop();  cout <<"TIMER:: HcalRecHitMonitor PROCESSEVENT_RECHITENERGY -> "<<cpu_timer.cpuTime()<<endl;
00595    }
00596  return;
00597 } // void HcalRecHitMonitor::processEvent_rechitenergy
00598 
00599 /* --------------------------------------- */
00600 
00601 
00602 
00603 
00604 void HcalRecHitMonitor::fillNevents(void)
00605 {
00606   if (showTiming)
00607     {
00608       cpu_timer.reset(); cpu_timer.start();
00609     }
00610 
00611   int ieta=0;
00612   int iphi=0;
00613   int mydepth=0;
00614   // Fill Occupancy & Average Energy,Time plots
00615   if (ievt_>0)
00616     {
00617       for (int eta=0;eta<(etaBins_-2);++eta)
00618         {
00619           ieta=eta-int((etaBins_-2)/2);
00620           for (int phi=0;phi<72;++phi)
00621             {
00622               iphi=phi+1;
00623               for (int depth=0;depth<6;++depth)
00624                 {
00625                   mydepth=depth;
00626                   OccupancyByDepth[mydepth]->setBinContent(eta+2,phi+2,occupancy_[eta][phi][mydepth]*1./ievt_);
00627                   OccupancyThreshByDepth[mydepth]->setBinContent(eta+2,phi+2,occupancy_thresh_[eta][phi][mydepth]*1./ievt_);
00628                   EnergyByDepth[mydepth]->setBinContent(eta+2,phi+2,energy_[eta][phi][mydepth]*1./ievt_);
00629                   EnergyThreshByDepth[mydepth]->setBinContent(eta+2,phi+2,energy_thresh_[eta][phi][mydepth]*1./ievt_);
00630                   TimeByDepth[mydepth]->setBinContent(eta+2,phi+2,time_[eta][phi][mydepth]*1./ievt_);
00631                   TimeThreshByDepth[mydepth]->setBinContent(eta+2,phi+2,time_thresh_[eta][phi][mydepth]*1./ievt_);
00632 
00633                 } // for (int depth=0;depth<6;++depth)
00634             } // for (int phi=0;phi<72;++phi)
00635         } // for (int eta=0;eta<(etaBins_-2);++eta)
00636 
00637       FillUnphysicalHEHFBins(OccupancyByDepth);
00638       FillUnphysicalHEHFBins(OccupancyThreshByDepth);
00639       FillUnphysicalHEHFBins(EnergyByDepth);
00640       FillUnphysicalHEHFBins(EnergyThreshByDepth);
00641       FillUnphysicalHEHFBins(TimeByDepth);
00642       FillUnphysicalHEHFBins(TimeThreshByDepth);
00643     } // if (ievt_>0)
00644 
00645   // Fill subdet plots
00646 
00647   for (int i=0;i<200;++i)
00648     {
00649       if (HBenergy_[i]!=0) 
00650         {
00651           h_HBEnergy->setBinContent(i+1,h_HBEnergy->getBinContent(i+1)+HBenergy_[i]);
00652           HBenergy_[i]=0;
00653         }
00654       if (HBenergy_thresh_[i]!=0) 
00655         {
00656           h_HBThreshEnergy->setBinContent(i+1,h_HBThreshEnergy->getBinContent(i+1)+HBenergy_thresh_[i]);
00657           HBenergy_thresh_[i]=0;
00658         }
00659       if (HEenergy_[i]!=0) 
00660         {
00661           h_HEEnergy->setBinContent(i+1,h_HEEnergy->getBinContent(i+1)+HEenergy_[i]);
00662           HEenergy_[i]=0;
00663         }
00664       if (HEenergy_thresh_[i]!=0) 
00665         {
00666           h_HEThreshEnergy->setBinContent(i+1,h_HEThreshEnergy->getBinContent(i+1)+HEenergy_thresh_[i]);
00667           HEenergy_thresh_[i]=0;
00668         }
00669       if (HOenergy_[i]!=0) 
00670         {
00671           h_HOEnergy->setBinContent(i+1,h_HOEnergy->getBinContent(i+1)+HOenergy_[i]);
00672           HOenergy_[i]=0;
00673         }
00674       if (HOenergy_thresh_[i]!=0) 
00675         {
00676           h_HOThreshEnergy->setBinContent(i+1,h_HOThreshEnergy->getBinContent(i+1)+HOenergy_thresh_[i]);
00677           HOenergy_thresh_[i]=0;
00678         }
00679       if (HFenergy_[i]!=0) 
00680         {
00681           h_HFEnergy->setBinContent(i+1,h_HFEnergy->getBinContent(i+1)+HFenergy_[i]);
00682           HFenergy_[i]=0;
00683         }
00684       if (HFenergy_thresh_[i]!=0) 
00685         {
00686           h_HFThreshEnergy->setBinContent(i+1,h_HFThreshEnergy->getBinContent(i+1)+HFenergy_thresh_[i]);
00687           HFenergy_thresh_[i]=0;
00688         }
00689     }// for (int i=0;i<200;++i) // Jeff
00690 
00691   for (int i=0;i<(TIME_MAX-TIME_MIN);++i)
00692     {
00693       if (HBtime_[i]!=0)
00694         {
00695           h_HBTime->setBinContent(i+1,h_HBTime->getBinContent(i+1)+HBtime_[i]);
00696           HBtime_[i]=0;
00697         }
00698       if (HBtime_thresh_[i]!=0)
00699         {
00700           h_HBThreshTime->setBinContent(i+1,h_HBThreshTime->getBinContent(i+1)+HBtime_thresh_[i]);
00701           HBtime_thresh_[i]=0;
00702         }
00703       if (HEtime_[i]!=0)
00704         {
00705           h_HETime->setBinContent(i+1,h_HETime->getBinContent(i+1)+HEtime_[i]);
00706           HEtime_[i]=0;
00707         }
00708       if (HEtime_thresh_[i]!=0)
00709         {
00710           h_HEThreshTime->setBinContent(i+1,h_HEThreshTime->getBinContent(i+1)+HEtime_thresh_[i]);
00711           HEtime_thresh_[i]=0;
00712         }
00713       if (HOtime_[i]!=0)
00714         {
00715           h_HOTime->setBinContent(i+1,h_HOTime->getBinContent(i+1)+HOtime_[i]);
00716           HOtime_[i]=0;
00717         }
00718       if (HOtime_thresh_[i]!=0)
00719         {
00720           h_HOThreshTime->setBinContent(i+1,h_HOThreshTime->getBinContent(i+1)+HOtime_thresh_[i]);
00721           HOtime_thresh_[i]=0;
00722         }
00723       if (HFtime_[i]!=0)
00724         {
00725           h_HFTime->setBinContent(i+1,h_HFTime->getBinContent(i+1)+HFtime_[i]);
00726           HFtime_[i]=0;
00727         }
00728       if (HFtime_thresh_[i]!=0)
00729         {
00730           h_HFThreshTime->setBinContent(i+1,h_HFThreshTime->getBinContent(i+1)+HFtime_thresh_[i]);
00731           HFtime_thresh_[i]=0;
00732         }
00733     } // for (int  i=0;i<(TIME_MAX-TIME_MIN);++i)
00734 
00735   for (int i=0;i<2593;++i)
00736     {
00737       if (HB_occupancy_[i]>0)
00738         {
00739           h_HBOccupancy->setBinContent(i+1,h_HBOccupancy->getBinContent(i+1)+HB_occupancy_[i]);
00740           HB_occupancy_[i]=0;
00741         }
00742       if (HB_occupancy_thresh_[i]>0)
00743         {
00744           h_HBThreshOccupancy->setBinContent(i+1,h_HBThreshOccupancy->getBinContent(i+1)+HB_occupancy_thresh_[i]);
00745           HB_occupancy_thresh_[i]=0;
00746         }
00747       if (HE_occupancy_[i]>0)
00748         {
00749           h_HEOccupancy->setBinContent(i+1,h_HEOccupancy->getBinContent(i+1)+HE_occupancy_[i]);
00750           HE_occupancy_[i]=0;
00751         }
00752       if (HE_occupancy_thresh_[i]>0)
00753         {
00754           h_HEThreshOccupancy->setBinContent(i+1,h_HEThreshOccupancy->getBinContent(i+1)+HE_occupancy_thresh_[i]);
00755           HE_occupancy_thresh_[i]=0;
00756         }
00757     }//for (int i=0;i<2593;++i)
00758 
00759   for (int i=0;i<2161;++i)
00760     {
00761       if (HO_occupancy_[i]>0)
00762         {
00763           h_HOOccupancy->setBinContent(i+1,h_HOOccupancy->getBinContent(i+1)+HO_occupancy_[i]);
00764           HO_occupancy_[i]=0;
00765         }
00766       if (HO_occupancy_thresh_[i]>0)
00767         {
00768           h_HOThreshOccupancy->setBinContent(i+1,h_HOThreshOccupancy->getBinContent(i+1)+HO_occupancy_thresh_[i]);
00769           HO_occupancy_thresh_[i]=0;
00770         }
00771     }//  for (int i=0;i<2161;++i)
00772 
00773   for (int i=0;i<1729;++i)
00774     {
00775       if (HF_occupancy_[i]>0)
00776         {
00777           h_HFOccupancy->setBinContent(i+1,h_HFOccupancy->getBinContent(i+1)+HF_occupancy_[i]);
00778           HF_occupancy_[i]=0;
00779         }
00780       if (HF_occupancy_thresh_[i]>0)
00781         {
00782           h_HFThreshOccupancy->setBinContent(i+1,h_HFThreshOccupancy->getBinContent(i+1)+HF_occupancy_thresh_[i]);
00783           HF_occupancy_thresh_[i]=0;
00784         }
00785     }//  for (int i=0;i<2161;++i)
00786 
00787 
00788 
00789   if (fVerbosity>0)
00790     cout <<"<HcalRecHitMonitor::fillNevents_problemCells> FILLING REC HIT CELL PLOTS"<<endl;
00791   
00792   if (showTiming)
00793     {
00794       cpu_timer.stop();  cout <<"TIMER:: HcalRecHitMonitor FILLNEVENTS -> "<<cpu_timer.cpuTime()<<endl;
00795     }
00796 
00797 } // void HcalRecHitMonitor::fillNevents(void)

Generated on Tue Jun 9 17:33:02 2009 for CMSSW by  doxygen 1.5.4