CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelQuality.cc
Go to the documentation of this file.
1 // SiPixelQuality.cc
2 //
3 // class implementation to hold a list of disabled pixel modules
4 //
5 // M. Eads
6 // Apr 2008
7 
22 
23 
24 #include <algorithm>
25 #include <iostream>
26 
27 
28 using namespace sipixelobjects;
29 
30 
32  // errortype "whole" = int 0 in DB //
33  // errortype "tbmA" = int 1 in DB //
34  // errortype "tbmB" = int 2 in DB //
35  // errortype "none" = int 3 in DB //
37 
39  //each bad roc correspond to a bit to 1: num= //
40  // 0 <-> all good rocs //
41  // 1 <-> only roc 0 bad //
42  // 2<-> only roc 1 bad //
43  // 3<-> roc 0 and 1 bad //
44  // 4 <-> only roc 2 bad //
45  // ... //
47 
48 
49 // add a list of modules to the vector of disabled modules
50 void SiPixelQuality::addDisabledModule(std::vector<SiPixelQuality::disabledModuleType> & idVector) {
51  theDisabledModules.insert(theDisabledModules.end(),
52  idVector.begin(),
53  idVector.end());
54 
55 }
56 
57 
58 // bool SiPixelQuality::removeDisabledModule(const uint32_t & detid){
59 // std::vector<disabledModuleType>::const_iterator iter = std::lower_bound(theDisabledModules.begin(),theDisabledModules.end(),detid,SiPixelQuality::BadComponentStrictWeakOrdering());
60 // if (iter != theDisabledModules.end() && iter->DetID==detid){
61 // theDisabledModules.erase(iter);
62 // return true;
63 // }
64 // return false;
65 // }
66 
67 // ask if module is OK
68 bool SiPixelQuality::IsModuleUsable(const uint32_t& detid) const {
69  if(IsFedBad(detid))
70  return true;
71  std::vector<SiPixelQuality::disabledModuleType>disabledModules = theDisabledModules;
72  std::sort(disabledModules.begin(),disabledModules.end(),SiPixelQuality::BadComponentStrictWeakOrdering());
73  std::vector<disabledModuleType>::const_iterator iter = std::lower_bound(disabledModules.begin(),disabledModules.end(),detid,SiPixelQuality::BadComponentStrictWeakOrdering());
74  if (iter != disabledModules.end() && iter->DetID==detid && iter->errorType ==0)
75  return false;
76  return true;
77 }
78 
79 //ask if module is bad
80  bool SiPixelQuality::IsModuleBad(const uint32_t & detid) const {
81  if(IsFedBad(detid))
82  return true;
83  std::vector<SiPixelQuality::disabledModuleType>disabledModules = theDisabledModules;
84  std::sort(disabledModules.begin(),disabledModules.end(),SiPixelQuality::BadComponentStrictWeakOrdering());
85  std::vector<disabledModuleType>::const_iterator iter = std::lower_bound(disabledModules.begin(),disabledModules.end(),detid,SiPixelQuality::BadComponentStrictWeakOrdering());
86  if (iter != disabledModules.end() && iter->DetID==detid && iter->errorType == 0) //errorType 0 corresponds to "whole" dead module
87  return true;
88  return false;
89 }
90 
91 //ask if roc is bad
92 bool SiPixelQuality::IsRocBad(const uint32_t& detid, const short& rocNb) const {
93  if(IsModuleBad(detid))
94  return true;
95  std::vector<SiPixelQuality::disabledModuleType>disabledModules = theDisabledModules;
96  std::sort(disabledModules.begin(),disabledModules.end(),SiPixelQuality::BadComponentStrictWeakOrdering());
97  std::vector<disabledModuleType>::const_iterator iter = std::lower_bound(disabledModules.begin(),disabledModules.end(),detid,SiPixelQuality::BadComponentStrictWeakOrdering());
98  if (iter != disabledModules.end() && iter->DetID == detid){
99  return ((iter->BadRocs >> rocNb)&0x1);}
100  return false;
101 }
102 
104 
105  SiPixelFrameReverter reverter(es,map);
106  int rocfromarea = -1;
107  rocfromarea = reverter.findRocInDet(detid, global);
108 
109  return SiPixelQuality::IsRocBad(detid, rocfromarea);
110  return false;
111 }
112 
113 //ask for bad ROCS
114 
115 
116 short SiPixelQuality::getBadRocs(const uint32_t& detid) const{
117  std::vector<SiPixelQuality::disabledModuleType>disabledModules = theDisabledModules;
118  std::sort(disabledModules.begin(),disabledModules.end(),SiPixelQuality::BadComponentStrictWeakOrdering());
119  std::vector<disabledModuleType>::const_iterator iter = std::lower_bound(disabledModules.begin(),disabledModules.end(),detid,SiPixelQuality::BadComponentStrictWeakOrdering());
120  if (iter != disabledModules.end() && iter->DetID==detid)
121  return iter->BadRocs;
122  return 0;
123 }
124 
125 const std::vector<LocalPoint> SiPixelQuality::getBadRocPositions(const uint32_t & detid, const TrackerGeometry& theTracker, const SiPixelFedCabling* map) const{
126  std::vector<LocalPoint> badrocpositions (0);
127  std::pair<uint8_t, uint8_t> coord(1,1);
128  for(unsigned int i = 0; i < 16; i++){
129  if (IsRocBad(detid, i) == true){
130  std::vector<CablingPathToDetUnit> path = map->pathToDetUnit(detid);
131  typedef std::vector<CablingPathToDetUnit>::const_iterator IT;
132  for (IT it = path.begin(); it != path.end(); ++it) {
133  const PixelROC * myroc = map->findItem(*it);
134  if( myroc->idInDetUnit() == i) {
135  LocalPixel::RocRowCol local = { 39, 25}; //corresponding to center of ROC row, col
136  GlobalPixel global = myroc->toGlobal( LocalPixel(local) );
137  // edm::ESHandle<TrackerGeometry> geom;
138  // es.get<TrackerDigiGeometryRecord>().get( geom );
139  // const TrackerGeometry& theTracker(*geom);
140  const PixelGeomDetUnit * theGeomDet = dynamic_cast<const PixelGeomDetUnit*> (theTracker.idToDet(detid) );
141 
142  PixelTopology const * topology = &(theGeomDet->specificTopology());
143 
144  MeasurementPoint thepoint(global.row, global.col);
145  LocalPoint localpoint = topology->localPosition(thepoint);
146  badrocpositions.push_back(localpoint);
147  break;
148  }
149  }
150  }
151  }
152  return badrocpositions;
153 }
154 
155 
156 bool SiPixelQuality::IsFedBad(const uint32_t & detid) const{
157  return false;
158 }
159 
160 
161 
void addDisabledModule(disabledModuleType module)
int i
Definition: DBlmapReader.cc:9
GlobalPixel toGlobal(const LocalPixel &loc) const
Definition: PixelROC.cc:44
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
virtual const sipixelobjects::PixelROC * findItem(const sipixelobjects::CablingPathToDetUnit &) const =0
virtual std::vector< sipixelobjects::CablingPathToDetUnit > pathToDetUnit(uint32_t rawDetId) const =0
bool IsFedBad(const uint32_t &detid) const
bool IsRocBad(const uint32_t &detid, const short &rocNb) const
identify pixel inside single ROC
Definition: LocalPixel.h:7
int path() const
Definition: HLTadd.h:3
global coordinates (row and column in DetUnit, as in PixelDigi)
Definition: GlobalPixel.h:6
const std::vector< LocalPoint > getBadRocPositions(const uint32_t &detid, const TrackerGeometry &theTracker, const SiPixelFedCabling *map) const
unsigned int idInDetUnit() const
id of this ROC in DetUnit etermined by token path
Definition: PixelROC.h:43
std::vector< LinkConnSpec >::const_iterator IT
bool IsModuleUsable(const uint32_t &detid) const
bool IsModuleBad(const uint32_t &detid) const
virtual const GeomDet * idToDet(DetId) const
short findRocInDet(uint32_t detId, sipixelobjects::GlobalPixel global)
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
row and collumn in ROC representation
Definition: LocalPixel.h:15
short getBadRocs(const uint32_t &detid) const
bool IsAreaBad(uint32_t detid, sipixelobjects::GlobalPixel global, const edm::EventSetup &es, const SiPixelFedCabling *map) const