CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiStripQualityStatistics.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiStripQualityStatistics
4 // Class: SiStripQualityStatistics
5 //
13 //
14 // Original Author: Domenico GIORDANO
15 // Created: Wed Oct 3 12:11:10 CEST 2007
16 //
17 //
19 
21 
24 
25 #include <iostream>
26 #include <iomanip>
27 #include <stdio.h>
28 #include <sys/time.h>
29 
30 
32  m_cacheID_(0),
33  dataLabel_(iConfig.getUntrackedParameter<std::string>("dataLabel","")),
34  TkMapFileName_(iConfig.getUntrackedParameter<std::string>("TkMapFileName","")),
35  fp_(iConfig.getUntrackedParameter<edm::FileInPath>("file",edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))),
36  saveTkHistoMap_(iConfig.getUntrackedParameter<bool>("SaveTkHistoMap",true)),
37  tkMap(0),tkMapFullIOVs(0)
38 {
40 
41  tkMapFullIOVs=new TrackerMap( "BadComponents" );
42  tkhisto=0;
43  if (TkMapFileName_!=""){
44  tkhisto =new TkHistoMap("BadComp","BadComp",-1.); //here the baseline (the value of the empty,not assigned bins) is put to -1 (default is zero)
45  }
46 }
47 
49 
51  if (filename!=""){
52  tkMapFullIOVs->save(false,0,0,filename.c_str());
53  filename.erase(filename.begin()+filename.find("."),filename.end());
54  tkMapFullIOVs->print(false,0,0,filename.c_str());
55 
56  if(saveTkHistoMap_){
57  tkhisto->save(filename+".root");
58  tkhisto->saveAsCanvas(filename+"_Canvas.root","E");
59  }
60  }
61 }
62 
64  //Retrieve tracker topology from geometry
66  iSetup.get<IdealGeometryRecord>().get(tTopoHandle);
67  const TrackerTopology* const tTopo = tTopoHandle.product();
68 
69  unsigned long long cacheID = iSetup.get<SiStripQualityRcd>().cacheIdentifier();
70 
71  std::stringstream ss;
72 
73  if (m_cacheID_ == cacheID)
74  return;
75 
76  m_cacheID_ = cacheID;
77 
78  edm::ESHandle<SiStripQuality> SiStripQuality_;
79  iSetup.get<SiStripQualityRcd>().get(dataLabel_,SiStripQuality_);
80 
81  for(int i=0;i<4;++i){
82  NTkBadComponent[i]=0;
83  for(int j=0;j<19;++j){
84  ssV[i][j].str("");
85  for(int k=0;k<4;++k)
86  NBadComponent[i][j][k]=0;
87  }
88  }
89 
90  if (tkMap)
91  delete tkMap;
92  tkMap=new TrackerMap( "BadComponents" );
93 
94 
95  ss.str("");
96  std::vector<uint32_t> detids=reader->getAllDetIds();
97  std::vector<uint32_t>::const_iterator idet=detids.begin();
98  for(;idet!=detids.end();++idet){
99  ss << "detid " << (*idet) << " IsModuleUsable " << SiStripQuality_->IsModuleUsable((*idet)) << "\n";
100  if (SiStripQuality_->IsModuleUsable((*idet)))
101  tkMap->fillc(*idet,0x00ff00);
102  }
103  LogDebug("SiStripQualityStatistics") << ss.str() << std::endl;
104 
105 
106  std::vector<SiStripQuality::BadComponent> BC = SiStripQuality_->getBadComponentList();
107 
108  for (size_t i=0;i<BC.size();++i){
109 
110  //&&&&&&&&&&&&&
111  //Full Tk
112  //&&&&&&&&&&&&&
113 
114  if (BC[i].BadModule)
115  NTkBadComponent[0]++;
116  if (BC[i].BadFibers)
117  NTkBadComponent[1]+= ( (BC[i].BadFibers>>2)&0x1 )+ ( (BC[i].BadFibers>>1)&0x1 ) + ( (BC[i].BadFibers)&0x1 );
118  if (BC[i].BadApvs)
119  NTkBadComponent[2]+= ( (BC[i].BadApvs>>5)&0x1 )+ ( (BC[i].BadApvs>>4)&0x1 ) + ( (BC[i].BadApvs>>3)&0x1 ) +
120  ( (BC[i].BadApvs>>2)&0x1 )+ ( (BC[i].BadApvs>>1)&0x1 ) + ( (BC[i].BadApvs)&0x1 );
121 
122  //&&&&&&&&&&&&&&&&&
123  //Single SubSyste
124  //&&&&&&&&&&&&&&&&&
125 
126  int component;
127  SiStripDetId a(BC[i].detid);
128  if ( a.subdetId() == SiStripDetId::TIB ){
129  //&&&&&&&&&&&&&&&&&
130  //TIB
131  //&&&&&&&&&&&&&&&&&
132 
133  component=tTopo->tibLayer(BC[i].detid);
134  SetBadComponents(0, component, BC[i]);
135 
136  } else if ( a.subdetId() == SiStripDetId::TID ) {
137  //&&&&&&&&&&&&&&&&&
138  //TID
139  //&&&&&&&&&&&&&&&&&
140 
141  component=tTopo->tidSide(BC[i].detid)==2?tTopo->tidWheel(BC[i].detid):tTopo->tidWheel(BC[i].detid)+3;
142  SetBadComponents(1, component, BC[i]);
143 
144  } else if ( a.subdetId() == SiStripDetId::TOB ) {
145  //&&&&&&&&&&&&&&&&&
146  //TOB
147  //&&&&&&&&&&&&&&&&&
148 
149  component=tTopo->tobLayer(BC[i].detid);
150  SetBadComponents(2, component, BC[i]);
151 
152  } else if ( a.subdetId() == SiStripDetId::TEC ) {
153  //&&&&&&&&&&&&&&&&&
154  //TEC
155  //&&&&&&&&&&&&&&&&&
156 
157  component=tTopo->tecSide(BC[i].detid)==2?tTopo->tecWheel(BC[i].detid):tTopo->tecWheel(BC[i].detid)+9;
158  SetBadComponents(3, component, BC[i]);
159 
160  }
161  }
162 
163  //&&&&&&&&&&&&&&&&&&
164  // Single Strip Info
165  //&&&&&&&&&&&&&&&&&&
166  float percentage=0;
167 
168  SiStripQuality::RegistryIterator rbegin = SiStripQuality_->getRegistryVectorBegin();
169  SiStripQuality::RegistryIterator rend = SiStripQuality_->getRegistryVectorEnd();
170 
171  for (SiStripBadStrip::RegistryIterator rp=rbegin; rp != rend; ++rp) {
172  uint32_t detid=rp->detid;
173 
174  int subdet=-999; int component=-999;
175  SiStripDetId a(detid);
176  if ( a.subdetId() == 3 ){
177  subdet=0;
178  component=tTopo->tibLayer(detid);
179  } else if ( a.subdetId() == 4 ) {
180  subdet=1;
181  component=tTopo->tidSide(detid)==2?tTopo->tidWheel(detid):tTopo->tidWheel(detid)+3;
182  } else if ( a.subdetId() == 5 ) {
183  subdet=2;
184  component=tTopo->tobLayer(detid);
185  } else if ( a.subdetId() == 6 ) {
186  subdet=3;
187  component=tTopo->tecSide(detid)==2?tTopo->tecWheel(detid):tTopo->tecWheel(detid)+9;
188  }
189 
190  SiStripQuality::Range sqrange = SiStripQuality::Range( SiStripQuality_->getDataVectorBegin()+rp->ibegin , SiStripQuality_->getDataVectorBegin()+rp->iend );
191 
192  percentage=0;
193  for(int it=0;it<sqrange.second-sqrange.first;it++){
194  unsigned int range=SiStripQuality_->decode( *(sqrange.first+it) ).range;
195  NTkBadComponent[3]+=range;
196  NBadComponent[subdet][0][3]+=range;
197  NBadComponent[subdet][component][3]+=range;
198  percentage+=range;
199  }
200  if(percentage!=0)
201  percentage/=128.*reader->getNumberOfApvsAndStripLength(detid).first;
202  if(percentage>1)
203  edm::LogError("SiStripQualityStatistics") << "PROBLEM detid " << detid << " value " << percentage<< std::endl;
204 
205  //------- Global Statistics on percentage of bad components along the IOVs ------//
206  tkMapFullIOVs->fill(detid,percentage);
207  if(tkhisto!=NULL)
208  tkhisto->fill(detid,percentage);
209  }
210 
211 
212  //&&&&&&&&&&&&&&&&&&
213  // printout
214  //&&&&&&&&&&&&&&&&&&
215 
216  ss.str("");
217  ss << "\n-----------------\nNew IOV starting from run " << e.id().run() << " event " << e.id().event() << " lumiBlock " << e.luminosityBlock() << " time " << e.time().value() << " chacheID " << m_cacheID_ << "\n-----------------\n";
218  ss << "\n-----------------\nGlobal Info\n-----------------";
219  ss << "\nBadComponent \t Modules \tFibers \tApvs\tStrips\n----------------------------------------------------------------";
220  ss << "\nTracker:\t\t"<<NTkBadComponent[0]<<"\t"<<NTkBadComponent[1]<<"\t"<<NTkBadComponent[2]<<"\t"<<NTkBadComponent[3];
221  ss<< "\n";
222  ss << "\nTIB:\t\t\t"<<NBadComponent[0][0][0]<<"\t"<<NBadComponent[0][0][1]<<"\t"<<NBadComponent[0][0][2]<<"\t"<<NBadComponent[0][0][3];
223  ss << "\nTID:\t\t\t"<<NBadComponent[1][0][0]<<"\t"<<NBadComponent[1][0][1]<<"\t"<<NBadComponent[1][0][2]<<"\t"<<NBadComponent[1][0][3];
224  ss << "\nTOB:\t\t\t"<<NBadComponent[2][0][0]<<"\t"<<NBadComponent[2][0][1]<<"\t"<<NBadComponent[2][0][2]<<"\t"<<NBadComponent[2][0][3];
225  ss << "\nTEC:\t\t\t"<<NBadComponent[3][0][0]<<"\t"<<NBadComponent[3][0][1]<<"\t"<<NBadComponent[3][0][2]<<"\t"<<NBadComponent[3][0][3];
226  ss << "\n";
227 
228  for (int i=1;i<5;++i)
229  ss << "\nTIB Layer " << i << " :\t\t"<<NBadComponent[0][i][0]<<"\t"<<NBadComponent[0][i][1]<<"\t"<<NBadComponent[0][i][2]<<"\t"<<NBadComponent[0][i][3];
230  ss << "\n";
231  for (int i=1;i<4;++i)
232  ss << "\nTID+ Disk " << i << " :\t\t"<<NBadComponent[1][i][0]<<"\t"<<NBadComponent[1][i][1]<<"\t"<<NBadComponent[1][i][2]<<"\t"<<NBadComponent[1][i][3];
233  for (int i=4;i<7;++i)
234  ss << "\nTID- Disk " << i-3 << " :\t\t"<<NBadComponent[1][i][0]<<"\t"<<NBadComponent[1][i][1]<<"\t"<<NBadComponent[1][i][2]<<"\t"<<NBadComponent[1][i][3];
235  ss << "\n";
236  for (int i=1;i<7;++i)
237  ss << "\nTOB Layer " << i << " :\t\t"<<NBadComponent[2][i][0]<<"\t"<<NBadComponent[2][i][1]<<"\t"<<NBadComponent[2][i][2]<<"\t"<<NBadComponent[2][i][3];
238  ss << "\n";
239  for (int i=1;i<10;++i)
240  ss << "\nTEC+ Disk " << i << " :\t\t"<<NBadComponent[3][i][0]<<"\t"<<NBadComponent[3][i][1]<<"\t"<<NBadComponent[3][i][2]<<"\t"<<NBadComponent[3][i][3];
241  for (int i=10;i<19;++i)
242  ss << "\nTEC- Disk " << i-9 << " :\t\t"<<NBadComponent[3][i][0]<<"\t"<<NBadComponent[3][i][1]<<"\t"<<NBadComponent[3][i][2]<<"\t"<<NBadComponent[3][i][3];
243  ss<< "\n";
244 
245  ss << "\n----------------------------------------------------------------\n\t\t Detid \tModules Fibers Apvs\n----------------------------------------------------------------";
246  for (int i=1;i<5;++i)
247  ss << "\nTIB Layer " << i << " :" << ssV[0][i].str();
248  ss << "\n";
249  for (int i=1;i<4;++i)
250  ss << "\nTID+ Disk " << i << " :" << ssV[1][i].str();
251  for (int i=4;i<7;++i)
252  ss << "\nTID- Disk " << i-3 << " :" << ssV[1][i].str();
253  ss << "\n";
254  for (int i=1;i<7;++i)
255  ss << "\nTOB Layer " << i << " :" << ssV[2][i].str();
256  ss << "\n";
257  for (int i=1;i<10;++i)
258  ss << "\nTEC+ Disk " << i << " :" << ssV[3][i].str();
259  for (int i=10;i<19;++i)
260  ss << "\nTEC- Disk " << i-9 << " :" << ssV[3][i].str();
261 
262 
263  edm::LogInfo("SiStripQualityStatistics") << ss.str() << std::endl;
264 
266  std::stringstream sRun; sRun.str("");
267  sRun << "_Run_" << std::setw(6) << std::setfill('0')<< e.id().run() << std::setw(0) ;
268 
269  if (filename!=""){
270  filename.insert(filename.find("."),sRun.str());
271  tkMap->save(true,0,0,filename.c_str());
272  filename.erase(filename.begin()+filename.find("."),filename.end());
273  tkMap->print(true,0,0,filename.c_str());
274  }
275 }
276 
277 
278 void SiStripQualityStatistics::SetBadComponents(int i, int component,SiStripQuality::BadComponent& BC){
279 
280  int napv=reader->getNumberOfApvsAndStripLength(BC.detid).first;
281 
282  ssV[i][component] << "\n\t\t "
283  << BC.detid
284  << " \t " << BC.BadModule << " \t "
285  << ( (BC.BadFibers)&0x1 ) << " ";
286  if (napv==4)
287  ssV[i][component] << "x " <<( (BC.BadFibers>>1)&0x1 );
288 
289  if (napv==6)
290  ssV[i][component] << ( (BC.BadFibers>>1)&0x1 ) << " "
291  << ( (BC.BadFibers>>2)&0x1 );
292  ssV[i][component] << " \t "
293  << ( (BC.BadApvs)&0x1 ) << " "
294  << ( (BC.BadApvs>>1)&0x1 ) << " ";
295  if (napv==4)
296  ssV[i][component] << "x x " << ( (BC.BadApvs>>2)&0x1 ) << " "
297  << ( (BC.BadApvs>>3)&0x1 );
298  if (napv==6)
299  ssV[i][component] << ( (BC.BadApvs>>2)&0x1 ) << " "
300  << ( (BC.BadApvs>>3)&0x1 ) << " "
301  << ( (BC.BadApvs>>4)&0x1 ) << " "
302  << ( (BC.BadApvs>>5)&0x1 ) << " ";
303 
304  if (BC.BadApvs){
305  NBadComponent[i][0][2]+= ( (BC.BadApvs>>5)&0x1 )+ ( (BC.BadApvs>>4)&0x1 ) + ( (BC.BadApvs>>3)&0x1 ) +
306  ( (BC.BadApvs>>2)&0x1 )+ ( (BC.BadApvs>>1)&0x1 ) + ( (BC.BadApvs)&0x1 );
307  NBadComponent[i][component][2]+= ( (BC.BadApvs>>5)&0x1 )+ ( (BC.BadApvs>>4)&0x1 ) + ( (BC.BadApvs>>3)&0x1 ) +
308  ( (BC.BadApvs>>2)&0x1 )+ ( (BC.BadApvs>>1)&0x1 ) + ( (BC.BadApvs)&0x1 );
309  tkMap->fillc(BC.detid,0xff0000);
310  }
311  if (BC.BadFibers){
312  NBadComponent[i][0][1]+= ( (BC.BadFibers>>2)&0x1 )+ ( (BC.BadFibers>>1)&0x1 ) + ( (BC.BadFibers)&0x1 );
313  NBadComponent[i][component][1]+= ( (BC.BadFibers>>2)&0x1 )+ ( (BC.BadFibers>>1)&0x1 ) + ( (BC.BadFibers)&0x1 );
314  tkMap->fillc(BC.detid,0x0000ff);
315  }
316  if (BC.BadModule){
317  NBadComponent[i][0][0]++;
318  NBadComponent[i][component][0]++;
319  tkMap->fillc(BC.detid,0x0);
320  }
321 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:42
EventNumber_t event() const
Definition: EventID.h:44
int i
Definition: DBlmapReader.cc:9
unsigned int tibLayer(const DetId &id) const
void SetBadComponents(int, int, SiStripQuality::BadComponent &)
const std::pair< unsigned short, double > getNumberOfApvsAndStripLength(uint32_t detId) const
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:59
#define NULL
Definition: scimark2.h:8
unsigned int tidWheel(const DetId &id) const
Registry::const_iterator RegistryIterator
void saveAsCanvas(std::string filename, std::string options="", std::string mode="RECREATE")
Definition: TkHistoMap.cc:252
void analyze(const edm::Event &, const edm::EventSetup &)
void save(std::string filename)
Definition: TkHistoMap.cc:57
unsigned int tidSide(const DetId &id) const
const std::vector< uint32_t > & getAllDetIds() const
void fill(uint32_t &detid, float value)
Definition: TkHistoMap.cc:180
void save(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap.svg", int width=1500, int height=800)
Definition: TrackerMap.cc:698
int j
Definition: DBlmapReader.cc:9
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
void fillc(int idmod, int RGBcode)
Definition: TrackerMap.h:103
std::stringstream ssV[4][19]
int k[5][pyjets_maxn]
Detector identifier class for the strip tracker.
Definition: SiStripDetId.h:17
PixelRecoRange< float > Range
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
edm::EventID id() const
Definition: EventBase.h:56
double a
Definition: hdecay.h:121
void print(bool print_total=true, float minval=0., float maxval=0., std::string s="svgmap")
Definition: TrackerMap.cc:2432
tuple filename
Definition: lut2db_cfg.py:20
SiStripDetInfoFileReader * reader
SiStripQualityStatistics(const edm::ParameterSet &)
std::string fullPath() const
Definition: FileInPath.cc:165
unsigned int tecWheel(const DetId &id) const
TimeValue_t value() const
Definition: Timestamp.h:56
edm::Timestamp time() const
Definition: EventBase.h:57
void fill(int layer, int ring, int nmod, float x)
Definition: TrackerMap.cc:2776
unsigned int tobLayer(const DetId &id) const
unsigned int tecSide(const DetId &id) const