19 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!=
"/")
20 prefixME_.append(
"/");
45 std::cout <<
"<HcalDigiMonitor> Digi shape ADC threshold set to: >" << shapeThresh_ <<
" counts above nominal pedestal (3*10)"<< std::endl;
66 std::cout <<
"<HcalDigiMonitor> Checking for the following problems:"<<std::endl;
67 if (digi_checkcapid_)
std::cout <<
"\tChecking that cap ID rotation is correct;"<<std::endl;
68 if (digi_checkdigisize_)
70 std::cout <<
"\tChecking that HBHE digi size is between ["<<mindigisizeHBHE_<<
" - "<<maxdigisizeHBHE_<<
"];"<<std::endl;
71 std::cout <<
"\tChecking that HO digi size is between ["<<mindigisizeHO_<<
" - "<<maxdigisizeHO_<<
"];"<<std::endl;
72 std::cout <<
"\tChecking that HF digi size is between ["<<mindigisizeHF_<<
" - "<<maxdigisizeHF_<<
"];"<<std::endl;
74 if (digi_checkadcsum_)
std::cout <<
"\tChecking that ADC sum of digi is greater than 0;"<<std::endl;
75 if (digi_checkdverr_)
std::cout <<
"\tChecking that data valid bit is true and digi error bit is false;\n"<<std::endl;
107 if(last ==-1)
return false;
110 if(v==now)
return false;
172 std::cout <<
"<HcalDigiMonitor::beginRun> Setting up histograms"<<std::endl;
174 std::ostringstream
name;
214 "Total Number of ProblemDigis HBHEHF in last 10 LS. Last bin contains OverFlow",
252 h_invalid_bcn=
dbe_->
book1D(
"InvalidDigiEvents_BCN",
"Bunch Crossing Number fo Events with Many Unpacker Errors",3464,-0.5,3563.5);
289 "Digi Phi Occupancy Map;i#phi;# of Events",
292 "Digi Eta Occupancy Map;i#eta;# of Events",
295 "Digi VME Occupancy Map;HTR Slot;VME Crate Id",
296 40,-0.25,19.75,18,-0.5,17.5);
299 "Digi Spigot Occupancy Map;Spigot;DCC Id",
305 "Digi VME Error Map;HTR Slot;VME Crate Id",
306 40,-0.25,19.75,18,-0.5,17.5);
309 "Digi Spigot Error Map;Spigot;DCC Id",
320 DigiBQFrac =
dbe_->
book1D(
"Bad Digi Fraction",
"Bad Digi Fraction;Bad Quality Digi Fraction for digis in collection; # of Events",
328 "Bad Digis From Unpacker/ (Bad Digis From Unpacker + Good Digis); Bad Unpacker Fraction; # of Events",
348 if (
debug_>1)
std::cout <<
"\t<HcalDigiMonitor::setup> Getting conditions from DB!"<<std::endl;
358 for (std::vector<DetId>::const_iterator chan = mydetids.begin();chan!=mydetids.end();++chan)
361 std::vector <double> peds;
367 for (
int capid=0;capid<4;++capid)
370 double temp_ADC=channelCoder->
adc(*shape,(
float)calibs.
pedestal(capid),capid);
371 peds.push_back(temp_ADC);
390 for (std::vector<DetId>::const_iterator
i = mydetids.begin();
411 std::stringstream
name;
413 if (subdet==
"HB" || subdet==
"HE") nChan=2592;
414 else if (subdet ==
"HO") nChan=2160;
415 else if (subdet ==
"HF") nChan=1728;
418 hist.
shape =
dbe_->
book1D(subdet+
" Digi Shape",subdet+
" Digi Shape;Time Slice",10,-0.5,9.5);
420 subdet+
" Digi Shape - over thresh passing trigger and HF HT cuts;Time slice",
423 subdet+
" Total Digis Over Threshold",
426 for (
int ts=0;ts<9;++ts)
428 name<<subdet<<
" Plus Time Slices "<<ts<<
" and "<<ts+1;
431 name<<subdet<<
" Minus Time Slices "<<ts<<
" and "<<ts+1;
435 hist.
presample=
dbe_->
book1D(subdet+
" Digi Presamples",subdet+
" Digi Presamples",50,-0.5,49.5);
436 hist.
BQ =
dbe_->
book1D(subdet+
" Bad Quality Digis",subdet+
" Bad Quality Digis",nChan+1,-0.5,nChan+0.5);
439 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);
441 hist.
DVerr =
dbe_->
book1D(subdet+
" Data Valid Err Bits",subdet+
" QIE Data Valid Err Bits",4,-0.5,3.5);
447 hist.
ADC =
dbe_->
book1D(subdet+
" ADC count per time slice",subdet+
" ADC count per time slice",200,-0.5,199.5);
448 hist.
ADCsum =
dbe_->
book1D(subdet+
" ADC sum", subdet+
" ADC sum",200,-0.5,199.5);
449 hist.
fibBCNOff =
dbe_->
book1D(subdet+
" Fiber Orbit Message Idle BCN Offset", subdet+
" Fiber Orbit Message Idle BCN Offset;Offset from Expected",
466 if (dcsStatus.
isValid() && dcsStatus->size() != 0)
494 const unsigned int nTrig(triggerNames.
size());
495 for (
unsigned int i=0;
i<nTrig;++
i){
519 float en=
HF->energy();
520 int ieta=
HF->id().ieta();
573 if (fed.
size()<12)
continue;
576 if(!dccHeader)
return;
589 if(dccid==720 && (spigot==12 || spigot==13))
continue;
590 if(dccid==722 && (spigot==12 || spigot==13))
continue;
603 if (
debug_>1)
std::cout <<
"\t<HcalDigiMonitor::analyze> Processing good event! event # = "<<
ievt_<<std::endl;
623 std::cout <<
"HcalDigiMonitor::processEvent DQMStore not instantiated!!!"<<std::endl;
631 unsigned int allgooddigis= hbhe.
size()+ho.
size()+hf.
size();
636 if(bcN>=3446 && bcN<=3564)
642 if ((allgooddigis==0) ||
671 typedef std::vector<DetId> DetIdVector;
678 int rDepth =
id.
depth();
679 int rPhi =
id.iphi();
680 int rEta =
id.ieta();
681 int binEta =
CalcEtaBin(
id.subdet(), rEta, rDepth);
683 if (binEta < 85 && binEta >= 0
684 && (rPhi-1) >= 0 && (rPhi-1)<72
685 && (rDepth-1) >= 0 && (rDepth-1)<4)
700 if (
abs(rEta)>=11 &&
abs(rEta)<=15 && !
isSiPM(rEta,rPhi,rDepth))
continue;
703 if( (rEta>4 && rEta<10) && (rPhi<=10 || rPhi>70) )
continue;
716 ++
baddigis[binEta][rPhi-1][rDepth-1];
719 bool HEM15A =
true ? (
id.subdet()==
HcalEndcap && (rPhi>56 && rPhi<59 && rEta<0)) :
false;
720 bool HEM15B =
true ? (
id.subdet()==
HcalEndcap && (rPhi>54 && rPhi<57 && rEta<0)) :
false;
721 bool HBP14A =
true ? (
id.subdet()==
HcalBarrel && (rPhi>50 && rPhi<53 && rEta>0)) :
false;
724 if( HEM15A || HEM15B || HBP14A )
792 && (digi.
id().
iphi()<=10 || digi.
id().
iphi()>70) )
continue;
841 if (count_bad>0 || count_good>0)
910 template <
class DIGI>
946 int iEta = digi.id().ieta();
947 int iPhi = digi.id().iphi();
948 int iDepth = digi.id().depth();
949 int calcEta =
CalcEtaBin(digi.id().subdet(),iEta,iDepth);
952 if (digi.size()<mindigisize || digi.size()>maxdigisize)
959 ++
digisize[static_cast<int>(digi.size())][digi.id().subdet()-1];
961 ++
digisize[19][digi.id().subdet()-1];
967 if (firstcap==-1) firstcap = digi.sample(0).capid();
968 int capdif = digi.sample(0).capid() - firstcap;
971 if (capdif >-4 && capdif<4)
978 int offset = digi.fiberIdleOffset();
996 bool digi_error=
false;
1002 std::map<HcalDetId, std::vector<double> >::iterator foundID =
PedestalsByCapId_.find(digi.id());
1005 int thisCapid = digi.sample(
i).capid();
1006 if (thisCapid>=0 && thisCapid<4) ++h.
capid[thisCapid];
1010 if(
bitUpset(last,thisCapid)) bitUp=
true;
1015 if(digi.sample(
i).er()) err=(err|0x2);
1016 if(!digi.sample(
i).dv()) err=(err|0x2);
1018 if ((digi_error==
false) && (digi.sample(
i).er() || !digi.sample(
i).dv()))
1023 ++h.
dverr[
static_cast<int>(2*digi.sample(
i).er()+digi.sample(
i).dv())];
1029 if (
i==digi.size()-1)
continue;
1030 tssum= digi.sample(
i).adc()+digi.sample(
i+1).adc();
1031 if (tssum<50 && tssum>=0)
1039 if (digi.sample(
i).adc()<0) ++h.
adc[0];
1040 else if (digi.sample(
i).adc()<200) ++h.
adc[digi.sample(
i).adc()];
1043 if (
i>=pedSubADCsize)
continue;
1048 ADCcount+=(int)(digi.sample(
i).adc()-(foundID->second)[thisCapid]);
1053 ADCcount+=digi.sample(
i).adc()-3;
1061 ++
badcapID[calcEta][iPhi-1][iDepth-1];
1071 ++
baddigis[calcEta][iPhi-1][iDepth-1];
1072 ++
errorVME[
static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][
static_cast<int>(digi.elecId().readoutVMECrateId())];
1073 ++
errorSpigot[
static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
1080 if (ADCcount<0) ADCcount=0;
1091 if (digi.id().subdet()!=
HcalOuter ||
isSiPM(iEta,iPhi, iDepth)==
false)
1093 for (
int i=0;
i<pedSubADCsize;++
i)
1104 ++
occupancyVME[
static_cast<int>(2*(digi.elecId().htrSlot()+0.5*digi.elecId().htrTopBottom()))][
static_cast<int>(digi.elecId().readoutVMECrateId())];
1105 ++
occupancySpigot[
static_cast<int>(digi.elecId().spigot())][static_cast<int>(digi.elecId().dccid())];
1115 double maxenergy=-1, fullenergy=0;
1119 fullenergy+=digi.sample(
ff).nominal_fC()-2.5;
1120 if (digi.sample(
ff).nominal_fC()-2.5>maxenergy)
1122 maxenergy=digi.sample(
ff).nominal_fC()-2.5;
1127 if (maxtime>=2 && maxtime<=5 && maxenergy>20 && maxenergy<100)
1131 if(digi.id().ieta()>0)
HFP_shape->
Fill(
ff,(digi.sample(
ff).nominal_fC()-2.5)/fullenergy);
1132 if(digi.id().ieta()<0)
HFM_shape->
Fill(
ff,(digi.sample(
ff).nominal_fC()-2.5)/fullenergy);
1136 double time_den=0, time_num=0;
1138 int startslice=
std::max(0,maxtime-1);
1139 int endslice=
std::min(digisize-1,maxtime+1);
1140 for (
int ss=startslice;
ss<=endslice;++
ss)
1143 time_num+=
ss*(digi.sample(
ss).nominal_fC()-2.5);
1144 time_den+=digi.sample(
ss).nominal_fC()-2.5;
1148 if (iDepth==2) ++myiphi;
1195 std::cout <<
"<HcalDigiMonitor> Calling fill_Nevents for event "<<
tevt_<<
" (processed events = "<<
ievt_<<
")"<<std::endl;
1196 int iPhi, iEta, iDepth;
1227 for (
int i=0;
i<10;++
i)
1229 for (
int j=0;
j<50;++
j)
1255 for (
int i=0;
i<4;++
i)
1268 for (
int i=0;
i<200;++
i)
1282 for (
int i = 0;
i < 15; ++
i)
1297 if (DIGI_BQ_FRAC_NBINS==1)
break;
1308 for (
int i=0;
i<50;++
i)
1317 for (
int i=0;
i<10;++
i)
1330 for (
int i=0;
i<8;++
i)
1339 for (
int i=0;
i<40;++
i)
1341 for (
int j=0;
j<18;++
j)
1351 for (
int j=0;
j<36;++
j)
1359 for (
int sub=0;sub<4;++sub)
1361 for (
int dsize=0;dsize<20;++dsize)
1369 for (
int d=0;d<4;++d)
1556 for (
int i=0;
i<85;++
i)
1561 for (
int j=0;
j<72;++
j)
1563 for (
int k=0;
k<4;++
k)
1576 for (
int i=0;
i<40;++
i)
1578 for (
int j=0;
j<18;++
j)
1587 for (
int j=0;
j<36;++
j)
1595 for (
int i=0;
i<20;++
i)
1597 for (
int j=0;
j<4;++
j)
1643 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
edm::EDGetTokenT< DcsStatusCollection > dcsStatusToken_
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
bool getByToken(EDGetToken token, Handle< PROD > &result) const
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< HFRecHit >::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
edm::EDGetTokenT< HBHEDigiCollection > tok_hbhe_
HcalDigiMonitor(const edm::ParameterSet &ps)
double pedestal(int fCapId) const
get pedestal for capid=0..3
const Item * getValues(DetId fId, bool throwOnFail=true) const
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)
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()
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)
Abs< T >::type abs(const T &t)
float bins_cellcount_new[]
DetIdVector::const_iterator bad_quality_begin() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
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)
edm::EDGetTokenT< HcalUnpackerReport > tok_unpack_
std::vector< MonitorElement * > TS_sum_plus
int process_Digi(T &digi, DigiHists &hist, int &firstcap)
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[]
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::EDGetTokenT< HODigiCollection > tok_ho_
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]
edm::EDGetTokenT< HFDigiCollection > tok_hf_
edm::EDGetTokenT< FEDRawDataCollection > FEDRawDataCollectionToken_
float bins_fraccount_new[]
MonitorElement * h_valid_digis
static std::atomic< unsigned int > counter
double count_shapeThresh[10]
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
edm::EDGetTokenT< edm::TriggerResults > tok_trigger_
unsigned adc(const HcalQIEShape &fShape, float fCharge, unsigned fCapId) const
fC + capid [0..3] -> ADC conversion
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
if(conf.exists("allCellsPositionCalc"))
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]
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)
edm::EDGetTokenT< HFRecHitCollection > tok_hfrec_
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)
edm::EDGetTokenT< FEDRawDataCollection > tok_raw_