CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
makeTKTrend.cc
Go to the documentation of this file.
1 #include <fstream>
2 #include <iostream>
3 #include <vector>
4 #include <map>
5 #include <string>
6 #include <sstream>
7 
8 #include "TFile.h"
9 #include "TVectorT.h"
10 #include "TGraph.h"
11 #include "TGaxis.h"
12 #include "TCanvas.h"
13 #include "TH1F.h"
14 #include "TFile.h"
15 
16 void makeTKTrend(const char* inFileName,
17  const char* outFileName,
18  std::string subDetName,
19  std::string partName,
20  const unsigned int partNumber);
21 
22 int main(int argc, char* argv[]) {
23  if (argc == 6) {
24  char* inFileName = argv[1];
25  char* outFileName = argv[2];
26  char* subDetName = argv[3];
27  char* partName = argv[4];
28  int partNumber = atoi(argv[5]);
29 
30  std::cout << "ready to make trend plots from " << inFileName << " to " << outFileName << " for " << subDetName
31  << " " << partName << " " << partNumber << std::endl;
32 
33  int returncode = 0;
34  makeTKTrend(inFileName, outFileName, subDetName, partName, partNumber);
35 
36  return returncode;
37 
38  } else {
39  std::cout << "Too few arguments: " << argc << std::endl;
40  return -1;
41  }
42 
43  return -9;
44 }
45 
46 void makeTKTrend(const char* inFileName,
47  const char* outFileName,
48  std::string subDetName,
49  std::string partName,
50  const unsigned int partNumber) {
51  // Maps <Run number, nBad>
52  std::map<unsigned int, unsigned int> badModulesTK;
53  std::map<unsigned int, unsigned int> badFibersTK;
54  std::map<unsigned int, unsigned int> badAPVsTK;
55  std::map<unsigned int, unsigned int> badStripsTK;
56  std::map<unsigned int, unsigned int> badStripsFromAPVsTK;
57  std::map<unsigned int, unsigned int> allBadStripsTK;
58 
59  std::ostringstream oss;
60 
61  if (partName == "All")
62  partName = "";
63 
64  // // Number of modules, fibers, APVs, strips for each tracker part
65  // std::vector< std::string > tkParts;
66  // tkParts.push_back("Tracker");
67  // tkParts.push_back("TIB");
68  // tkParts.push_back("TID");
69  // tkParts.push_back("TOB");
70  // tkParts.push_back("TEC");
71  // tkParts.push_back("TIB Layer 1");
72  // tkParts.push_back("TIB Layer 2");
73  // tkParts.push_back("TIB Layer 3");
74  // tkParts.push_back("TIB Layer 4");
75  // tkParts.push_back("TID+ Disk 1");
76  // tkParts.push_back("TID+ Disk 2");
77  // tkParts.push_back("TID+ Disk 3");
78  // tkParts.push_back("TID- Disk 1");
79  // tkParts.push_back("TID- Disk 2");
80  // tkParts.push_back("TID- Disk 3");
81  // tkParts.push_back("TOB Layer 1");
82  // tkParts.push_back("TOB Layer 2");
83  // tkParts.push_back("TOB Layer 3");
84  // tkParts.push_back("TOB Layer 4");
85  // tkParts.push_back("TOB Layer 5");
86  // tkParts.push_back("TOB Layer 6");
87  // tkParts.push_back("TEC+ Disk 1");
88  // tkParts.push_back("TEC+ Disk 2");
89  // tkParts.push_back("TEC+ Disk 3");
90  // tkParts.push_back("TEC+ Disk 4");
91  // tkParts.push_back("TEC+ Disk 5");
92  // tkParts.push_back("TEC+ Disk 6");
93  // tkParts.push_back("TEC+ Disk 7");
94  // tkParts.push_back("TEC+ Disk 8");
95  // tkParts.push_back("TEC+ Disk 9");
96  // tkParts.push_back("TEC- Disk 1");
97  // tkParts.push_back("TEC- Disk 2");
98  // tkParts.push_back("TEC- Disk 3");
99  // tkParts.push_back("TEC- Disk 4");
100  // tkParts.push_back("TEC- Disk 5");
101  // tkParts.push_back("TEC- Disk 6");
102  // tkParts.push_back("TEC- Disk 7");
103  // tkParts.push_back("TEC- Disk 8");
104  // tkParts.push_back("TEC- Disk 9");
105  //
106  // std::vector<unsigned int> nModules;
107  // nModules.push_back(15148);
108  // nModules.push_back(2724);
109  // nModules.push_back(816);
110  // nModules.push_back(5208);
111  // nModules.push_back(6400);
112  // nModules.push_back(672);
113  // nModules.push_back(864);
114  // nModules.push_back(540);
115  // nModules.push_back(648);
116  // nModules.push_back(136);
117  // nModules.push_back(136);
118  // nModules.push_back(136);
119  // nModules.push_back(136);
120  // nModules.push_back(136);
121  // nModules.push_back(136);
122  // nModules.push_back(1008);
123  // nModules.push_back(1152);
124  // nModules.push_back(648);
125  // nModules.push_back(720);
126  // nModules.push_back(792);
127  // nModules.push_back(888);
128  // nModules.push_back(408);
129  // nModules.push_back(408);
130  // nModules.push_back(408);
131  // nModules.push_back(360);
132  // nModules.push_back(360);
133  // nModules.push_back(360);
134  // nModules.push_back(312);
135  // nModules.push_back(312);
136  // nModules.push_back(272);
137  // nModules.push_back(408);
138  // nModules.push_back(408);
139  // nModules.push_back(408);
140  // nModules.push_back(360);
141  // nModules.push_back(360);
142  // nModules.push_back(360);
143  // nModules.push_back(312);
144  // nModules.push_back(312);
145  // nModules.push_back(272);
146  //
147  // std::vector<unsigned int> nFibers;
148  // nFibers.push_back(36392);
149  // nFibers.push_back(6984);
150  // nFibers.push_back(2208);
151  // nFibers.push_back(12096);
152  // nFibers.push_back(15104);
153  // nFibers.push_back(2016);
154  // nFibers.push_back(2592);
155  // nFibers.push_back(1080);
156  // nFibers.push_back(1296);
157  // nFibers.push_back(368);
158  // nFibers.push_back(368);
159  // nFibers.push_back(368);
160  // nFibers.push_back(368);
161  // nFibers.push_back(368);
162  // nFibers.push_back(368);
163  // nFibers.push_back(2016);
164  // nFibers.push_back(2304);
165  // nFibers.push_back(1296);
166  // nFibers.push_back(1440);
167  // nFibers.push_back(2376);
168  // nFibers.push_back(2664);
169  // nFibers.push_back(992);
170  // nFibers.push_back(992);
171  // nFibers.push_back(992);
172  // nFibers.push_back(848);
173  // nFibers.push_back(848);
174  // nFibers.push_back(848);
175  // nFibers.push_back(704);
176  // nFibers.push_back(704);
177  // nFibers.push_back(624);
178  // nFibers.push_back(992);
179  // nFibers.push_back(992);
180  // nFibers.push_back(992);
181  // nFibers.push_back(848);
182  // nFibers.push_back(848);
183  // nFibers.push_back(848);
184  // nFibers.push_back(704);
185  // nFibers.push_back(704);
186  // nFibers.push_back(624);
187  //
188  // std::vector<unsigned int> nAPVs;
189  // nAPVs.push_back(72784);
190  // nAPVs.push_back(13968);
191  // nAPVs.push_back(4416);
192  // nAPVs.push_back(24192);
193  // nAPVs.push_back(30208);
194  // nAPVs.push_back(4032);
195  // nAPVs.push_back(5184);
196  // nAPVs.push_back(2160);
197  // nAPVs.push_back(2592);
198  // nAPVs.push_back(736);
199  // nAPVs.push_back(736);
200  // nAPVs.push_back(736);
201  // nAPVs.push_back(736);
202  // nAPVs.push_back(736);
203  // nAPVs.push_back(736);
204  // nAPVs.push_back(4032);
205  // nAPVs.push_back(4608);
206  // nAPVs.push_back(2592);
207  // nAPVs.push_back(2880);
208  // nAPVs.push_back(4752);
209  // nAPVs.push_back(5328);
210  // nAPVs.push_back(1984);
211  // nAPVs.push_back(1984);
212  // nAPVs.push_back(1984);
213  // nAPVs.push_back(1696);
214  // nAPVs.push_back(1696);
215  // nAPVs.push_back(1696);
216  // nAPVs.push_back(1408);
217  // nAPVs.push_back(1408);
218  // nAPVs.push_back(1248);
219  // nAPVs.push_back(1984);
220  // nAPVs.push_back(1984);
221  // nAPVs.push_back(1984);
222  // nAPVs.push_back(1696);
223  // nAPVs.push_back(1696);
224  // nAPVs.push_back(1696);
225  // nAPVs.push_back(1408);
226  // nAPVs.push_back(1408);
227  // nAPVs.push_back(1248);
228  //
229  // std::vector<unsigned int> nStrips;
230  // nStrips.push_back(9316352);
231  // nStrips.push_back(1787904);
232  // nStrips.push_back(565248);
233  // nStrips.push_back(3096576);
234  // nStrips.push_back(3866624);
235  // nStrips.push_back(516096);
236  // nStrips.push_back(663552);
237  // nStrips.push_back(276480);
238  // nStrips.push_back(331776);
239  // nStrips.push_back(94208);
240  // nStrips.push_back(94208);
241  // nStrips.push_back(94208);
242  // nStrips.push_back(94208);
243  // nStrips.push_back(94208);
244  // nStrips.push_back(94208);
245  // nStrips.push_back(516096);
246  // nStrips.push_back(589824);
247  // nStrips.push_back(331776);
248  // nStrips.push_back(368640);
249  // nStrips.push_back(608256);
250  // nStrips.push_back(681984);
251  // nStrips.push_back(253952);
252  // nStrips.push_back(253952);
253  // nStrips.push_back(253952);
254  // nStrips.push_back(217088);
255  // nStrips.push_back(217088);
256  // nStrips.push_back(217088);
257  // nStrips.push_back(180224);
258  // nStrips.push_back(180224);
259  // nStrips.push_back(159744);
260  // nStrips.push_back(253952);
261  // nStrips.push_back(253952);
262  // nStrips.push_back(253952);
263  // nStrips.push_back(217088);
264  // nStrips.push_back(217088);
265  // nStrips.push_back(217088);
266  // nStrips.push_back(180224);
267  // nStrips.push_back(180224);
268  // nStrips.push_back(159744);
269  //
270  // // Map with <name of tracker part, count of channels in the part>
271  // std::map<std::string, unsigned int> allModulesTK;
272  // std::map<std::string, unsigned int> allFibersTK;
273  // std::map<std::string, unsigned int> allAPVsTK;
274  // std::map<std::string, unsigned int> allStripsTK;
275  // for(unsigned int i = 0; i < tkParts.size(); i++)
276  // {
277  // allModulesTK[tkParts[i].c_str()] = nModules[i];
278  // allFibersTK[tkParts[i].c_str()] = nFibers[i];
279  // allAPVsTK[tkParts[i].c_str()] = nAPVs[i];
280  // allStripsTK[tkParts[i].c_str()] = nStrips[i];
281  // }
282  //
283  // // for(std::map< std::string, unsigned int>::iterator it = allStripsTK.begin(); it != allStripsTK.end(); it++)
284  // // {
285  // // std::cout << it->first.c_str() << " " << it->second << std::endl;
286  // // }
287  //
288  // // Finds number of channels from above map
289  // std::string completePartName = subDetName;
290  // if(partName.compare("") != 0)
291  // completePartName += " " + partName;
292  // if(partNumber != 0)
293  // {
294  // oss.str("");
295  // oss << partNumber;
296  // completePartName += " " + oss.str();
297  // }
298 
299  // // Total number of channels in currently processed map
300  // const unsigned int nModulesInPart = allModulesTK[completePartName.c_str()];
301  // const unsigned int nFibersInPart = allFibersTK[completePartName.c_str()];
302  // const unsigned int nAPVsInPart = allAPVsTK[completePartName.c_str()];
303  // const unsigned int nStripsInPart = allStripsTK[completePartName.c_str()];
304 
305  // Read input file
306  std::ifstream resultsFile(inFileName);
307  unsigned int runIOV;
308  unsigned int values[6];
309  do {
310  resultsFile >> runIOV;
311  resultsFile >> values[0] >> values[1] >> values[2] >> values[3] >> values[4] >> values[5];
312  // std::cout << runIOV << " " << values[0] << " " << values[1] << " " << values[2] << " " << values[3] << " " << values[4] << " " << values[5] << std::endl;
313  badModulesTK[runIOV] = values[0];
314  badFibersTK[runIOV] = values[1];
315  badAPVsTK[runIOV] = values[2];
316  badStripsTK[runIOV] = values[3];
317  badStripsFromAPVsTK[runIOV] = values[4];
318  allBadStripsTK[runIOV] = values[5];
319  } while (!resultsFile.eof());
320 
321  const unsigned int IOVSize = badStripsTK.size();
322 
323  // Create histograms
324  std::string histoName;
325  std::string histoTitle;
326 
327  oss.str("");
328  histoName = "hBadModules" + subDetName + partName;
329  if (partNumber != 0) {
330  oss << partNumber;
331  histoName += oss.str();
332  }
333  oss.str("");
334  histoTitle = "Bad modules in " + subDetName;
335  if (!partName.empty()) {
336  histoTitle += " " + partName;
337  }
338  if (partNumber != 0) {
339  oss << partNumber;
340  histoTitle += " " + oss.str();
341  }
342  TH1F* hBadModulesTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
343 
344  oss.str("");
345  histoName = "hBadFibers" + subDetName + partName;
346  if (partNumber != 0) {
347  oss << partNumber;
348  histoName += oss.str();
349  }
350  oss.str("");
351  histoTitle = "Bad fibers in " + subDetName;
352  if (!partName.empty()) {
353  histoTitle += " " + partName;
354  }
355  if (partNumber != 0) {
356  oss << partNumber;
357  histoTitle += " " + oss.str();
358  }
359  TH1F* hBadFibersTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
360 
361  oss.str("");
362  histoName = "hBadAPVs" + subDetName + partName;
363  if (partNumber != 0) {
364  oss << partNumber;
365  histoName += oss.str();
366  }
367  oss.str("");
368  histoTitle = "Bad APVs in " + subDetName;
369  if (!partName.empty()) {
370  histoTitle += " " + partName;
371  }
372  if (partNumber != 0) {
373  oss << partNumber;
374  histoTitle += " " + oss.str();
375  }
376  TH1F* hBadAPVsTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
377 
378  oss.str("");
379  histoName = "hBadStrips" + subDetName + partName;
380  if (partNumber != 0) {
381  oss << partNumber;
382  histoName += oss.str();
383  }
384  oss.str("");
385  histoTitle = "Bad strips in " + subDetName;
386  if (!partName.empty()) {
387  histoTitle += " " + partName;
388  }
389  if (partNumber != 0) {
390  oss << partNumber;
391  histoTitle += " " + oss.str();
392  }
393  TH1F* hBadStripsTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
394 
395  oss.str("");
396  histoName = "hBadStripsFromAPVs" + subDetName + partName;
397  if (partNumber != 0) {
398  oss << partNumber;
399  histoName += oss.str();
400  }
401  oss.str("");
402  histoTitle = "Bad strips from APVs in " + subDetName;
403  if (!partName.empty()) {
404  histoTitle += " " + partName;
405  }
406  if (partNumber != 0) {
407  oss << partNumber;
408  histoTitle += " " + oss.str();
409  }
410  TH1F* hBadStripsFromAPVsTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
411 
412  oss.str("");
413  histoName = "hAllBadStrips" + subDetName + partName;
414  if (partNumber != 0) {
415  oss << partNumber;
416  histoName += oss.str();
417  }
418  oss.str("");
419  histoTitle = "All bad strips in " + subDetName;
420  if (!partName.empty()) {
421  histoTitle += " " + partName;
422  }
423  if (partNumber != 0) {
424  oss << partNumber;
425  histoTitle += " " + oss.str();
426  }
427  TH1F* hAllBadStripsTK = new TH1F(histoName.c_str(), histoTitle.c_str(), IOVSize, 0.5, IOVSize + 0.5);
428 
429  unsigned int j = 0;
430  for (std::map<unsigned int, unsigned int>::iterator iMap = badModulesTK.begin(); iMap != badModulesTK.end(); iMap++) {
431  hBadModulesTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nModulesInPart*/);
432  oss.str("");
433  oss << iMap->first;
434  hBadModulesTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
435  // std::cout << hBadModulesTK->GetBinContent(j) << std::endl;
436  }
437  TCanvas* cBadModulesTK = new TCanvas();
438  hBadModulesTK->Draw();
439  cBadModulesTK->Update();
440 
441  j = 0;
442  for (std::map<unsigned int, unsigned int>::iterator iMap = badFibersTK.begin(); iMap != badFibersTK.end(); iMap++) {
443  hBadFibersTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nFibersInPart*/);
444  oss.str("");
445  oss << iMap->first;
446  hBadFibersTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
447  // std::cout << hBadFibersTK->GetBinContent(j) << std::endl;
448  }
449  TCanvas* cBadFibersTK = new TCanvas();
450  hBadFibersTK->Draw();
451  cBadFibersTK->Update();
452 
453  j = 0;
454  for (std::map<unsigned int, unsigned int>::iterator iMap = badAPVsTK.begin(); iMap != badAPVsTK.end(); iMap++) {
455  hBadAPVsTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nAPVsInPart*/);
456  oss.str("");
457  oss << iMap->first;
458  hBadAPVsTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
459  // std::cout << hBadAPVsTK->GetBinContent(j) << std::endl;
460  }
461  TCanvas* cBadAPVsTK = new TCanvas();
462  hBadAPVsTK->Draw();
463  cBadAPVsTK->Update();
464 
465  j = 0;
466  for (std::map<unsigned int, unsigned int>::iterator iMap = badStripsTK.begin(); iMap != badStripsTK.end(); iMap++) {
467  hBadStripsTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nStripsInPart*/);
468  oss.str("");
469  oss << iMap->first;
470  hBadStripsTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
471  // std::cout << hBadStripsTK->GetBinContent(j) << std::endl;
472  }
473  TCanvas* cBadStripsTK = new TCanvas();
474  hBadStripsTK->Draw();
475  cBadStripsTK->Update();
476 
477  j = 0;
478  for (std::map<unsigned int, unsigned int>::iterator iMap = badStripsFromAPVsTK.begin();
479  iMap != badStripsFromAPVsTK.end();
480  iMap++) {
481  hBadStripsFromAPVsTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nStripsInPart*/);
482  oss.str("");
483  oss << iMap->first;
484  hBadStripsFromAPVsTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
485  // std::cout << hBadStripsTK->GetBinContent(j) << std::endl;
486  }
487  TCanvas* cBadStripsFromAPVsTK = new TCanvas();
488  hBadStripsFromAPVsTK->Draw();
489  cBadStripsFromAPVsTK->Update();
490 
491  j = 0;
492  for (std::map<unsigned int, unsigned int>::iterator iMap = allBadStripsTK.begin(); iMap != allBadStripsTK.end();
493  iMap++) {
494  hAllBadStripsTK->SetBinContent(++j, /*(double)*/ iMap->second /*/(double)nStripsInPart*/);
495  oss.str("");
496  oss << iMap->first;
497  hAllBadStripsTK->GetXaxis()->SetBinLabel(j, oss.str().c_str());
498  // std::cout << hAllBadStripsTK->GetBinContent(j) << std::endl;
499  }
500  TCanvas* cAllBadStripsTK = new TCanvas();
501  hAllBadStripsTK->Draw();
502  cAllBadStripsTK->Update();
503 
504  // Write histograms to output file
505 
506  // std::cout << "Ready to open the file " << outFileName << std::endl;
507 
508  TFile* outFile = new TFile(outFileName, "UPDATE");
509 
510  // std::cout << "File opened: " << outFileName << std::endl;
511 
512  outFile->cd();
513  hBadModulesTK->Write();
514  hBadFibersTK->Write();
515  hBadAPVsTK->Write();
516  hBadStripsTK->Write();
517  hBadStripsFromAPVsTK->Write();
518  hAllBadStripsTK->Write();
519 
520  // std::cout << "histograms written in " << outFileName << std::endl;
521 
522  delete outFile;
523  delete hBadModulesTK;
524  delete hBadFibersTK;
525  delete hBadAPVsTK;
526  delete hBadStripsTK;
527  delete hBadStripsFromAPVsTK;
528  delete hAllBadStripsTK;
529  delete cBadModulesTK;
530  delete cBadFibersTK;
531  delete cBadAPVsTK;
532  delete cBadStripsTK;
533  delete cBadStripsFromAPVsTK;
534  delete cAllBadStripsTK;
535 }
void makeTKTrend(const char *inFileName, const char *outFileName, std::string subDetName, std::string partName, const unsigned int partNumber)
Definition: makeTKTrend.cc:46
tuple argc
Definition: dir2webdir.py:39
tuple cout
Definition: gather_cfg.py:144