71 static const 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,
72 13.5,15.,17.,19.,21.,23.,25.,27.,29.5,32.5,35.5,38.5,42.,46.,50.,54.5,59.5,
73 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,
74 124.5,129.5,137.,147.,157.,167.,177.,187.,197.,209.5,224.5,239.5,254.5,272.,
75 292.,312.,334.5,359.5,384.5,359.5,384.5,409.5,434.5,459.5,484.5,509.5,534.5,
76 559.5,584.5,609.5,634.5,659.5,684.5,709.5,747.,797.,847.,897.,947.,997.,
77 1047.,1109.5,1184.5,1259.5,1334.5,1422.,1522.,1622.,1734.5,1859.5,1984.5,
78 1859.5,1984.5,2109.5,2234.5,2359.5,2484.5,2609.5,2734.5,2859.5,2984.5,
79 3109.5,3234.5,3359.5,3484.5,3609.5,3797.,4047.,4297.,4547.,4797.,5047.,
80 5297.,5609.5,5984.5,6359.5,6734.5,7172.,7672.,8172.,8734.5,9359.5,9984.5};
82 static std::string
subdets[11]={
"HBM",
"HBP",
"HEM",
"HEP",
"HO1M",
"HO0",
"HO1P",
"HO2M",
"HO2P",
"HFM",
"HFP"};
84 "HBM01",
"HBM02",
"HBM03",
"HBM04",
"HBM05",
"HBM06",
"HBM07",
"HBM08",
"HBM09",
"HBM10",
"HBM11",
"HBM12",
"HBM13",
"HBM14",
"HBM15",
"HBM16",
"HBM17",
"HBM18",
85 "HBP01",
"HBP02",
"HBP03",
"HBP04",
"HBP05",
"HBP06",
"HBP07",
"HBP08",
"HBP09",
"HBP10",
"HBP11",
"HBP12",
"HBP13",
"HBP14",
"HBP15",
"HBP16",
"HBP17",
"HBP18"};
87 "HEM01",
"HEM02",
"HEM03",
"HEM04",
"HEM05",
"HEM06",
"HEM07",
"HEM08",
"HEM09",
"HEM10",
"HEM11",
"HEM12",
"HEM13",
"HEM14",
"HEM15",
"HEM16",
"HEM17",
"HEM18",
88 "HEP01",
"HEP02",
"HEP03",
"HEP04",
"HEP05",
"HEP06",
"HEP07",
"HEP08",
"HEP09",
"HEP10",
"HEP11",
"HEP12",
"HEP13",
"HEP14",
"HEP15",
"HEP16",
"HEP17",
"HEP18"};
90 "HO2M02",
"HO2M04",
"HO2M06",
"HO2M08",
"HO2M10",
"HO2M12",
"HO1M02",
"HO1M04",
"HO1M06",
"HO1M08",
"HO1M10",
"HO1M12",
91 "HO001",
"HO002",
"HO003",
"HO004",
"HO005",
"HO006",
"HO007",
"HO008",
"HO009",
"HO010",
"HO011",
"HO012",
92 "HO1P02",
"HO1P04",
"HO1P06",
"HO1P08",
"HO1P10",
"HO1P12",
"HO2P02",
"HO2P04",
"HO2P06",
"HO2P08",
"HO2P10",
"HO2P12",
103 n_th_hi=n_th_300=n_pix_1=n_pix_8=pix=n_pix=0;
106 n_th_hi_LS=n_th_300_LS=0;
123 n_pix_hi=n_pix_lo=
energy=n_zero=0;
143 if(rbx.substr(0,3)==
"HO0"){
144 int sect=atoi(rbx.substr(3,2).c_str());
145 if(sect>12)
return -1;
146 if(rm==1 && (sect==2 || sect==3 || sect==6 || sect==7 || sect==10 || sect==11))
return -1;
147 if(rm==4 && (sect==12 || sect==1 || sect==4 || sect==5 || sect==8 || sect==9 ))
return -1;
149 if(rbx.substr(0,3)==
"HO1" || rbx.substr(0,3)==
"HO2"){
150 int sect=atoi(rbx.substr(4,2).c_str());
151 if(sect>12)
return -1;
152 if(sect==1 || sect==3 || sect==5 || sect==7 || sect==9 || sect==11)
return -1;
155 if(
id.rawId()==0)
return -1;
167 dataset_seq_number=1;
168 FirstOrbit=FirstOrbitLS=0xFFFFFFFF;
169 LastOrbit=LastOrbitLS=0;
176 if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!=
"/")
177 prefixME_.append(
"/");
179 if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!=
"/")
181 subdir_=prefixME_+subdir_;
214 if (debug_>1)
std::cout <<
"HcalDetDiagNoiseMonitor::beginRun"<<std::endl;
217 if (tevt_==0) this->
setup();
218 if (mergeRuns_==
false)
234 meEVT_ =
dbe_->
bookInt(
"HcalNoiseMonitor Event Number");
237 name=
"RBX Pixel multiplicity"; PixelMult =
dbe_->
book1D(name,name,73,0,73);
238 name=
"HPD energy"; HPDEnergy =
dbe_->
book1D(name,name,200,0,2500);
239 name=
"RBX energy"; RBXEnergy =
dbe_->
book1D(name,name,200,0,3500);
240 name=
"Number of zero TS per RBX"; NZeroes =
dbe_->
book1D(name,name,100,0,100);
241 name=
"Trigger BX Tbit11"; TriggerBx11 =
dbe_->
book1D(name,name,4000,0,4000);
242 name=
"Trigger BX Tbit12"; TriggerBx12 =
dbe_->
book1D(name,name,4000,0,4000);
245 name=
"HBP HPD Noise Rate Pixel above 50fC"; HBP_Rate50 =
dbe_->
book1D(name,name,73,0,73);
246 name=
"HBM HPD Noise Rate Pixel above 50fC"; HBM_Rate50 =
dbe_->
book1D(name,name,73,0,73);
247 name=
"HEP HPD Noise Rate Pixel above 50fC"; HEP_Rate50 =
dbe_->
book1D(name,name,73,0,73);
248 name=
"HEM HPD Noise Rate Pixel above 50fC"; HEM_Rate50 =
dbe_->
book1D(name,name,73,0,73);
249 name=
"HBP HPD Noise Rate HPD above 300fC"; HBP_Rate300 =
dbe_->
book1D(name,name,73,0,73);
250 name=
"HBM HPD Noise Rate HPD above 300fC"; HBM_Rate300 =
dbe_->
book1D(name,name,73,0,73);
251 name=
"HEP HPD Noise Rate HPD above 300fC"; HEP_Rate300 =
dbe_->
book1D(name,name,73,0,73);
252 name=
"HEM HPD Noise Rate HPD above 300fC"; HEM_Rate300 =
dbe_->
book1D(name,name,73,0,73);
255 name=
"HO0 HPD Noise Rate Pixel above 50fC"; HO0_Rate50 =
dbe_->
book1D(name,name,49,0,49);
256 name=
"HO1P HPD Noise Rate Pixel above 50fC"; HO1P_Rate50 =
dbe_->
book1D(name,name,48,0,48);
257 name=
"HO1M HPD Noise Rate Pixel above 50fC"; HO1M_Rate50 =
dbe_->
book1D(name,name,48,0,48);
258 name=
"HO0 HPD Noise Rate HPD above 300fC"; HO0_Rate300 =
dbe_->
book1D(name,name,48,0,48);
259 name=
"HO1P HPD Noise Rate HPD abGetRMindexove 300fC"; HO1P_Rate300 =
dbe_->
book1D(name,name,48,0,48);
260 name=
"HO1M HPD Noise Rate HPD above 300fC"; HO1M_Rate300 =
dbe_->
book1D(name,name,48,0,48);
265 name=
"HB RM Spike Map"; HB_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
266 name=
"HE RM Spike Map"; HE_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
267 name=
"HO RM Spike Map"; HO_RBXmapSpikeCnt=
dbe_->
book2D(name,name,4,0.5,4.5,36,0.5,36.5);
269 std::string
title=
"RM";
270 HB_RBXmapSpikeCnt->setAxisTitle(title);
271 HE_RBXmapSpikeCnt->setAxisTitle(title);
272 HO_RBXmapSpikeCnt->setAxisTitle(title);
274 for(
int i=0;
i<36;
i++){
275 HB_RBXmapSpikeCnt->setBinLabel(
i+1,
HB_RBX[
i],2);
276 HE_RBXmapSpikeCnt->setBinLabel(i+1,
HE_RBX[i],2);
277 HO_RBXmapSpikeCnt->setBinLabel(i+1,
HO_RBX[i],2);
288 if (!IsAllowedCalibType())
return;
291 bool isNoiseEvent=
false;
300 if(trigger_data->triggerWord()>1000) isNoiseEvent=
true;
310 if ( fedData.
size() < 24 )
continue ;
321 if(tWord.at(11) || tWord.at(12)) isNoiseEvent=
true;
322 if(tWord.at(11)){ TriggerBx11->Fill(bx);}
323 if(tWord.at(12)){ TriggerBx12->Fill(bx);}
326 if(!isNoiseEvent)
return;
327 if(ievt_==0){ FirstOrbit=orbit; FirstOrbitLS=orbit; newLS=
true;}
328 if(LastOrbit <orbit) LastOrbit=orbit;
329 if(FirstOrbit>orbit) FirstOrbit=orbit;
330 if(LastOrbitLS <orbit) LastOrbitLS=orbit;
331 if(FirstOrbitLS>orbit) FirstOrbitLS=orbit;
338 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
347 meEVT_->Fill(++ievt_);
349 run_number=iEvent.
id().
run();
357 for(
int i=0;
i<digi->size();
i++){
359 if(max<
adc2fC[digi->sample(
i).adc()&0xff]) max=
adc2fC[digi->sample(
i).adc()&0xff];
360 if(
adc2fC[digi->sample(
i).adc()&0xff]==0) n_zero++;
365 if(max>HPDthresholdLo){
366 for(
int i=0;
i<digi->size();
i++)
energy+=
adc2fC[digi->sample(
i).adc()&0xff]-2.5;
368 if(max>HPDthresholdHi){ RMs[
index].
n_pix_hi++; isNoiseEvent=
true;}
376 double max=-100,
energy=0;
int Eta=digi->id().ieta();
int Phi=digi->id().iphi();
int n_zero=0;
377 for(
int i=0;
i<digi->size()-1;
i++){
378 if(max<
adc2fC[digi->sample(
i).adc()&0xff]) max=
adc2fC[digi->sample(
i).adc()&0xff];
379 if(
adc2fC[digi->sample(
i).adc()&0xff]==0) n_zero++;
381 if((Eta>=11 && Eta<=15 && Phi>=59 && Phi<=70) || (Eta>=5 && Eta<=10 && Phi>=47 && Phi<=58)){
387 if(max>HPDthresholdLo){
388 for(
int i=0;
i<digi->size();
i++)
energy+=
adc2fC[digi->sample(
i).adc()&0xff]-2.5;
390 if(max>HPDthresholdHi){ RMs[
index].
n_pix_hi++; isNoiseEvent=
true;}
400 if(RMs[
i].n_pix_hi>0){
401 HPDEnergy->Fill(RMs[
i].
energy);
402 RMSummary->rm[
i].n_th_hi++;
403 RMSummary->rm[
i].n_th_hi_LS++;
404 if(RMs[
i].energy>300) RMSummary->rm[
i].n_th_300++;
405 if(RMs[
i].energy>300) RMSummary->rm[
i].n_th_300_LS++;
406 if(RMs[
i].n_pix_lo>1) RMSummary->rm[
i].n_pix_1++;
407 if(RMs[
i].n_pix_lo>8) RMSummary->rm[
i].n_pix_8++;
409 RMSummary->rm[
i].n_pix++;
414 for(
int sd=0;
sd<7;
sd++)
for(
int sect=1;sect<=18;sect++){
415 std::stringstream tempss;
416 tempss << std::setw(2) << std::setfill(
'0') << sect;
417 std::string rbx=
subdets[
sd]+tempss.str();
419 double rbx_energy=0;
int pix_mult=0;
int n_zero=0;
bool isValidRBX=
false;
421 int index=RMSummary->GetRMindex(rbx,
rm);
422 if(index>0 && index<HcalFrontEndId::maxRmIndex){
430 PixelMult->Fill(pix_mult);
431 RBXEnergy->Fill(rbx_energy);
432 NZeroes->Fill(n_zero);
436 if((ievt_%100)==0 && debug_>0)
437 std::cout <<ievt_<<
"\t"<<NoisyEvents<<std::endl;
442 int first_rbx=0,last_rbx=0;
449 if(
sd==0){ first_rbx=0; last_rbx=18;}
450 if(
sd==1){ first_rbx=18; last_rbx=36;}
452 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
455 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
456 if(val>SpikeThreshold){
457 HB_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
460 RMSummary->rm[
index].reset_LS();
463 if(
sd==2){ first_rbx=0; last_rbx=18;}
464 if(
sd==3){ first_rbx=18; last_rbx=36;}
466 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
469 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
470 if(val>SpikeThreshold){
471 HE_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
474 RMSummary->rm[
index].reset_LS();
477 if(
sd==4){ first_rbx=6; last_rbx=12;}
478 if(
sd==5){ first_rbx=12; last_rbx=24;}
479 if(
sd==6){ first_rbx=24; last_rbx=30;}
481 for(
int rbx=first_rbx;rbx<last_rbx;rbx++)
for(
int rm=1;
rm<=4;
rm++){
484 double val=RMSummary->rm[
index].n_th_hi_LS/TIME;
485 if(val>SpikeThreshold){
486 HO_RBXmapSpikeCnt->Fill(
rm,rbx+1,1);
489 RMSummary->rm[
index].reset_LS();
497 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
500 if(
sd==0){ first_rbx=0; }
501 if(
sd==1){ first_rbx=18;}
503 for(
int rbx=0;rbx<18;rbx++)
for(
int rm=1;
rm<=4;
rm++){
507 HBM_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
508 HBM_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
511 HBP_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
512 HBP_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
516 if(
sd==2){ first_rbx=0;}
517 if(
sd==3){ first_rbx=18;}
519 for(
int rbx=0;rbx<18;rbx++)
for(
int rm=1;
rm<=4;
rm++){
523 HEM_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
524 HEM_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
527 HEP_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
528 HEP_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
533 if(
sd==4){ first_rbx=6; n=6;}
534 if(
sd==5){ first_rbx=12;n=12;}
535 if(
sd==6){ first_rbx=24;n=6;}
537 for(
int rbx=0;rbx<
n;rbx++)
for(
int rm=1;
rm<=4;
rm++){
541 HO1M_Rate50->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_hi/TIME);
542 HO1M_Rate300->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_300/TIME);
545 HO0_Rate50->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_hi/TIME);
546 HO0_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
549 HO1P_Rate50->setBinContent(rbx*4*2+
rm,RMSummary->rm[index].n_th_hi/TIME);
550 HO1P_Rate300->setBinContent(rbx*4+
rm,RMSummary->rm[index].n_th_300/TIME);
560 float VAL1,VAL2,VAL3,VAL4,VAL5;
562 double TIME=(double)(LastOrbit-FirstOrbit)/11223.0;
566 sprintf(str,
"%sHcalDetDiagNoiseData_run%06i_%i.root",
OutputFilePath.c_str(),run_number,dataset_seq_number);
568 sprintf(str,
"%sHcalDetDiagNoiseData.root",
OutputFilePath.c_str());
570 TFile *
theFile =
new TFile(str,
"RECREATE");
571 if(!theFile->IsOpen())
return;
573 sprintf(str,
"%d",run_number); TObjString
run(str); run.Write(
"run number");
574 sprintf(str,
"%d",ievt_); TObjString
events(str); events.Write(
"Total events processed");
575 sprintf(str,
"%d",dataset_seq_number); TObjString dsnum(str); dsnum.Write(
"Dataset number");
576 Long_t
t; t=
time(0); strftime(str,30,
"%F %T",localtime(&t)); TObjString tm(str); tm.Write(
"Dataset creation time");
578 TTree *
tree =
new TTree(
"HCAL Noise data",
"HCAL Noise data");
580 tree->Branch(
"RBX", &RBX,
"RBX/C");
581 tree->Branch(
"rm", &RM,
"rm/I");
582 tree->Branch(
"RATE_50", &VAL1,
"RATE_50");
583 tree->Branch(
"RATE_300", &VAL2,
"RATE_300");
584 tree->Branch(
"RATE_PIX1", &VAL3,
"RATE_PIX1");
585 tree->Branch(
"RATE_PIX8", &VAL4,
"RATE_PIX8");
586 tree->Branch(
"RATE_PIXMEAN", &VAL5,
"RATE_PIXMEAN");
587 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
590 sprintf(RBX,
"%s",
HB_RBX[rbx].c_str());
592 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
593 VAL2=RMSummary->rm[
index].n_th_300/TIME;
594 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
595 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
596 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
599 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
602 sprintf(RBX,
"%s",
HE_RBX[rbx].c_str());
604 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
605 VAL2=RMSummary->rm[
index].n_th_300/TIME;
606 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
607 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
608 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
611 for(
int rbx=0;rbx<36;rbx++)
for(
int rm=1;
rm<=4;
rm++){
614 sprintf(RBX,
"%s",
HO_RBX[rbx].c_str());
616 VAL1=RMSummary->rm[
index].n_th_hi/TIME;
617 VAL2=RMSummary->rm[
index].n_th_300/TIME;
618 VAL3=RMSummary->rm[
index].n_pix_1/TIME;
619 VAL4=RMSummary->rm[
index].n_pix_8/TIME;
620 if(RMSummary->rm[index].n_pix>0)VAL5=RMSummary->rm[
index].pix/RMSummary->rm[
index].n_pix;
else VAL5=0;
625 dataset_seq_number++;
T getUntrackedParameter(std::string const &, T const &) const
static std::string HO_RBX[36]
static const float adc2fC[128]
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.
HcalDetDiagNoiseRMEvent()
std::vector< T >::const_iterator const_iterator
static std::string HE_RBX[36]
edm::LuminosityBlockNumber_t luminosityBlock() const
bool getByType(Handle< PROD > &result) 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);
static std::string subdets[11]
const T & max(const T &a, const T &b)
static const int maxRmIndex
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
DEFINE_FWK_MODULE(CosmicTrackingParticleSelector)
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
HcalDetDiagNoiseRMSummary()
~HcalDetDiagNoiseMonitor()
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
static std::string HB_RBX[36]
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)