Skip to content

Commit

Permalink
Avoid empty FED occupancy plot in PixDQM
Browse files Browse the repository at this point in the history
  • Loading branch information
fioriNTU committed Sep 8, 2015
1 parent 2c91b74 commit a0ff98f
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 45 deletions.
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
109 changes: 64 additions & 45 deletions DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc
Expand Up @@ -98,6 +98,64 @@ 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){
float entry=(averageDigiOccupancy->getBinContent(i+1) * (nLumiSecs-1) + averageOcc)/nLumiSecs; //this is the mean of the actual value + the bin entry already present in the histo, that is what we want in Offline GUI
averageDigiOccupancy->setBinContent(i+1,entry);
}

if (modOn && nLumiSecs%10==0){
averageDigiOccupancy->setBinContent(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 ten the 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 +242,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 @@ -198,23 +256,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 +270,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 +493,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 @@ -535,32 +579,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup&
if(pixEvtsPerBX) pixEvtsPerBX->Fill(float(bx));
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 @@ -690,7 +709,7 @@ void SiPixelDigiSource::bookMEs(DQMStore::IBooker & iBooker, const edm::EventSet
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

0 comments on commit a0ff98f

Please sign in to comment.