Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid empty FED occupancy plot in PixDQM #11186

Merged
merged 3 commits into from Oct 20, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h
Expand Up @@ -56,6 +56,9 @@
virtual void dqmBeginRun(const edm::Run&, edm::EventSetup const&) ;
virtual void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;

virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;
virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;

virtual void buildStructure(edm::EventSetup const&);
virtual void bookMEs(DQMStore::IBooker &, const edm::EventSetup& iSetup);

Expand Down
107 changes: 60 additions & 47 deletions DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc
Expand Up @@ -98,6 +98,60 @@ SiPixelDigiSource::~SiPixelDigiSource()
}


void
SiPixelDigiSource::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
{

if(modOn && nLumiSecs%10==0){
if(averageDigiOccupancy){
nBPIXDigis = 0;
nFPIXDigis = 0;
for(int i=0; i!=40; i++) nDigisPerFed[i]=0;
}
}
if(!modOn){
if(averageDigiOccupancy){
nBPIXDigis = 0;
nFPIXDigis = 0;
for(int i=0; i!=40; i++) nDigisPerFed[i]=0;
}
}

}

void
SiPixelDigiSource::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
{
nLumiSecs++;

float averageBPIXFed = float(nBPIXDigis)/32.;
float averageFPIXFed = float(nFPIXDigis)/8.;

if(averageDigiOccupancy){

for(int i=0; i!=40; i++){

float averageOcc = 0.;
if(i<32){
if(averageBPIXFed>0.) averageOcc = nDigisPerFed[i]/averageBPIXFed;
}else{
if(averageFPIXFed>0.) averageOcc = nDigisPerFed[i]/averageFPIXFed;
}
if (!modOn){
averageDigiOccupancy->Fill(i+1,averageOcc);
}
if (modOn && nLumiSecs%10==0){
averageDigiOccupancy->Fill(i+1,averageOcc); // "modOn" basically mean Online DQM, in this case fill histos with actual value of digi fraction per fed for each ten lumisections
if (avgfedDigiOccvsLumi){
avgfedDigiOccvsLumi->setBinContent(int(nLumiSecs/10), i+1, averageOcc); //fill with the mean over 10 lumisections, previous code was filling this histo only with last event of each 10th lumisection
}//endif meX5
}//endif modOn
}
}
}



void SiPixelDigiSource::dqmBeginRun(const edm::Run& r, const edm::EventSetup& iSetup){
LogInfo ("PixelDQM") << " SiPixelDigiSource::beginJob - Initialisation ... " << std::endl;
LogInfo ("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/"
Expand Down Expand Up @@ -184,7 +238,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&
edm::ESHandle<TrackerTopology> tTopoHandle;
iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
const TrackerTopology *pTT = tTopoHandle.product();

eventNo++;

// get input data
Expand All @@ -197,24 +251,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&

int lumiSection = (int)iEvent.luminosityBlock();
int nEventDigis = 0; int nActiveModules = 0;

if(modOn){
if(averageDigiOccupancy && lumiSection%8==0){
averageDigiOccupancy->Reset();
nBPIXDigis = 0;
nFPIXDigis = 0;
for(int i=0; i!=40; i++) nDigisPerFed[i]=0;
}
}
if(!modOn){
if(averageDigiOccupancy && lumiSection%1==0){
averageDigiOccupancy->Reset();
nBPIXDigis = 0;
nFPIXDigis = 0;
for(int i=0; i!=40; i++) nDigisPerFed[i]=0;
}
}


std::map<uint32_t,SiPixelDigiModule*>::iterator struct_iter;
for(int i=0; i!=192; i++) numberOfDigis[i]=0;
for(int i=0; i!=1152; i++) nDigisPerChan[i]=0;
Expand All @@ -228,6 +265,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&
bladeOn, diskOn, ringOn,
twoDimOn, reducedSet, twoDimModOn, twoDimOnlyLayDisk,
nDigisA, nDigisB, isUpgrade);

if (modOn && twoDimOnlyLayDisk && lumiSection%10 == 0) (*struct_iter).second->resetRocMap();

bool barrel = DetId((*struct_iter).first).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
Expand Down Expand Up @@ -450,6 +488,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&
}
}//endif(Endcap && isUpgrade)
} // endif any digis in this module

if (twoDimOnlyLayDisk && lumiSection%10 > 2){
std::pair<int,int> tempPair = (*struct_iter).second->getZeroLoEffROCs();
if (barrel){
Expand Down Expand Up @@ -536,32 +575,6 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&
if(pixEventRate) pixEventRate->Fill(lumiSection, 1./23.);
}

// Actual digi occupancy in a FED compared to average digi occupancy per FED
if(averageDigiOccupancy){
int maxfed=0;
for(int i=0; i!=32; i++){
if(nDigisPerFed[i]>maxfed) maxfed=nDigisPerFed[i];
}
for(int i=0; i!=40; i++){
float averageOcc = 0.;
if(i<32){
float averageBPIXFed = float(nBPIXDigis-maxfed)/31.;
if(averageBPIXFed>0.) averageOcc = nDigisPerFed[i]/averageBPIXFed;
}else{
float averageFPIXFed = float(nFPIXDigis)/8.;
if(averageFPIXFed>0.) averageOcc = nDigisPerFed[i]/averageFPIXFed;
}
averageDigiOccupancy->setBinContent(i+1,averageOcc);
int lumiSections8 = int(lumiSection/8);
if (modOn){
if (avgfedDigiOccvsLumi){
avgfedDigiOccvsLumi->setBinContent(1+lumiSections8, i+1, averageOcc);
}//endif meX5
}//endif modOn
}
}

// slow down...
if(slowDown) usleep(10000);

}
Expand Down Expand Up @@ -686,11 +699,11 @@ void SiPixelDigiSource::bookMEs(DQMStore::IBooker & iBooker, const edm::EventSet
char title6[80]; sprintf(title6, "Number of Low-Efficiency Endcap ROCs;LumiSection;N_{LO EFF} Endcap ROCs");
loOccROCsEndcap = iBooker.book1D("loOccROCsEndcap",title6,500,0.,5000.);
char title7[80]; sprintf(title7, "Average digi occupancy per FED;FED;NDigis/<NDigis>");
averageDigiOccupancy = iBooker.book1D("averageDigiOccupancy",title7,40,-0.5,39.5);
averageDigiOccupancy = iBooker.bookProfile("averageDigiOccupancy",title7,40,-0.5,39.5,0.,3.);
averageDigiOccupancy->setLumiFlag();
if(modOn){
char title4[80]; sprintf(title4, "FED Digi Occupancy (NDigis/<NDigis>) vs LumiSections;Lumi Section;FED");
avgfedDigiOccvsLumi = iBooker.book2D ("avgfedDigiOccvsLumi", title4, 400,0., 3200., 40, -0.5, 39.5);
avgfedDigiOccvsLumi = iBooker.book2D ("avgfedDigiOccvsLumi", title4, 320,0., 3200., 40, -0.5, 39.5);
}
std::map<uint32_t,SiPixelDigiModule*>::iterator struct_iter;

Expand Down