55 outputBase_(iConfig.getParameter<
ParameterSet>(
"SiPixelStatusManagerParameters").getUntrackedParameter<
std::
string>(
"outputBase")),
56 aveDigiOcc_(iConfig.getParameter<
ParameterSet>(
"SiPixelStatusManagerParameters").getUntrackedParameter<
int>(
"aveDigiOcc")),
57 nLumi_(iConfig.getParameter<
edm::
ParameterSet>(
"SiPixelStatusManagerParameters").getUntrackedParameter<
int>(
"resetEveryNLumi")),
58 moduleName_(iConfig.getParameter<
ParameterSet>(
"SiPixelStatusManagerParameters").getUntrackedParameter<
std::
string>(
"moduleName")),
59 label_(iConfig.getParameter<
ParameterSet>(
"SiPixelStatusManagerParameters").getUntrackedParameter<
std::
string>(
"label")){
102 if (pgdu ==
nullptr)
continue;
103 DetId detId = (*it)->geographicalId();
104 int detid = detId.
rawId();
113 unsigned int nrocs = nROCrows*nROCcolumns;
116 std::map<int, std::pair<int,int> > rocToOfflinePixel;
119 typedef std::vector<sipixelobjects::CablingPathToDetUnit>::const_iterator
IT;
120 for(IT it = path.begin(); it != path.end(); ++it) {
129 rocToOfflinePixel[idInDetUnit] = std::pair<int,int>(global.
row, global.
col);
151 std::vector<int> vDetId;
155 for(
unsigned int i = 0;
i<badComponentList.size();
i++){
159 uint32_t detId = badComponentList[
i].DetID;
160 int detid =
int(detId);
163 for(
int iroc = 0; iroc<
int(nroc); iroc++){
165 std::map<int, std::pair<int,int> > rocToOfflinePixel =
pixelO2O_[detid];
166 int row = rocToOfflinePixel[iroc].first;
167 int column = rocToOfflinePixel[iroc].second;
179 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t> finalIOV;
180 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t> fedError25IOV;
181 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t> pclIOV;
186 std::map<int, SiPixelQuality*> siPixelQualityStuckTBM_Tag;
198 if(nextIt!=FEDerror25Map.end()) interval =
int(nextIt->first - it->first);
204 std::map<int, std::vector<int> > tmpFEDerror25 = it->second;
205 for(
std::map<
int, std::vector<int> >::iterator ilist = tmpFEDerror25.begin(); ilist!=tmpFEDerror25.end();ilist++){
207 int detid = ilist->first;
208 uint32_t detId = uint32_t(detid);
212 BadModule_stuckTBM.
DetID = uint32_t(detid); BadModule_FEDerror25.
DetID = uint32_t(detid);
216 std::vector<uint32_t> BadRocList_stuckTBM, BadRocList_FEDerror25;
217 std::vector<int>
list = ilist->second;
219 for(
unsigned int i=0;
i<list.size();
i++){
222 std::map<int, std::pair<int,int> > rocToOfflinePixel =
pixelO2O_[detid];
223 int row = rocToOfflinePixel[iroc].first;
224 int column = rocToOfflinePixel[iroc].second;
226 BadRocList_FEDerror25.push_back(uint32_t(iroc));
227 for (
int iLumi = 0; iLumi<interval;iLumi++){
233 BadRocList_stuckTBM.push_back(uint32_t(iroc));
234 for (
int iLumi = 0; iLumi<interval;iLumi++){
245 short badrocs_stuckTBM = 0;
246 for(std::vector<uint32_t>::iterator iter = BadRocList_stuckTBM.begin(); iter != BadRocList_stuckTBM.end(); ++iter){
247 badrocs_stuckTBM += 1 << *iter;
250 if(badrocs_stuckTBM!=0){
251 BadModule_stuckTBM.
BadRocs = badrocs_stuckTBM;
256 if(BadRocList_FEDerror25.size()==
sensorSize_[detid])
259 short badrocs_FEDerror25 = 0;
260 for(std::vector<uint32_t>::iterator iter = BadRocList_FEDerror25.begin(); iter != BadRocList_FEDerror25.end(); ++iter){
261 badrocs_FEDerror25 += 1 << *iter;
264 if(badrocs_FEDerror25!=0){
265 BadModule_FEDerror25.
BadRocs = badrocs_FEDerror25;
271 siPixelQualityStuckTBM_Tag[it->first] = siPixelQuality_stuckTBM;
273 finalIOV[it->first] = it->first;
274 fedError25IOV[it->first] = it->first;
279 delete siPixelQuality_FEDerror25;
285 finalIOV[it->first] = it->first;
286 pclIOV[it->first] = it->first;
290 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t>::iterator itIOV;
293 std::map<int, SiPixelQuality*> siPixelQualityPCL_Tag;
294 std::map<int, SiPixelQuality*> siPixelQualityPrompt_Tag;
295 std::map<int, SiPixelQuality*> siPixelQualityOther_Tag;
297 for(itIOV=finalIOV.begin();itIOV!=finalIOV.end();itIOV++){
300 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t>::iterator nextItIOV =
std::next(itIOV);
301 if(nextItIOV!=finalIOV.end()) interval =
int(nextItIOV->first - itIOV->first);
308 std::map<int, std::vector<int> > tmpFEDerror25 = FEDerror25Map[lumiFEDerror25];
319 <<
"Tag requested for prompt in low statistics IOV in the "<<
outputBase_<<
" harvester"<< std::endl;
320 siPixelQualityPCL_Tag[itIOV->first] = siPixelQualityPermBad;
321 siPixelQualityPrompt_Tag[itIOV->first] = siPixelQualityPermBad;
325 <<
"Tag requested for other in low statistics IOV in the "<<
outputBase_<<
" harvester"<< std::endl;
342 std::map<int, SiPixelModuleStatus> detectorStatus = tmpSiPixelStatus.
getDetectorStatus();
343 std::map<int, SiPixelModuleStatus>::iterator itModEnd = detectorStatus.end();
344 for (std::map<int, SiPixelModuleStatus>::iterator itMod = detectorStatus.begin(); itMod != itModEnd; ++itMod) {
349 int detid = itMod->first;
350 uint32_t detId = uint32_t(detid);
352 BadModulePCL.
DetID = uint32_t(detid); BadModuleOther.
DetID = uint32_t(detid);
356 std::vector<uint32_t> BadRocListPCL, BadRocListOther;
360 std::vector<int> listFEDerror25 = tmpFEDerror25[detid];
362 for (
int iroc = 0; iroc < modStatus.
nrocs(); ++iroc) {
364 unsigned int rocOccupancy = modStatus.
digiOccROC(iroc);
367 if(rocOccupancy<1.
e-4*DetAverage){
369 std::map<int, std::pair<int,int> > rocToOfflinePixel =
pixelO2O_[detid];
370 int row = rocToOfflinePixel[iroc].first;
371 int column = rocToOfflinePixel[iroc].second;
374 BadRocListPCL.push_back(uint32_t(iroc));
375 for (
int iLumi = 0; iLumi<interval;iLumi++){
380 std::vector<int>::iterator it =
std::find(listFEDerror25.begin(), listFEDerror25.end(),iroc);
385 BadRocListOther.push_back(uint32_t(iroc));
386 for (
int iLumi = 0; iLumi<interval;iLumi++){
400 short badrocsPCL = 0;
401 for(std::vector<uint32_t>::iterator iterPCL = BadRocListPCL.begin(); iterPCL != BadRocListPCL.end(); ++iterPCL){
402 badrocsPCL += 1 << *iterPCL;
405 BadModulePCL.
BadRocs = badrocsPCL;
410 short badrocsOther = 0;
411 for(std::vector<uint32_t>::iterator iterOther = BadRocListOther.begin(); iterOther != BadRocListOther.end(); ++iterOther){
412 badrocsOther += 1 << *iterOther;
415 BadModuleOther.
BadRocs = badrocsOther;
421 BadModulePrompt.
DetID = uint32_t(detid);
425 std::vector<uint32_t> BadRocListPrompt;
426 for (
int iroc = 0; iroc < modStatus.
nrocs(); ++iroc) {
429 BadRocListPrompt.push_back(uint32_t(iroc));
431 std::map<int, std::pair<int,int> > rocToOfflinePixel =
pixelO2O_[detid];
432 int row = rocToOfflinePixel[iroc].first;
433 int column = rocToOfflinePixel[iroc].second;
434 for (
int iLumi = 0; iLumi<interval;iLumi++){
443 short badrocsPrompt = 0;
444 for(std::vector<uint32_t>::iterator iterPrompt = BadRocListPrompt.begin(); iterPrompt != BadRocListPrompt.end(); ++iterPrompt){
445 badrocsPrompt += 1 << *iterPrompt;
447 if(badrocsPrompt!=0){
448 BadModulePrompt.
BadRocs = badrocsPrompt;
455 siPixelQualityPCL_Tag[itIOV->first] = siPixelQualityPCL;
457 siPixelQualityPrompt_Tag[itIOV->first] = siPixelQualityPrompt;
459 siPixelQualityOther_Tag[itIOV->first] = siPixelQualityOther;
486 delete siPixelQualityDummy;
489 delete siPixelQualityPermBad;
514 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t>::iterator itIOV;
515 for(itIOV=IOV.begin();itIOV!=IOV.end();itIOV++){
516 std::map<edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t>::iterator nextItIOV;
517 nextItIOV = itIOV; nextItIOV++;
519 if(nextItIOV!=IOV.end()){
520 if(pin>=itIOV->first && pin<nextItIOV->
first){
525 if(pin>=itIOV->first){
533 return (IOV.begin())->
first;
539 std::vector<SiPixelQuality::disabledModuleType> badRocListA;
540 std::vector<SiPixelQuality::disabledModuleType> badRocListB;
549 if(badRocListA.size()!=badRocListB.size())
return false;
555 for(
unsigned int i = 0;
i<badRocListA.size();
i++){
557 uint32_t detIdA = badRocListA[
i].DetID;
558 uint32_t detIdB = badRocListB[
i].DetID;
559 if(detIdA!=detIdB)
return false;
561 unsigned short BadRocsA = badRocListA[
i].BadRocs;
562 unsigned short BadRocsB = badRocListA[
i].BadRocs;
563 if(BadRocsA!=BadRocsB)
return false;
577 for (std::map<int, SiPixelQuality*>::iterator qIt = siPixelQualityTag.begin(); qIt != siPixelQualityTag.end(); ++qIt) {
583 if(qIt==siPixelQualityTag.begin())
void endLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) final
void addDisabledModule(disabledModuleType module)
T getUntrackedParameter(std::string const &, T const &) const
virtual int nrows() const =0
virtual int rowsperroc() const =0
bool equal(SiPixelQuality *a, SiPixelQuality *b)
std::map< int, unsigned int > sensorSize_
void constructTag(std::map< int, SiPixelQuality * >siPixelQualityTag, edm::Service< cond::service::PoolDBOutputService > &poolDbService, std::string tagName, edm::Run &iRun)
#define DEFINE_FWK_MODULE(type)
const std::map< edm::LuminosityBlockNumber_t, std::map< int, std::vector< int > > > & getFEDerror25Rocs()
edm::LuminosityBlockNumber_t endLumiBlock_
constexpr uint32_t rawId() const
get the raw id
virtual std::map< uint32_t, std::vector< sipixelobjects::CablingPathToDetUnit > > det2PathMap() const =0
bool IsRocBad(const uint32_t &detid, const short &rocNb) const
edm::LuminosityBlockNumber_t stepIOV(edm::LuminosityBlockNumber_t pin, std::map< edm::LuminosityBlockNumber_t, edm::LuminosityBlockNumber_t > IOV)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
unsigned int LuminosityBlockNumber_t
~SiPixelStatusHarvester() override
SiPixelStatusManager siPixelStatusManager_
identify pixel inside single ROC
global coordinates (row and column in DetUnit, as in PixelDigi)
LuminosityBlockNumber_t luminosityBlock() const
U second(std::pair< T, U > const &p)
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
unsigned long long Time_t
virtual int colsperroc() const =0
const SiPixelQuality * badPixelInfo_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
unsigned int idInDetUnit() const
id of this ROC in DetUnit etermined by token path
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
const std::vector< disabledModuleType > getBadComponentList() const
const SiPixelFedCabling * cablingMap_
std::vector< LinkConnSpec >::const_iterator IT
const TrackerGeometry * trackerGeometry_
void endRunProduce(edm::Run &, const edm::EventSetup &) final
std::map< int, SiPixelModuleStatus > getDetectorStatus()
std::map< edm::LuminosityBlockNumber_t, std::map< int, std::vector< int > > >::iterator FEDerror25Map_iterator
virtual const sipixelobjects::PixelROC * findItem(const sipixelobjects::CablingPathToDetUnit &) const =0
SiPixelStatusHarvester(const edm::ParameterSet &)
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
row and collumn in ROC representation
std::map< int, std::map< int, std::pair< int, int > > > pixelO2O_
std::map< edm::LuminosityBlockNumber_t, SiPixelDetectorStatus >::iterator siPixelStatusMap_iterator
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) final
std::vector< HistogramManager > histo
virtual int ncolumns() const =0
unsigned int digiOccROC(int iroc)
return ROC status (= hits on ROC iroc)
void readLumi(const edm::LuminosityBlock &)
const std::map< edm::LuminosityBlockNumber_t, SiPixelDetectorStatus > & getBadComponents()
T const * product() const
void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) final
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
GlobalPixel toGlobal(const LocalPixel &loc) const