From f450e70e0c80861ea83803547367bb3574772b1e Mon Sep 17 00:00:00 2001 From: Francesco Fiori Date: Tue, 8 Sep 2015 18:52:58 +0200 Subject: [PATCH] Avoid empty FED ocuupancy histo in Pix DQM --- .../interface/SiPixelDigiSource.h | 3 + .../src/SiPixelDigiSource.cc | 109 ++++++++++-------- 2 files changed, 67 insertions(+), 45 deletions(-) diff --git a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h index 98773757e9e88..ed7bf87e19967 100644 --- a/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h +++ b/DQM/SiPixelMonitorDigi/interface/SiPixelDigiSource.h @@ -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); diff --git a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc index 27d0b572820cf..dd0fbd8a62734 100644 --- a/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc +++ b/DQM/SiPixelMonitorDigi/src/SiPixelDigiSource.cc @@ -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 << "/" @@ -184,7 +242,7 @@ void SiPixelDigiSource::analyze(const edm::Event& iEvent, const edm::EventSetup& edm::ESHandle tTopoHandle; iSetup.get().get(tTopoHandle); const TrackerTopology *pTT = tTopoHandle.product(); - + eventNo++; // get input data @@ -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::iterator struct_iter; for(int i=0; i!=192; i++) numberOfDigis[i]=0; for(int i=0; i!=1152; i++) nDigisPerChan[i]=0; @@ -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(PixelSubdetector::PixelBarrel); @@ -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 tempPair = (*struct_iter).second->getZeroLoEffROCs(); if (barrel){ @@ -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); @@ -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/) 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::iterator struct_iter;