CMS 3D CMS Logo

SiPixelDetectorStatus.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <map>
4 #include <cmath>
5 #include <vector>
6 
7 #include <TString.h>
8 #include <TMath.h>
9 #include <TH1.h>
10 
12 
13 // ----------------------------------------------------------------------
14 SiPixelDetectorStatus::SiPixelDetectorStatus(): fLS0(99999999), fLS1(0), fRun0(99999999), fRun1(0) {
15 
16  fDetHits = 0;
17  fNevents = 0;
18 
19 }
20 
21 // ----------------------------------------------------------------------
23 
24 }
25 
26 
27 // ----------------------------------------------------------------------
29 
30  std::ifstream INS;
31  std::string sline;
32  INS.open(filename.c_str());
33 
34  int oldDetId(-1);
35  int detid(0), roc(0), hits(0), nroc(0);
36  SiPixelModuleStatus *pMod(nullptr);
37  bool readOK(false);
38  while (std::getline(INS, sline)) {
39 
40  if (std::string::npos != sline.find("# SiPixelDetectorStatus START")) {
41  readOK = true;
42  continue;
43  }
44  if (!readOK) continue;
45 
46  if (std::string::npos != sline.find("# SiPixelDetectorStatus END")) {
47  pMod->setNrocs(nroc+1);
48  break;
49  }
50 
51  if (sline.find("# SiPixelDetectorStatus for LS") != std::string::npos) {
52  std::sscanf(sline.c_str(), "# SiPixelDetectorStatus for LS %d .. %d", &fLS0, &fLS1);
53  continue;
54  }
55  if (sline.find("# SiPixelDetectorStatus for run") != std::string::npos) {
56  std::sscanf(sline.c_str(), "# SiPixelDetectorStatus for run %d .. %d", &fRun0, &fRun1);
57  continue;
58  }
59  if (sline.find("# SiPixelDetectorStatus total hits = ") != std::string::npos) {
60  std::sscanf(sline.c_str(), "# SiPixelDetectorStatus total hits = %ld", &fDetHits);
61  continue;
62  }
63 
64  std::sscanf(sline.c_str(), "%d %d %d", &detid, &roc, &hits);
65  if (roc > nroc) nroc = roc;
66  if (detid != oldDetId) {
67  if (pMod) {
68  pMod->setNrocs(nroc+1);
69  }
70 
71  oldDetId = detid;
72  if (getModule(detid) == nullptr) {
73  addModule(detid,nroc+1);
74  }
75 
76  pMod = getModule(detid);
77  nroc = 0;
78  }
79  if (pMod) {
80  fDetHits += hits;
81  pMod->updateModuleDIGI(roc, hits);
82  }
83 
84  }
85 
86  INS.close();
87 
88 }
89 
90 
91 // ----------------------------------------------------------------------
93 
94  std::ofstream OD(filename.c_str());
95  OD << "# SiPixelDetectorStatus START" << std::endl;
96  OD << "# SiPixelDetectorStatus for LS " << fLS0 << " .. " << fLS1 << std::endl;
97  OD << "# SiPixelDetectorStatus for run " << fRun0 << " .. " << fRun1 << std::endl;
98  OD << "# SiPixelDetectorStatus total hits = " << fDetHits << std::endl;
99 
100  for (std::map<int, SiPixelModuleStatus>::iterator it = SiPixelDetectorStatus::begin(); it != SiPixelDetectorStatus::end(); ++it) {
101  for (int iroc = 0; iroc < it->second.nrocs(); ++iroc) {
102  for (int idc = 0; idc < 26; ++idc) {
103  OD << Form("%10d %2d %3d", it->first, iroc, int(it->second.getRoc(iroc)->digiOccROC())) << std::endl;
104  }
105  }
106  }
107  OD << "# SiPixelDetectorStatus END" << std::endl;
108  OD.close();
109 
110 }
111 
112 
113 // ----------------------------------------------------------------------
114 void SiPixelDetectorStatus::addModule(int detid, int nrocs) {
115 
116  SiPixelModuleStatus a(detid, nrocs);
117  fModules.insert(std::make_pair(detid, a));
118 
119 }
120 
121 // ----------------------------------------------------------------------
123 
124  fModules.insert(std::make_pair(detid, a));
125 
126 }
127 
128 
129 // ----------------------------------------------------------------------
130 void SiPixelDetectorStatus::fillDIGI(int detid, int roc) {
131 
132  ++fDetHits;
133  fModules[detid].fillDIGI(roc);
134 
135 }
136 
137 // ----------------------------------------------------------------------
139 
140  if (fModules.find(detid) != fModules.end()){
141  fModules[detid].fillFEDerror25(ch);
142  }
143 
144 }
145 
146 // FEDerror25 effected ROCs in for each module
147 std::map<int, std::vector<int>> SiPixelDetectorStatus::getFEDerror25Rocs(){
148 
149  std::map<int, std::vector<int>> badRocLists_;
150 
151  for(std::map<int, SiPixelModuleStatus>::iterator itMod = SiPixelDetectorStatus::begin(); itMod != SiPixelDetectorStatus::end(); ++itMod)
152  {
153  int detid = itMod->first;
154  // FEDerror25 effected ROCs in a given module
155  std::vector<int> list;
156  SiPixelModuleStatus modStatus = itMod->second;
157  for (int iroc = 0; iroc < modStatus.nrocs(); ++iroc) {
158 
159  SiPixelRocStatus* roc = modStatus.getRoc(iroc);
160  if(roc->isFEDerror25()){
161  list.push_back(iroc);
162  }
163  badRocLists_[detid]=list;
164  }
165 
166  }
167 
168  return badRocLists_;
169 }
170 
171 // ----------------------------------------------------------------------
172 std::map<int, SiPixelModuleStatus>::iterator SiPixelDetectorStatus::begin() {
173 
174  return fModules.begin();
175 
176 }
177 
178 // ----------------------------------------------------------------------
179 //map<int, SiPixelModuleStatus>::iterator SiPixelDetectorStatus::next() {
180 // return fNext++;
181 //}
182 
183 // ----------------------------------------------------------------------
184 std::map<int, SiPixelModuleStatus>::iterator SiPixelDetectorStatus::end() {
185 
186  return fModules.end();
187 
188 }
189 
190 // ----------------------------------------------------------------------
192 
193  return static_cast<int>(fModules.size());
194 
195 }
196 
197 // ----------------------------------------------------------------------
199 
200  if (fModules.find(detid) == fModules.end()) {
201  return nullptr;
202  }
203  return &(fModules[detid]);
204 
205 }
206 
208 
209  if (fModules.find(detid) == fModules.end())
210  return false;
211  else
212  return true;
213 
214 }
215 
216 // ----------------------------------------------------------------------
218 
219  unsigned long int ave(0);
220  int nrocs(0);
221  for (std::map<int, SiPixelModuleStatus>::iterator it = SiPixelDetectorStatus::begin(); it != SiPixelDetectorStatus::end(); ++it) {
222  unsigned long int inc = it->second.digiOccMOD();
223  ave += inc;
224  nrocs += it->second.nrocs();
225  }
226  return (1.0*ave)/nrocs;
227 
228 }
229 
231 
232  double fDetAverage = SiPixelDetectorStatus::perRocDigiOcc();
233 
234  double sig = 0.0;
235  int nrocs(0);
236  for(std::map<int, SiPixelModuleStatus>::iterator it = SiPixelDetectorStatus::begin(); it != SiPixelDetectorStatus::end(); ++it) {
237  unsigned long int inc = it->second.digiOccMOD();
238  sig += (fDetAverage - inc) * (fDetAverage - inc);
239  nrocs += it->second.nrocs();
240  }
241 
242  double fDetSigma = sig/(nrocs - 1);
243  return TMath::Sqrt(fDetSigma);
244 }
245 
246 // combine status from different data (coming from different run/lumi)
248 
249  // loop over new data status
250  for(std::map<int, SiPixelModuleStatus>::iterator it = newData.begin(); it != newData.end(); ++it) {
251 
252  int detid = it->first;
253  if(fModules.find(detid) != fModules.end()){// if the detid is in the module lists
254  fModules[detid].updateModuleStatus( *(newData.getModule(detid)) );
255  }
256  else{
257  fModules.insert(std::make_pair(detid, *(newData.getModule(detid))));
258  }
259 
260  }
261 
262  fDetHits = fDetHits + newData.digiOccDET();
263  fNevents = fNevents + newData.getNevents();
264 
265 }
void addModule(int detid, int nrocs)
void updateDetectorStatus(SiPixelDetectorStatus newData)
void updateModuleDIGI(int roc, unsigned int nhits)
combine new data to update(topup) module status
unsigned long int digiOccDET()
void fillFEDerror25(int detid, PixelFEDChannel ch)
std::map< int, std::vector< int > > getFEDerror25Rocs()
void fillDIGI(int detid, int roc)
std::map< int, SiPixelModuleStatus > fModules
unsigned long int fDetHits
unsigned long int fNevents
void readFromFile(std::string filename)
std::map< int, SiPixelModuleStatus >::iterator end()
std::map< int, SiPixelModuleStatus >::iterator begin()
void dumpToFile(std::string filename)
double a
Definition: hdecay.h:121
unsigned long int getNevents()
SiPixelRocStatus * getRoc(int i)
get a ROC
SiPixelModuleStatus * getModule(int detid)
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