65 constexpr float adc2fC[128]={-0.5,0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5, 10.5,11.5,12.5,
66 13.5,15.,17.,19.,21.,23.,25.,27.,29.5,32.5,35.5,38.5,42.,46.,50.,54.5,59.5,
67 64.5,59.5,64.5,69.5,74.5,79.5,84.5,89.5,94.5,99.5,104.5,109.5,114.5,119.5,
68 124.5,129.5,137.,147.,157.,167.,177.,187.,197.,209.5,224.5,239.5,254.5,272.,
69 292.,312.,334.5,359.5,384.5,359.5,384.5,409.5,434.5,459.5,484.5,509.5,534.5,
70 559.5,584.5,609.5,634.5,659.5,684.5,709.5,747.,797.,847.,897.,947.,997.,
71 1047.,1109.5,1184.5,1259.5,1334.5,1422.,1522.,1622.,1734.5,1859.5,1984.5,
72 1859.5,1984.5,2109.5,2234.5,2359.5,2484.5,2609.5,2734.5,2859.5,2984.5,
73 3109.5,3234.5,3359.5,3484.5,3609.5,3797.,4047.,4297.,4547.,4797.,5047.,
74 5297.,5609.5,5984.5,6359.5,6734.5,7172.,7672.,8172.,8734.5,9359.5,9984.5};
76 constexpr char const *
subdets[11]={
"HBM",
"HBP",
"HEM",
"HEP",
"HO1M",
"HO0",
"HO1P",
"HO2M",
"HO2P",
"HFM",
"HFP"};
78 "HBM01",
"HBM02",
"HBM03",
"HBM04",
"HBM05",
"HBM06",
"HBM07",
"HBM08",
"HBM09",
"HBM10",
"HBM11",
"HBM12",
"HBM13",
"HBM14",
"HBM15",
"HBM16",
"HBM17",
"HBM18",
79 "HBP01",
"HBP02",
"HBP03",
"HBP04",
"HBP05",
"HBP06",
"HBP07",
"HBP08",
"HBP09",
"HBP10",
"HBP11",
"HBP12",
"HBP13",
"HBP14",
"HBP15",
"HBP16",
"HBP17",
"HBP18"};
81 "HEM01",
"HEM02",
"HEM03",
"HEM04",
"HEM05",
"HEM06",
"HEM07",
"HEM08",
"HEM09",
"HEM10",
"HEM11",
"HEM12",
"HEM13",
"HEM14",
"HEM15",
"HEM16",
"HEM17",
"HEM18",
82 "HEP01",
"HEP02",
"HEP03",
"HEP04",
"HEP05",
"HEP06",
"HEP07",
"HEP08",
"HEP09",
"HEP10",
"HEP11",
"HEP12",
"HEP13",
"HEP14",
"HEP15",
"HEP16",
"HEP17",
"HEP18"};
84 "HO2M02",
"HO2M04",
"HO2M06",
"HO2M08",
"HO2M10",
"HO2M12",
"HO1M02",
"HO1M04",
"HO1M06",
"HO1M08",
"HO1M10",
"HO1M12",
85 "HO001",
"HO002",
"HO003",
"HO004",
"HO005",
"HO006",
"HO007",
"HO008",
"HO009",
"HO010",
"HO011",
"HO012",
86 "HO1P02",
"HO1P04",
"HO1P06",
"HO1P08",
"HO1P10",
"HO1P12",
"HO2P02",
"HO2P04",
"HO2P06",
"HO2P08",
"HO2P10",
"HO2P12",
97 n_th_hi=n_th_300=n_pix_1=n_pix_8=pix=n_pix=0;
100 n_th_hi_LS=n_th_300_LS=0;
117 n_pix_hi=n_pix_lo=
energy=n_zero=0;
137 if(rbx.substr(0,3)==
"HO0"){
138 int sect=atoi(rbx.substr(3,2).c_str());
139 if(sect>12)
return -1;
140 if(rm==1 && (sect==2 || sect==3 || sect==6 || sect==7 || sect==10 || sect==11))
return -1;
141 if(rm==4 && (sect==12 || sect==1 || sect==4 || sect==5 || sect==8 || sect==9 ))
return -1;
143 if(rbx.substr(0,3)==
"HO1" || rbx.substr(0,3)==
"HO2"){
144 int sect=atoi(rbx.substr(4,2).c_str());
145 if(sect>12)
return -1;
146 if(sect==1 || sect==3 || sect==5 || sect==7 || sect==9 || sect==11)
return -1;
149 if(
id.rawId()==0)
return -1;
163 dataset_seq_number=1;
164 FirstOrbit=FirstOrbitLS=0xFFFFFFFF;
165 LastOrbit=LastOrbitLS=0;
172 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!=
"/")
173 prefixME_.append(
"/");
175 if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!=
"/")
177 subdir_=prefixME_+subdir_;
195 tok_hbhe_ = consumes<HBHEDigiCollection>(digiLabel_);
196 tok_ho_ = consumes<HODigiCollection>(digiLabel_);
199 needLogicalMap_=
true;
215 if (debug_>1)
std::cout <<
"HcalDetDiagNoiseMonitor::beginRun"<<std::endl;
218 if (tevt_==0) this->
setup();
219 if (mergeRuns_==
false)
238 meEVT_ =
dbe_->
bookInt(
"HcalNoiseMonitor Event Number");
241 name=
"RBX Pixel multiplicity"; PixelMult =
dbe_->
book1D(name,name,73,0,73);
242 name=
"HPD energy"; HPDEnergy =
dbe_->
book1D(name,name,200,0,2500);
243 name=
"RBX energy"; RBXEnergy =
dbe_->
book1D(name,name,200,0,3500);
244 name=
"Number of zero TS per RBX"; NZeroes =
dbe_->
book1D(name,name,100,0,100);
245 name=
"Trigger BX Tbit11"; TriggerBx11 =
dbe_->
book1D(name,name,4000,0,4000);
246 name=
"Trigger BX Tbit12"; TriggerBx12 =
dbe_->
book1D(name,name,4000,0,4000);
249 name=
"HBP HPD Noise Rate Pixel above 50fC"; HBP_Rate50 =
dbe_->
book1D(name,name,73,0,73);
250 name=
"HBM HPD Noise Rate Pixel above 50fC"; HBM_Rate50 =
dbe_->
book1D(name,name,73,0,73);
251 name=
"HEP HPD Noise Rate Pixel above 50fC"; HEP_Rate50 =
dbe_->
book1D(name,name,73,0,73);
252 name=
"HEM HPD Noise Rate Pixel above 50fC"; HEM_Rate50 =
dbe_->
book1D(name,name,73,0,73);
253 name=
"HBP HPD Noise Rate HPD above 300fC"; HBP_Rate300 =
dbe_->
book1D(name,name,73,0,73);
254 name=
"HBM HPD Noise Rate HPD above 300fC"; HBM_Rate300 =
dbe_->
book1D(name,name,73,0,73);
255 name=
"HEP HPD Noise Rate HPD above 300fC"; HEP_Rate300 =
dbe_->
book1D(name,name,73,0,73);
256 name=
"HEM HPD Noise Rate HPD above 300fC"; HEM_Rate300 =
dbe_->
book1D(name,name,73,0,73);
259 name=
"HO0 HPD Noise Rate Pixel above 50fC"; HO0_Rate50 =
dbe_->
book1D(name,name,49,0,49);
260 name=
"HO1P HPD Noise Rate Pixel above 50fC"; HO1P_Rate50 =
dbe_->
book1D(name,name,48,0,48);
261 name=
"HO1M HPD Noise Rate Pixel above 50fC"; HO1M_Rate50 =
dbe_->
book1D(name,name,48,0,48);
262 name=
"HO0 HPD Noise Rate HPD above 300fC"; HO0_Rate300 =
dbe_->
book1D(name,name,48,0,48);
263 name=
"HO1P HPD Noise Rate HPD abGetRMindexove 300fC"; HO1P_Rate300 =
dbe_->
book1D(name,name,48,0,48);
264 name=
"HO1M HPD Noise Rate HPD above 300fC"; HO1M_Rate300 =
dbe_->
book1D(name,name,48,0,48);
269 name=
"HB RM Spike Map"; HB_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
270 name=
"HE RM Spike Map"; HE_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
271 name=
"HO RM Spike Map"; HO_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
274 HB_RBXmapSpikeCnt->setAxisTitle(title);
275 HE_RBXmapSpikeCnt->setAxisTitle(title);
276 HO_RBXmapSpikeCnt->setAxisTitle(title);
278 for(
int i=0;
i<36;
i++){
279 HB_RBXmapSpikeCnt->setBinLabel(
i+1,
HB_RBX[
i],2);
280 HE_RBXmapSpikeCnt->setBinLabel(i+1,
HE_RBX[i],2);
281 HO_RBXmapSpikeCnt->setBinLabel(i+1,
HO_RBX[i],2);
290 getLogicalMap(iSetup);
291 if (!IsAllowedCalibType())
return;
294 bool isNoiseEvent=
false;
303 if(trigger_data->triggerWord()>1000) isNoiseEvent=
true;
313 if ( fedData.
size() < 24 )
continue ;
324 if(tWord.at(11) || tWord.at(12)) isNoiseEvent=
true;
325 if(tWord.at(11)){ TriggerBx11->Fill(bx);}
326 if(tWord.at(12)){ TriggerBx12->Fill(bx);}
329 if(!isNoiseEvent)
return;
330 if(ievt_==0){ FirstOrbit=orbit; FirstOrbitLS=orbit; newLS=
true;}
331 if(LastOrbit <orbit) LastOrbit=orbit;
332 if(FirstOrbit>orbit) FirstOrbit=orbit;
333 if(LastOrbitLS <orbit) LastOrbitLS=orbit;
334 if(FirstOrbitLS>orbit) FirstOrbitLS=orbit;
341 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
350 meEVT_->Fill(++ievt_);
352 run_number=iEvent.
id().
run();
360 for(
int i=0;
i<digi->size();
i++){
362 if(max<
adc2fC[digi->sample(
i).adc()&0xff]) max=
adc2fC[digi->sample(
i).adc()&0xff];
363 if(
adc2fC[digi->sample(
i).adc()&0xff]==0) n_zero++;
365 HcalFrontEndId lmap_entry=logicalMap_->getHcalFrontEndId(digi->id());
368 if(max>HPDthresholdLo){
369 for(
int i=0;
i<digi->size();
i++)
energy+=
adc2fC[digi->sample(
i).adc()&0xff]-2.5;
371 if(max>HPDthresholdHi){ RMs[
index].
n_pix_hi++; isNoiseEvent=
true;}
379 double max=-100,
energy=0;
int Eta=digi->id().ieta();
int Phi=digi->id().iphi();
int n_zero=0;
380 for(
int i=0;
i<digi->size()-1;
i++){
381 if(max<
adc2fC[digi->sample(
i).adc()&0xff]) max=
adc2fC[digi->sample(
i).adc()&0xff];
382 if(
adc2fC[digi->sample(
i).adc()&0xff]==0) n_zero++;
384 if((Eta>=11 && Eta<=15 && Phi>=59 && Phi<=70) || (Eta>=5 && Eta<=10 && Phi>=47 && Phi<=58)){
387 HcalFrontEndId lmap_entry=logicalMap_->getHcalFrontEndId(digi->id());
390 if(max>HPDthresholdLo){
391 for(
int i=0;
i<digi->size();
i++)
energy+=
adc2fC[digi->sample(
i).adc()&0xff]-2.5;
393 if(max>HPDthresholdHi){ RMs[
index].
n_pix_hi++; isNoiseEvent=
true;}
403 if(RMs[
i].n_pix_hi>0){
404 HPDEnergy->Fill(RMs[
i].
energy);
405 RMSummary->rm[
i].n_th_hi++;
406 RMSummary->rm[
i].n_th_hi_LS++;
407 if(RMs[
i].energy>300) RMSummary->rm[
i].n_th_300++;
408 if(RMs[
i].energy>300) RMSummary->rm[
i].n_th_300_LS++;
409 if(RMs[
i].n_pix_lo>1) RMSummary->rm[
i].n_pix_1++;
410 if(RMs[
i].n_pix_lo>8) RMSummary->rm[
i].n_pix_8++;
412 RMSummary->rm[
i].n_pix++;
417 for(
int sd=0;
sd<7;
sd++)
for(
int sect=1;sect<=18;sect++){
418 std::stringstream tempss;
419 tempss << std::setw(2) << std::setfill(
'0') << sect;
422 double rbx_energy=0;
int pix_mult=0;
int n_zero=0;
bool isValidRBX=
false;
424 int index=RMSummary->GetRMindex(rbx,
rm);
425 if(index>0 && index<HcalFrontEndId::maxRmIndex){
433 PixelMult->Fill(pix_mult);
434 RBXEnergy->Fill(rbx_energy);
435 NZeroes->Fill(n_zero);
439 if((ievt_%100)==0 && debug_>0)
440 std::cout <<ievt_<<
"\t"<<NoisyEvents<<std::endl;
445 int first_rbx=0,last_rbx=0;
452 if(
sd==0){ first_rbx=0; last_rbx=18;}
453 if(
sd==1){ first_rbx=18; last_rbx=36;}
455 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
458 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
459 if(val>SpikeThreshold){
460 HB_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
463 RMSummary->rm[
index].reset_LS();
466 if(
sd==2){ first_rbx=0; last_rbx=18;}
467 if(
sd==3){ first_rbx=18; last_rbx=36;}
469 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
472 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
473 if(val>SpikeThreshold){
474 HE_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
477 RMSummary->rm[
index].reset_LS();
480 if(
sd==4){ first_rbx=6; last_rbx=12;}
481 if(
sd==5){ first_rbx=12; last_rbx=24;}
482 if(
sd==6){ first_rbx=24; last_rbx=30;}
484 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
487 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
488 if(val>SpikeThreshold){
489 HO_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
492 RMSummary->rm[
index].reset_LS();
500 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
503 if(
sd==0){ first_rbx=0; }
504 if(
sd==1){ first_rbx=18;}
506 for(
int rbx=0;rbx<18;rbx++)
for(
int rm=1;
rm<=4;
rm++){
510 HBM_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
511 HBM_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
514 HBP_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
515 HBP_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
519 if(
sd==2){ first_rbx=0;}
520 if(
sd==3){ first_rbx=18;}
522 for(
int rbx=0;rbx<18;rbx++)
for(
int rm=1;
rm<=4;
rm++){
526 HEM_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
527 HEM_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
530 HEP_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
531 HEP_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
536 if(
sd==4){ first_rbx=6; n=6;}
537 if(
sd==5){ first_rbx=12;n=12;}
538 if(
sd==6){ first_rbx=24;n=6;}
540 for(
int rbx=0;rbx<
n;rbx++)
for(
int rm=1;
rm<=4;
rm++){
544 HO1M_Rate50->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_hi/TIME);
545 HO1M_Rate300->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_300/TIME);
548 HO0_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
549 HO0_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
552 HO1P_Rate50->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_hi/TIME);
553 HO1P_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
563 float VAL1,VAL2,VAL3,VAL4,VAL5;
565 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
569 sprintf(str,
"%sHcalDetDiagNoiseData_run%06i_%i.root",
OutputFilePath.c_str(),run_number,dataset_seq_number);
571 sprintf(str,
"%sHcalDetDiagNoiseData.root",
OutputFilePath.c_str());
573 TFile *
theFile =
new TFile(str,
"RECREATE");
574 if(!theFile->IsOpen())
return;
576 sprintf(str,
"%d",run_number); TObjString
run(str); run.Write(
"run number");
577 sprintf(str,
"%d",ievt_); TObjString
events(str); events.Write(
"Total events processed");
578 sprintf(str,
"%d",dataset_seq_number); TObjString dsnum(str); dsnum.Write(
"Dataset number");
579 Long_t
t; t=
time(0); strftime(str,30,
"%F %T",localtime(&t)); TObjString tm(str); tm.Write(
"Dataset creation time");
581 TTree *
tree =
new TTree(
"HCAL Noise data",
"HCAL Noise data");
583 tree->Branch(
"RBX", &RBX,
"RBX/C");
584 tree->Branch(
"rm", &RM,
"rm/I");
585 tree->Branch(
"RATE_50", &VAL1,
"RATE_50");
586 tree->Branch(
"RATE_300", &VAL2,
"RATE_300");
587 tree->Branch(
"RATE_PIX1", &VAL3,
"RATE_PIX1");
588 tree->Branch(
"RATE_PIX8", &VAL4,
"RATE_PIX8");
589 tree->Branch(
"RATE_PIXMEAN", &VAL5,
"RATE_PIXMEAN");
590 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
593 sprintf(RBX,
"%s",
HB_RBX[rbx]);
595 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
596 VAL2=RMSummary->rm[
index].n_th_300/TIME;
597 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
598 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
599 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
602 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
605 sprintf(RBX,
"%s",
HE_RBX[rbx]);
607 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
608 VAL2=RMSummary->rm[
index].n_th_300/TIME;
609 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
610 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
611 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
614 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
617 sprintf(RBX,
"%s",
HO_RBX[rbx]);
619 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
620 VAL2=RMSummary->rm[
index].n_th_300/TIME;
621 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
622 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
623 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
628 dataset_seq_number++;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
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.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
HcalDetDiagNoiseRMEvent()
std::vector< HBHEDataFrame >::const_iterator const_iterator
edm::LuminosityBlockNumber_t luminosityBlock() const
size_t size() const
Lenght of the data buffer in bytes.
void analyze(edm::Event const &e, edm::EventSetup const &s)
virtual void beginRun(const edm::Run &run, const edm::EventSetup &c)
int GetRMindex(const std::string &rbx, int rm)
void removeContents(void)
erase all monitoring elements in current directory (not including subfolders);
const T & max(const T &a, const T &b)
constexpr char const * HB_RBX[36]
constexpr char const * HO_RBX[36]
static const int maxRmIndex
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
DEFINE_FWK_MODULE(CosmicTrackingParticleSelector)
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
constexpr char const * subdets[11]
constexpr float adc2fC[128]
HcalDetDiagNoiseRMSummary()
~HcalDetDiagNoiseMonitor()
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
HcalDetDiagNoiseMonitor(const edm::ParameterSet &ps)
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.
void reset(double vett[256])
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
void setCurrentFolder(const std::string &fullpath)
void beginRun(const edm::Run &run, const edm::EventSetup &c)
constexpr char const * HE_RBX[36]