21 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!=
"/")
22 prefixME_.append(
"/");
48 std::cout <<
"<HcalDigiMonitor> Digi shape ADC threshold set to: >" << shapeThresh_ <<
" counts above nominal pedestal (3*10)"<< std::endl;
69 std::cout <<
"<HcalDigiMonitor> Checking for the following problems:"<<std::endl;
70 if (digi_checkcapid_)
std::cout <<
"\tChecking that cap ID rotation is correct;"<<std::endl;
71 if (digi_checkdigisize_)
73 std::cout <<
"\tChecking that HBHE digi size is between ["<<mindigisizeHBHE_<<
" - "<<maxdigisizeHBHE_<<
"];"<<std::endl;
74 std::cout <<
"\tChecking that HO digi size is between ["<<mindigisizeHO_<<
" - "<<maxdigisizeHO_<<
"];"<<std::endl;
75 std::cout <<
"\tChecking that HF digi size is between ["<<mindigisizeHF_<<
" - "<<maxdigisizeHF_<<
"];"<<std::endl;
77 if (digi_checkadcsum_)
std::cout <<
"\tChecking that ADC sum of digi is greater than 0;"<<std::endl;
78 if (digi_checkdverr_)
std::cout <<
"\tChecking that data valid bit is true and digi error bit is false;\n"<<std::endl;
96 if(last ==-1)
return false;
99 if(v==now)
return false;
158 std::cout <<
"<HcalDigiMonitor::beginRun> Setting up histograms"<<std::endl;
160 std::ostringstream
name;
200 "Total Number of ProblemDigis HBHEHF in last 10 LS. Last bin contains OverFlow",
238 h_invalid_bcn=
dbe_->
book1D(
"InvalidDigiEvents_BCN",
"Bunch Crossing Number fo Events with Many Unpacker Errors",3464,-0.5,3563.5);
275 "Digi Phi Occupancy Map;i#phi;# of Events",
278 "Digi Eta Occupancy Map;i#eta;# of Events",
281 "Digi VME Occupancy Map;HTR Slot;VME Crate Id",
282 40,-0.25,19.75,18,-0.5,17.5);
285 "Digi Spigot Occupancy Map;Spigot;DCC Id",
291 "Digi VME Error Map;HTR Slot;VME Crate Id",
292 40,-0.25,19.75,18,-0.5,17.5);
295 "Digi Spigot Error Map;Spigot;DCC Id",
306 DigiBQFrac =
dbe_->
book1D(
"Bad Digi Fraction",
"Bad Digi Fraction;Bad Quality Digi Fraction for digis in collection; # of Events",
314 "Bad Digis From Unpacker/ (Bad Digis From Unpacker + Good Digis); Bad Unpacker Fraction; # of Events",
334 if (
debug_>1)
std::cout <<
"\t<HcalDigiMonitor::setup> Getting conditions from DB!"<<std::endl;
345 for (std::vector<DetId>::const_iterator chan = mydetids.begin();chan!=mydetids.end();++chan)
348 std::vector <double> peds;
353 for (
int capid=0;capid<4;++capid)
356 double temp_ADC=channelCoder->
adc(*shape,(
float)calibs.
pedestal(capid),capid);
357 peds.push_back(temp_ADC);
376 for (std::vector<DetId>::const_iterator
i = mydetids.begin();
397 std::stringstream
name;
399 if (subdet==
"HB" || subdet==
"HE") nChan=2592;
400 else if (subdet ==
"HO") nChan=2160;
401 else if (subdet ==
"HF") nChan=1728;
404 hist.
shape =
dbe_->
book1D(subdet+
" Digi Shape",subdet+
" Digi Shape;Time Slice",10,-0.5,9.5);
406 subdet+
" Digi Shape - over thresh passing trigger and HF HT cuts;Time slice",
409 subdet+
" Total Digis Over Threshold",
412 for (
int ts=0;ts<9;++ts)
414 name<<subdet<<
" Plus Time Slices "<<ts<<
" and "<<ts+1;
417 name<<subdet<<
" Minus Time Slices "<<ts<<
" and "<<ts+1;
421 hist.
presample=
dbe_->
book1D(subdet+
" Digi Presamples",subdet+
" Digi Presamples",50,-0.5,49.5);
422 hist.
BQ =
dbe_->
book1D(subdet+
" Bad Quality Digis",subdet+
" Bad Quality Digis",nChan+1,-0.5,nChan+0.5);
425 hist.
DigiFirstCapID =
dbe_->
book1D(subdet+
" Capid 1st Time Slice",subdet+
" Capid for 1st Time Slice;CapId (T0)- 1st CapId (T0);# of Events",7,-3.5,3.5);
427 hist.
DVerr =
dbe_->
book1D(subdet+
" Data Valid Err Bits",subdet+
" QIE Data Valid Err Bits",4,-0.5,3.5);
433 hist.
ADC =
dbe_->
book1D(subdet+
" ADC count per time slice",subdet+
" ADC count per time slice",200,-0.5,199.5);
434 hist.
ADCsum =
dbe_->
book1D(subdet+
" ADC sum", subdet+
" ADC sum",200,-0.5,199.5);
435 hist.
fibBCNOff =
dbe_->
book1D(subdet+
" Fiber Orbit Message Idle BCN Offset", subdet+
" Fiber Orbit Message Idle BCN Offset;Offset from Expected",
452 if (dcsStatus.
isValid() && dcsStatus->size() != 0)
480 const unsigned int nTrig(triggerNames.
size());
481 for (
unsigned int i=0;
i<nTrig;++
i){
505 float en=HF->energy();
506 int ieta=HF->
id().ieta();
559 if (fed.
size()<12)
continue;
562 if(!dccHeader)
return;
575 if(dccid==720 && (spigot==12 || spigot==13))
continue;
576 if(dccid==722 && (spigot==12 || spigot==13))
continue;
589 if (
debug_>1)
std::cout <<
"\t<HcalDigiMonitor::analyze> Processing good event! event # = "<<
ievt_<<std::endl;
609 std::cout <<
"HcalDigiMonitor::processEvent DQMStore not instantiated!!!"<<std::endl;
617 unsigned int allgooddigis= hbhe.
size()+ho.
size()+hf.
size();
622 if(bcN>=3446 && bcN<=3564)
628 if ((allgooddigis==0) ||
657 typedef std::vector<DetId> DetIdVector;
664 int rDepth =
id.depth();
665 int rPhi =
id.iphi();
666 int rEta =
id.ieta();
667 int binEta =
CalcEtaBin(
id.subdet(), rEta, rDepth);
669 if (binEta < 85 && binEta >= 0
670 && (rPhi-1) >= 0 && (rPhi-1)<72
671 && (rDepth-1) >= 0 && (rDepth-1)<4)
686 if (
abs(rEta)>=11 &&
abs(rEta)<=15 && !
isSiPM(rEta,rPhi,rDepth))
continue;
689 if( (rEta>4 && rEta<10) && (rPhi<=10 || rPhi>70) )
continue;
702 ++
baddigis[binEta][rPhi-1][rDepth-1];
705 bool HEM15A =
true ? (
id.subdet()==
HcalEndcap && (rPhi>56 && rPhi<59 && rEta<0)) :
false;
706 bool HEM15B =
true ? (
id.subdet()==
HcalEndcap && (rPhi>54 && rPhi<57 && rEta<0)) :
false;
707 bool HBP14A =
true ? (
id.subdet()==
HcalBarrel && (rPhi>50 && rPhi<53 && rEta>0)) :
false;
710 if( HEM15A || HEM15B || HBP14A )
778 && (digi.
id().
iphi()<=10 || digi.
id().
iphi()>70) )
continue;
827 if (count_bad>0 || count_good>0)
896 template <
class DIGI>
932 int iEta = digi.id().ieta();
933 int iPhi = digi.id().iphi();
934 int iDepth = digi.id().depth();
935 int calcEta =
CalcEtaBin(digi.id().subdet(),iEta,iDepth);
938 if (digi.size()<mindigisize || digi.size()>maxdigisize)
945 ++
digisize[static_cast<int>(digi.size())][digi.id().subdet()-1];
947 ++
digisize[19][digi.id().subdet()-1];
953 if (firstcap==-1) firstcap = digi.sample(0).capid();
954 int capdif = digi.sample(0).capid() - firstcap;
957 if (capdif >-4 && capdif<4)
964 int offset = digi.fiberIdleOffset();
982 bool digi_error=
false;
988 std::map<HcalDetId, std::vector<double> >::iterator foundID =
PedestalsByCapId_.find(digi.id());
991 int thisCapid = digi.sample(
i).capid();
992 if (thisCapid>=0 && thisCapid<4) ++h.
capid[thisCapid];
996 if(
bitUpset(last,thisCapid)) bitUp=
true;
1001 if(digi.sample(
i).er()) err=(err|0x2);
1002 if(!digi.sample(
i).dv()) err=(err|0x2);
1004 if ((digi_error==
false) && (digi.sample(
i).er() || !digi.sample(
i).dv()))
1009 ++h.
dverr[
static_cast<int>(2*digi.sample(
i).er()+digi.sample(
i).dv())];
1015 if (
i==digi.size()-1)
continue;
1016 tssum= digi.sample(
i).adc()+digi.sample(
i+1).adc();
1017 if (tssum<50 && tssum>=0)
1025 if (digi.sample(
i).adc()<0) ++h.
adc[0];
1026 else if (digi.sample(
i).adc()<200) ++h.
adc[digi.sample(
i).adc()];
1029 if (
i>=pedSubADCsize)
continue;
1034 ADCcount+=(int)(digi.sample(
i).adc()-(foundID->second)[thisCapid]);
1039 ADCcount+=digi.sample(
i).adc()-3;
1047 ++
badcapID[calcEta][iPhi-1][iDepth-1];
1057 ++
baddigis[calcEta][iPhi-1][iDepth-1];
1058 ++
errorVME[
static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][
static_cast<int>(digi.elecId().readoutVMECrateId())];
1059 ++
errorSpigot[
static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
1066 if (ADCcount<0) ADCcount=0;
1077 if (digi.id().subdet()!=
HcalOuter ||
isSiPM(iEta,iPhi, iDepth)==
false)
1079 for (
int i=0;
i<pedSubADCsize;++
i)
1090 ++
occupancyVME[
static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][
static_cast<int>(digi.elecId().readoutVMECrateId())];
1091 ++
occupancySpigot[
static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
1101 double maxenergy=-1, fullenergy=0;
1105 fullenergy+=digi.sample(
ff).nominal_fC()-2.5;
1106 if (digi.sample(
ff).nominal_fC()-2.5>maxenergy)
1108 maxenergy=digi.sample(
ff).nominal_fC()-2.5;
1113 if (maxtime>=2 && maxtime<=5 && maxenergy>20 && maxenergy<100)
1117 if(digi.id().ieta()>0)
HFP_shape->
Fill(
ff,(digi.sample(
ff).nominal_fC()-2.5)/fullenergy);
1118 if(digi.id().ieta()<0)
HFM_shape->
Fill(
ff,(digi.sample(
ff).nominal_fC()-2.5)/fullenergy);
1122 double time_den=0, time_num=0;
1124 int startslice=
std::max(0,maxtime-1);
1125 int endslice=
std::min(digisize-1,maxtime+1);
1126 for (
int ss=startslice;ss<=endslice;++ss)
1129 time_num+=ss*(digi.sample(ss).nominal_fC()-2.5);
1130 time_den+=digi.sample(ss).nominal_fC()-2.5;
1134 if (iDepth==2) ++myiphi;
1181 std::cout <<
"<HcalDigiMonitor> Calling fill_Nevents for event "<<
tevt_<<
" (processed events = "<<
ievt_<<
")"<<std::endl;
1182 int iPhi, iEta, iDepth;
1213 for (
int i=0;
i<10;++
i)
1215 for (
int j=0;
j<50;++
j)
1241 for (
int i=0;
i<4;++
i)
1254 for (
int i=0;
i<200;++
i)
1268 for (
int i = 0;
i < 15; ++
i)
1283 if (DIGI_BQ_FRAC_NBINS==1)
break;
1294 for (
int i=0;
i<50;++
i)
1303 for (
int i=0;
i<10;++
i)
1316 for (
int i=0;
i<8;++
i)
1325 for (
int i=0;
i<40;++
i)
1327 for (
int j=0;
j<18;++
j)
1337 for (
int j=0;
j<36;++
j)
1345 for (
int sub=0;sub<4;++sub)
1347 for (
int dsize=0;dsize<20;++dsize)
1355 for (
int d=0;d<4;++d)
1468 int zside = iEta/
abs(iEta);
1542 for (
int i=0;
i<85;++
i)
1547 for (
int j=0;
j<72;++
j)
1549 for (
int k=0;
k<4;++
k)
1562 for (
int i=0;
i<40;++
i)
1564 for (
int j=0;
j<18;++
j)
1573 for (
int j=0;
j<36;++
j)
1581 for (
int i=0;
i<20;++
i)
1583 for (
int j=0;
j<4;++
j)
1629 for (
int j=0;
j<10;++
j)
MonitorElement * h_invalid_bcn
bool passedMinBiasHLT_
Methods, variables accessible only within class code.
T getUntrackedParameter(std::string const &, T const &) const
bool LumiInOrder(int lumisec)
MonitorElement * DigiBQFrac
int getNDD() const
Get the number of daq data samples per channel when not zero-suppressed.
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
MonitorElement * ProblemsCurrentLB
MonitorElement * HFtiming_occupancy2D
std::vector< std::string > MinBiasHLTBits_
EtaPhiHists DigiErrorsDVErr
int occupancySpigot[40][36]
HcalSubdetector subdet() const
get the subdetector
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
MonitorElement * DigiSize
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
MonitorElement * HFP_shape
MonitorElement * ProblemsVsLB_HF
#define DEFINE_FWK_MODULE(type)
std::map< unsigned int, int > KnownBadCells_
MonitorElement * HFtiming_totaltime2D
std::vector< int > AllowedCalibTypes_
MonitorElement * shapeThresh
void beginRun(const edm::Run &run, const edm::EventSetup &c)
MonitorElement * HFM_shape
EtaPhiHists DigiErrorOccupancyByDepth
#define DIGI_BQ_FRAC_NBINS
std::vector< T >::const_iterator const_iterator
int bunchCrossing() const
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
edm::LuminosityBlockNumber_t luminosityBlock() const
HcalDigiMonitor(const edm::ParameterSet &ps)
double pedestal(int fCapId) const
get pedestal for capid=0..3
Strings::size_type size() const
void update(void)
Mark the object updated.
int badFibBCNOff[85][72][4]
MonitorElement * DigiOccupancyEta
MonitorElement * DigiErrorVME
MonitorElement * DigiOccupancyVME
MonitorElement * HOocc_vs_LB
size_t size() const
Lenght of the data buffer in bytes.
const HcalDetId & id() const
MonitorElement * ThreshCount
LuminosityBlockNumber_t luminosityBlock() const
std::map< HcalDetId, std::vector< double > > PedestalsByCapId_
MonitorElement * DigiErrorSpigot
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
edm::InputTag hfRechitLabel_
EtaPhiHists DigiErrorsBadFibBCNOff
void UpdateHists(DigiHists &h)
bool isSiPM(int ieta, int iphi, int depth)
int depth() const
get the tower depth
std::vector< MonitorElement * > depth
virtual void beginRun(const edm::Run &run, const edm::EventSetup &c)
int DigiMonitor_ExpectedOrbitMessageTime_
void removeContents(void)
erase all monitoring elements in current directory (not including subfolders);
MonitorElement * HBocc_vs_LB
int baddigisize[85][72][4]
bool IsAllowedCalibType()
const T & max(const T &a, const T &b)
MonitorElement * ProblemsVsLB_HBHEHF
MonitorElement * ProblemsVsLB_HB
int digierrorsdverr[85][72][4]
uint64_t uniqcounter[85][72][4]
std::vector< DetId > getAllChannels() const
int ieta() const
get the cell ieta
virtual void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
float bins_cellcount_new[]
DetIdVector::const_iterator bad_quality_begin() const
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
std::vector< MonitorElement * > TS_sum_minus
MonitorElement * HFocc_vs_LB
unsigned int offset(bool)
std::vector< MonitorElement * > TS_sum_plus
int process_Digi(T &digi, DigiHists &hist, int &firstcap)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
uint64_t uniqcounter2[85][72][4]
const_iterator end() const
MonitorElement * DigiUnpackerErrorCount
MonitorElement * HEocc_vs_LB
int iphi() const
get the cell iphi
EtaPhiHists DigiErrorsBadDigiSize
bool digi_checkoccupancy_
int badChannelStatusMask_
MonitorElement * fibBCNOff
static const double theHFEtaBounds[]
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
static bool bitUpset(int last, int now)
MonitorElement * DigiOccupancySpigot
std::string const & triggerName(unsigned int index) const
EtaPhiHists DigiErrorsBadADCSum
edm::InputTag hltresultsLabel_
MonitorElement * HFtiming_etaProfile
T const * product() const
MonitorElement * ProblemsVsLB_HE
void FillUnphysicalHEHFBins(std::vector< TH2F > &hh)
int CalcEtaBin(int subdet, int ieta, int depth)
void analyze(const edm::Event &e, const edm::EventSetup &c)
edm::InputTag FEDRawDataCollection_
MonitorElement * h_invalid_orbitnumMod103
void SetupEtaPhiHists(EtaPhiHists &hh, std::string Name, std::string Units)
int badQualityDigis() const
int occupancyEtaPhi[85][72][4]
float bins_fraccount_new[]
MonitorElement * h_valid_digis
double count_shapeThresh[10]
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
unsigned adc(const HcalQIEShape &fShape, float fCharge, unsigned fCapId) const
fC + capid [0..3] -> ADC conversion
perl if(1 lt scalar(@::datatypes))
const HcalDetId & id() const
const JetExtendedData & getValue(const Container &, const reco::JetBaseRef &)
get value for the association. Throw exception if no association found
MonitorElement * DigiUnpackerErrorFrac
MonitorElement * DigiFirstCapID
EtaPhiHists DigiErrorsBadCapID
MonitorElement * ProblemsVsLB_HO
void setupSubdetHists(DigiHists &hist, std::string subdet)
EtaPhiHists DigiOccupancyByDepth
MonitorElement * ProblemsVsLB
MonitorElement * bookInt(const char *name)
Book int.
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
int badunpackerreport[85][72][4]
const Item * getValues(DetId fId) const
MonitorElement * presample
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * DigiExpectedSize
void processEvent(const HBHEDigiCollection &hbhe, const HODigiCollection &ho, const HFDigiCollection &hf, const HcalDbService &cond, const HcalUnpackerReport &report, int orN, int bcN)
void Reset(void)
reset ME (ie. contents, errors, etc)
EtaPhiHists DigiErrorsByDepth
EtaPhiHists DigiErrorsUnpacker
edm::ESHandle< HcalDbService > conditions_
void setCurrentFolder(const std::string &fullpath)
const_iterator begin() const
DetIdVector::const_iterator bad_quality_end() const
MonitorElement * DigiOccupancyPhi
MonitorElement * ProblemDigisInLastNLB_HBHEHF_alarm
double pedSubtractedADC_[10]
bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)
void endRun(const edm::Run &run, const edm::EventSetup &c)