CMS 3D CMS Logo

PreparePVTrends.cc
Go to the documentation of this file.
2 
3 namespace ph = std::placeholders; // for _1, _2, _3...
4 namespace pt = boost::property_tree;
5 
6 PreparePVTrends::PreparePVTrends(const char *outputFileName, int nWorkers, pt::ptree &json)
7  : outputFileName_(outputFileName), nWorkers_(nWorkers) {
9 }
10 
12  DirList.clear();
13  LabelList.clear();
14  for (const auto &childTree : json) {
15  DirList.push_back(childTree.first.c_str());
16  LabelList.push_back(childTree.second.get<std::string>("title"));
17  }
18 }
19 
20 void PreparePVTrends::multiRunPVValidation(bool useRMS, TString lumiInputFile, bool doUnitTest) {
21  TStopwatch timer;
22  timer.Start();
23 
24  gROOT->ProcessLine("gErrorIgnoreLevel = kError;");
25 
26  ROOT::EnableThreadSafety();
27  TH1::AddDirectory(kFALSE);
28 
29  std::ofstream outfile("log.txt");
30 
31  const Int_t nDirs_ = DirList.size();
32  TString LegLabels[10];
33  const char *dirs[10];
34 
35  std::vector<int> intersection;
36  std::vector<double> runs;
37  std::vector<double> x_ticks;
38  std::vector<double> ex_ticks = {0.};
39 
40  for (Int_t j = 0; j < nDirs_; j++) {
41  // Retrieve labels
42  LegLabels[j] = LabelList[j];
43  dirs[j] = DirList[j].data();
44 
45  std::vector<int> currentList = list_files(dirs[j]);
46  std::vector<int> tempSwap;
47 
48  std::sort(currentList.begin(), currentList.end());
49 
50  if (j == 0) {
51  intersection = currentList;
52  }
53 
54  std::sort(intersection.begin(), intersection.end());
55 
57  currentList.begin(), currentList.end(), intersection.begin(), intersection.end(), std::back_inserter(tempSwap));
58 
59  intersection.clear();
60  intersection = tempSwap;
61  tempSwap.clear();
62  }
63 
64  std::ifstream lumifile(lumiInputFile.Data());
65 
67  while (std::getline(lumifile, line)) {
68  std::istringstream iss(line);
69  std::string a, b;
70  if (!(iss >> a >> b)) {
71  break;
72  } // error
73  int run = std::stoi(a);
74 
75  // check if the run is in the list
76  if (std::find(intersection.begin(), intersection.end(), run) == intersection.end()) {
77  logWarning << " Run: " << run << " is not found in the intersection" << std::endl;
78  }
79  }
80 
81  // book the vectors of values
82  alignmentTrend dxyPhiMeans_;
83  alignmentTrend dxyPhiChi2_;
84  alignmentTrend dxyPhiHiErr_;
85  alignmentTrend dxyPhiLoErr_;
86  alignmentTrend dxyPhiKS_;
87  alignmentTrend dxyPhiHi_;
88  alignmentTrend dxyPhiLo_;
89 
90  alignmentTrend dxyEtaMeans_;
91  alignmentTrend dxyEtaChi2_;
92  alignmentTrend dxyEtaHiErr_;
93  alignmentTrend dxyEtaLoErr_;
94  alignmentTrend dxyEtaKS_;
95  alignmentTrend dxyEtaHi_;
96  alignmentTrend dxyEtaLo_;
97 
98  alignmentTrend dzPhiMeans_;
99  alignmentTrend dzPhiChi2_;
100  alignmentTrend dzPhiHiErr_;
101  alignmentTrend dzPhiLoErr_;
102  alignmentTrend dzPhiKS_;
103  alignmentTrend dzPhiHi_;
104  alignmentTrend dzPhiLo_;
105 
106  alignmentTrend dzEtaMeans_;
107  alignmentTrend dzEtaChi2_;
108  alignmentTrend dzEtaHiErr_;
109  alignmentTrend dzEtaLoErr_;
110  alignmentTrend dzEtaKS_;
111  alignmentTrend dzEtaHi_;
112  alignmentTrend dzEtaLo_;
113 
114  // unrolled histos
115 
116  std::map<TString, std::vector<unrolledHisto> > dxyVect;
117  std::map<TString, std::vector<unrolledHisto> > dzVect;
118 
119  logInfo << " pre do-stuff: " << runs.size() << std::endl;
120 
121  //we should use std::bind to create a functor and then pass it to the procPool
122  auto f_processData =
123  std::bind(processData, ph::_1, intersection, nDirs_, dirs, LegLabels, useRMS, nWorkers_, doUnitTest);
124 
125  //f_processData(0);
126  //logInfo<<" post do-stuff: " << runs.size() << std::endl;
127 
128  TProcPool procPool(std::min(nWorkers_, intersection.size()));
129  std::vector<size_t> range(std::min(nWorkers_, intersection.size()));
130  std::iota(range.begin(), range.end(), 0);
131  //procPool.Map([&f_processData](size_t a) { f_processData(a); },{1,2,3});
132  auto extracts = procPool.Map(f_processData, range);
133 
134  // sort the extracts according to the global index
135  std::sort(extracts.begin(), extracts.end(), [](const outPVtrends &a, const outPVtrends &b) -> bool {
136  return a.m_index < b.m_index;
137  });
138 
139  // re-assemble everything together
140  for (auto extractedTrend : extracts) {
141  runs.insert(std::end(runs), std::begin(extractedTrend.m_runs), std::end(extractedTrend.m_runs));
142 
143  for (const auto &label : LegLabels) {
144  //******************************//
145  dxyPhiMeans_[label].insert(std::end(dxyPhiMeans_[label]),
146  std::begin(extractedTrend.m_dxyPhiMeans[label]),
147  std::end(extractedTrend.m_dxyPhiMeans[label]));
148  dxyPhiChi2_[label].insert(std::end(dxyPhiChi2_[label]),
149  std::begin(extractedTrend.m_dxyPhiChi2[label]),
150  std::end(extractedTrend.m_dxyPhiChi2[label]));
151  dxyPhiKS_[label].insert(std::end(dxyPhiKS_[label]),
152  std::begin(extractedTrend.m_dxyPhiKS[label]),
153  std::end(extractedTrend.m_dxyPhiKS[label]));
154 
155  dxyPhiHi_[label].insert(std::end(dxyPhiHi_[label]),
156  std::begin(extractedTrend.m_dxyPhiHi[label]),
157  std::end(extractedTrend.m_dxyPhiHi[label]));
158  dxyPhiLo_[label].insert(std::end(dxyPhiLo_[label]),
159  std::begin(extractedTrend.m_dxyPhiLo[label]),
160  std::end(extractedTrend.m_dxyPhiLo[label]));
161 
162  //******************************//
163  dzPhiMeans_[label].insert(std::end(dzPhiMeans_[label]),
164  std::begin(extractedTrend.m_dzPhiMeans[label]),
165  std::end(extractedTrend.m_dzPhiMeans[label]));
166  dzPhiChi2_[label].insert(std::end(dzPhiChi2_[label]),
167  std::begin(extractedTrend.m_dzPhiChi2[label]),
168  std::end(extractedTrend.m_dzPhiChi2[label]));
169  dzPhiKS_[label].insert(std::end(dzPhiKS_[label]),
170  std::begin(extractedTrend.m_dzPhiKS[label]),
171  std::end(extractedTrend.m_dzPhiKS[label]));
172 
173  dzPhiHi_[label].insert(std::end(dzPhiHi_[label]),
174  std::begin(extractedTrend.m_dzPhiHi[label]),
175  std::end(extractedTrend.m_dzPhiHi[label]));
176  dzPhiLo_[label].insert(std::end(dzPhiLo_[label]),
177  std::begin(extractedTrend.m_dzPhiLo[label]),
178  std::end(extractedTrend.m_dzPhiLo[label]));
179 
180  //******************************//
181  dxyEtaMeans_[label].insert(std::end(dxyEtaMeans_[label]),
182  std::begin(extractedTrend.m_dxyEtaMeans[label]),
183  std::end(extractedTrend.m_dxyEtaMeans[label]));
184  dxyEtaChi2_[label].insert(std::end(dxyEtaChi2_[label]),
185  std::begin(extractedTrend.m_dxyEtaChi2[label]),
186  std::end(extractedTrend.m_dxyEtaChi2[label]));
187  dxyEtaKS_[label].insert(std::end(dxyEtaKS_[label]),
188  std::begin(extractedTrend.m_dxyEtaKS[label]),
189  std::end(extractedTrend.m_dxyEtaKS[label]));
190 
191  dxyEtaHi_[label].insert(std::end(dxyEtaHi_[label]),
192  std::begin(extractedTrend.m_dxyEtaHi[label]),
193  std::end(extractedTrend.m_dxyEtaHi[label]));
194  dxyEtaLo_[label].insert(std::end(dxyEtaLo_[label]),
195  std::begin(extractedTrend.m_dxyEtaLo[label]),
196  std::end(extractedTrend.m_dxyEtaLo[label]));
197 
198  //******************************//
199  dzEtaMeans_[label].insert(std::end(dzEtaMeans_[label]),
200  std::begin(extractedTrend.m_dzEtaMeans[label]),
201  std::end(extractedTrend.m_dzEtaMeans[label]));
202  dzEtaChi2_[label].insert(std::end(dzEtaChi2_[label]),
203  std::begin(extractedTrend.m_dzEtaChi2[label]),
204  std::end(extractedTrend.m_dzEtaChi2[label]));
205  dzEtaKS_[label].insert(std::end(dzEtaKS_[label]),
206  std::begin(extractedTrend.m_dzEtaKS[label]),
207  std::end(extractedTrend.m_dzEtaKS[label]));
208 
209  dzEtaHi_[label].insert(std::end(dzEtaHi_[label]),
210  std::begin(extractedTrend.m_dzEtaHi[label]),
211  std::end(extractedTrend.m_dzEtaHi[label]));
212  dzEtaLo_[label].insert(std::end(dzEtaLo_[label]),
213  std::begin(extractedTrend.m_dzEtaLo[label]),
214  std::end(extractedTrend.m_dzEtaLo[label]));
215 
216  //******************************//
217  dxyVect[label].insert(std::end(dxyVect[label]),
218  std::begin(extractedTrend.m_dxyVect[label]),
219  std::end(extractedTrend.m_dxyVect[label]));
220  dzVect[label].insert(std::end(dzVect[label]),
221  std::begin(extractedTrend.m_dzVect[label]),
222  std::end(extractedTrend.m_dzVect[label]));
223  }
224  }
225  // extra vectors for low and high boundaries
226 
227  for (const auto &label : LegLabels) {
228  for (unsigned int it = 0; it < dxyPhiMeans_[label].size(); it++) {
229  dxyPhiHiErr_[label].push_back(std::abs(dxyPhiHi_[label][it] - dxyPhiMeans_[label][it]));
230  dxyPhiLoErr_[label].push_back(std::abs(dxyPhiLo_[label][it] - dxyPhiMeans_[label][it]));
231  dxyEtaHiErr_[label].push_back(std::abs(dxyEtaHi_[label][it] - dxyEtaMeans_[label][it]));
232  dxyEtaLoErr_[label].push_back(std::abs(dxyEtaLo_[label][it] - dxyEtaMeans_[label][it]));
233 
234  if (VERBOSE) {
235  logInfo << "label: " << label << " means:" << dxyEtaMeans_[label][it] << " low: " << dxyEtaLo_[label][it]
236  << " loErr: " << dxyEtaLoErr_[label][it] << std::endl;
237  }
238 
239  dzPhiHiErr_[label].push_back(std::abs(dzPhiHi_[label][it] - dzPhiMeans_[label][it]));
240  dzPhiLoErr_[label].push_back(std::abs(dzPhiLo_[label][it] - dzPhiMeans_[label][it]));
241  dzEtaHiErr_[label].push_back(std::abs(dzEtaHi_[label][it] - dzEtaMeans_[label][it]));
242  dzEtaLoErr_[label].push_back(std::abs(dzEtaLo_[label][it] - dzEtaMeans_[label][it]));
243  }
244  }
245  // bias on the mean
246 
247  TGraph *g_dxy_phi_vs_run[nDirs_];
248  TGraphAsymmErrors *gerr_dxy_phi_vs_run[nDirs_];
249  TGraph *g_chi2_dxy_phi_vs_run[nDirs_];
250  TGraph *g_KS_dxy_phi_vs_run[nDirs_];
251  //TGraph *gprime_dxy_phi_vs_run[nDirs_];
252  TGraph *g_dxy_phi_hi_vs_run[nDirs_];
253  TGraph *g_dxy_phi_lo_vs_run[nDirs_];
254 
255  TGraph *g_dxy_eta_vs_run[nDirs_];
256  TGraphAsymmErrors *gerr_dxy_eta_vs_run[nDirs_];
257  TGraph *g_chi2_dxy_eta_vs_run[nDirs_];
258  TGraph *g_KS_dxy_eta_vs_run[nDirs_];
259  //TGraph *gprime_dxy_eta_vs_run[nDirs_];
260  TGraph *g_dxy_eta_hi_vs_run[nDirs_];
261  TGraph *g_dxy_eta_lo_vs_run[nDirs_];
262 
263  TGraph *g_dz_phi_vs_run[nDirs_];
264  TGraphAsymmErrors *gerr_dz_phi_vs_run[nDirs_];
265  TGraph *g_chi2_dz_phi_vs_run[nDirs_];
266  TGraph *g_KS_dz_phi_vs_run[nDirs_];
267  //TGraph *gprime_dz_phi_vs_run[nDirs_];
268  TGraph *g_dz_phi_hi_vs_run[nDirs_];
269  TGraph *g_dz_phi_lo_vs_run[nDirs_];
270 
271  TGraph *g_dz_eta_vs_run[nDirs_];
272  TGraphAsymmErrors *gerr_dz_eta_vs_run[nDirs_];
273  TGraph *g_chi2_dz_eta_vs_run[nDirs_];
274  TGraph *g_KS_dz_eta_vs_run[nDirs_];
275  //TGraph *gprime_dz_eta_vs_run[nDirs_];
276  TGraph *g_dz_eta_hi_vs_run[nDirs_];
277  TGraph *g_dz_eta_lo_vs_run[nDirs_];
278 
279  // resolutions
280 
281  TH1F *h_RMS_dxy_phi_vs_run[nDirs_];
282  TH1F *h_RMS_dxy_eta_vs_run[nDirs_];
283  TH1F *h_RMS_dz_phi_vs_run[nDirs_];
284  TH1F *h_RMS_dz_eta_vs_run[nDirs_];
285 
286  // scatters of integrated bias
287 
288  TH2F *h2_scatter_dxy_vs_run[nDirs_];
289  TH2F *h2_scatter_dz_vs_run[nDirs_];
290 
291  // decide the type
292  TString theType = "run number";
293  TString theTypeLabel = "run number";
294  x_ticks = runs;
295 
296  pv::bundle theBundle = pv::bundle(nDirs_, theType, theTypeLabel, useRMS);
297  theBundle.printAll();
298 
299  TFile *fout = TFile::Open(outputFileName_, "RECREATE");
300 
301  for (Int_t j = 0; j < nDirs_; j++) {
302  // check on the sanity
303  logInfo << "x_ticks.size()= " << x_ticks.size() << " dxyPhiMeans_[LegLabels[" << j
304  << "]].size()=" << dxyPhiMeans_[LegLabels[j]].size() << std::endl;
305 
306  // otherwise something very bad has happened
307  assert(x_ticks.size() == dxyPhiMeans_[LegLabels[j]].size());
308 
309  // *************************************
310  // dxy vs phi
311  // *************************************
312 
313  auto dxyPhiInputs =
314  pv::wrappedTrends(dxyPhiMeans_, dxyPhiLo_, dxyPhiHi_, dxyPhiLoErr_, dxyPhiHiErr_, dxyPhiChi2_, dxyPhiKS_);
315 
316  outputGraphs(dxyPhiInputs,
317  x_ticks,
318  ex_ticks,
319  g_dxy_phi_vs_run[j],
320  g_chi2_dxy_phi_vs_run[j],
321  g_KS_dxy_phi_vs_run[j],
322  g_dxy_phi_lo_vs_run[j],
323  g_dxy_phi_hi_vs_run[j],
324  gerr_dxy_phi_vs_run[j],
325  h_RMS_dxy_phi_vs_run,
326  theBundle,
327  pv::dxyphi,
328  j,
329  LegLabels[j]);
330 
331  // *************************************
332  // dxy vs eta
333  // *************************************
334 
335  auto dxyEtaInputs =
336  pv::wrappedTrends(dxyEtaMeans_, dxyEtaLo_, dxyEtaHi_, dxyEtaLoErr_, dxyEtaHiErr_, dxyEtaChi2_, dxyEtaKS_);
337 
338  outputGraphs(dxyEtaInputs,
339  x_ticks,
340  ex_ticks,
341  g_dxy_eta_vs_run[j],
342  g_chi2_dxy_eta_vs_run[j],
343  g_KS_dxy_eta_vs_run[j],
344  g_dxy_eta_lo_vs_run[j],
345  g_dxy_eta_hi_vs_run[j],
346  gerr_dxy_eta_vs_run[j],
347  h_RMS_dxy_eta_vs_run,
348  theBundle,
349  pv::dxyeta,
350  j,
351  LegLabels[j]);
352 
353  // *************************************
354  // dz vs phi
355  // *************************************
356 
357  auto dzPhiInputs =
358  pv::wrappedTrends(dzPhiMeans_, dzPhiLo_, dzPhiHi_, dzPhiLoErr_, dzPhiHiErr_, dzPhiChi2_, dzPhiKS_);
359 
360  outputGraphs(dzPhiInputs,
361  x_ticks,
362  ex_ticks,
363  g_dz_phi_vs_run[j],
364  g_chi2_dz_phi_vs_run[j],
365  g_KS_dz_phi_vs_run[j],
366  g_dz_phi_lo_vs_run[j],
367  g_dz_phi_hi_vs_run[j],
368  gerr_dz_phi_vs_run[j],
369  h_RMS_dz_phi_vs_run,
370  theBundle,
371  pv::dzphi,
372  j,
373  LegLabels[j]);
374 
375  // *************************************
376  // dz vs eta
377  // *************************************
378 
379  auto dzEtaInputs =
380  pv::wrappedTrends(dzEtaMeans_, dzEtaLo_, dzEtaHi_, dzEtaLoErr_, dzEtaHiErr_, dzEtaChi2_, dzEtaKS_);
381 
382  outputGraphs(dzEtaInputs,
383  x_ticks,
384  ex_ticks,
385  g_dz_eta_vs_run[j],
386  g_chi2_dz_eta_vs_run[j],
387  g_KS_dz_eta_vs_run[j],
388  g_dz_eta_lo_vs_run[j],
389  g_dz_eta_hi_vs_run[j],
390  gerr_dz_eta_vs_run[j],
391  h_RMS_dz_eta_vs_run,
392  theBundle,
393  pv::dzeta,
394  j,
395  LegLabels[j]);
396 
397  // *************************************
398  // Integrated bias dxy scatter plots
399  // *************************************
400 
401  h2_scatter_dxy_vs_run[j] =
402  new TH2F(Form("h2_scatter_dxy_%s", LegLabels[j].Data()),
403  Form("scatter of d_{xy} vs %s;%s;d_{xy} [cm]", theType.Data(), theTypeLabel.Data()),
404  x_ticks.size() - 1,
405  &(x_ticks[0]),
406  dxyVect[LegLabels[j]][0].get_n_bins(),
407  dxyVect[LegLabels[j]][0].get_y_min(),
408  dxyVect[LegLabels[j]][0].get_y_max());
409  h2_scatter_dxy_vs_run[j]->SetStats(kFALSE);
410  h2_scatter_dxy_vs_run[j]->SetTitle(LegLabels[j]);
411 
412  for (unsigned int runindex = 0; runindex < x_ticks.size(); runindex++) {
413  for (unsigned int binindex = 0; binindex < dxyVect[LegLabels[j]][runindex].get_n_bins(); binindex++) {
414  h2_scatter_dxy_vs_run[j]->SetBinContent(runindex + 1,
415  binindex + 1,
416  dxyVect[LegLabels[j]][runindex].get_bin_contents().at(binindex) /
417  dxyVect[LegLabels[j]][runindex].get_integral());
418  }
419  }
420 
421  // *************************************
422  // Integrated bias dz scatter plots
423  // *************************************
424 
425  h2_scatter_dz_vs_run[j] =
426  new TH2F(Form("h2_scatter_dz_%s", LegLabels[j].Data()),
427  Form("scatter of d_{z} vs %s;%s;d_{z} [cm]", theType.Data(), theTypeLabel.Data()),
428  x_ticks.size() - 1,
429  &(x_ticks[0]),
430  dzVect[LegLabels[j]][0].get_n_bins(),
431  dzVect[LegLabels[j]][0].get_y_min(),
432  dzVect[LegLabels[j]][0].get_y_max());
433  h2_scatter_dz_vs_run[j]->SetStats(kFALSE);
434  h2_scatter_dz_vs_run[j]->SetTitle(LegLabels[j]);
435 
436  for (unsigned int runindex = 0; runindex < x_ticks.size(); runindex++) {
437  for (unsigned int binindex = 0; binindex < dzVect[LegLabels[j]][runindex].get_n_bins(); binindex++) {
438  h2_scatter_dz_vs_run[j]->SetBinContent(runindex + 1,
439  binindex + 1,
440  dzVect[LegLabels[j]][runindex].get_bin_contents().at(binindex) /
441  dzVect[LegLabels[j]][runindex].get_integral());
442  }
443  }
444 
445  TString modified_label = (LegLabels[j].ReplaceAll(" ", "_"));
446  g_dxy_phi_vs_run[j]->Write("mean_" + modified_label + "_dxy_phi_vs_run");
447  g_chi2_dxy_phi_vs_run[j]->Write("chi2_" + modified_label + "_dxy_phi_vs_run");
448  g_KS_dxy_phi_vs_run[j]->Write("KS_" + modified_label + "_dxy_phi_vs_run");
449  g_dxy_phi_hi_vs_run[j]->Write("hi_" + modified_label + "_dxy_phi_hi_vs_run");
450  g_dxy_phi_lo_vs_run[j]->Write("lo_" + modified_label + "_dxy_phi_lo_vs_run");
451 
452  g_dxy_eta_vs_run[j]->Write("mean_" + modified_label + "_dxy_eta_vs_run");
453  g_chi2_dxy_eta_vs_run[j]->Write("chi2_" + modified_label + "_dxy_eta_vs_run");
454  g_KS_dxy_eta_vs_run[j]->Write("KS_" + modified_label + "_dxy_eta_vs_run");
455  g_dxy_eta_hi_vs_run[j]->Write("hi_" + modified_label + "_dxy_eta_hi_vs_run");
456  g_dxy_eta_lo_vs_run[j]->Write("lo_" + modified_label + "_dxy_eta_lo_vs_run");
457 
458  g_dz_phi_vs_run[j]->Write("mean_" + modified_label + "_dz_phi_vs_run");
459  g_chi2_dz_phi_vs_run[j]->Write("chi2_" + modified_label + "_dz_phi_vs_run");
460  g_KS_dz_phi_vs_run[j]->Write("KS_" + modified_label + "_dz_phi_vs_run");
461  g_dz_phi_hi_vs_run[j]->Write("hi_" + modified_label + "_dz_phi_hi_vs_run");
462  g_dz_phi_lo_vs_run[j]->Write("lo_" + modified_label + "_dz_phi_lo_vs_run");
463 
464  g_dz_eta_vs_run[j]->Write("mean_" + modified_label + "_dz_eta_vs_run");
465  g_chi2_dz_eta_vs_run[j]->Write("chi2_" + modified_label + "_dz_eta_vs_run");
466  g_KS_dz_eta_vs_run[j]->Write("KS_" + modified_label + "_dz_eta_vs_run");
467  g_dz_eta_hi_vs_run[j]->Write("hi_" + modified_label + "_dz_eta_hi_vs_run");
468  g_dz_eta_lo_vs_run[j]->Write("lo_" + modified_label + "_dz_eta_lo_vs_run");
469 
470  h_RMS_dxy_phi_vs_run[j]->Write("RMS_" + modified_label + "_dxy_phi_vs_run");
471  h_RMS_dxy_eta_vs_run[j]->Write("RMS_" + modified_label + "_dxy_eta_vs_run");
472  h_RMS_dz_phi_vs_run[j]->Write("RMS_" + modified_label + "_dz_phi_vs_run");
473  h_RMS_dz_eta_vs_run[j]->Write("RMS_" + modified_label + "_dz_eta_vs_run");
474 
475  // scatter
476 
477  h2_scatter_dxy_vs_run[j]->Write("Scatter_" + modified_label + "_dxy_vs_run");
478  h2_scatter_dz_vs_run[j]->Write("Scatter_" + modified_label + "_dz_vs_run");
479  }
480  // do all the deletes
481 
482  for (int iDir = 0; iDir < nDirs_; iDir++) {
483  delete g_dxy_phi_vs_run[iDir];
484  delete g_chi2_dxy_phi_vs_run[iDir];
485  delete g_KS_dxy_phi_vs_run[iDir];
486  delete g_dxy_phi_hi_vs_run[iDir];
487  delete g_dxy_phi_lo_vs_run[iDir];
488 
489  delete g_dxy_eta_vs_run[iDir];
490  delete g_chi2_dxy_eta_vs_run[iDir];
491  delete g_KS_dxy_eta_vs_run[iDir];
492  delete g_dxy_eta_hi_vs_run[iDir];
493  delete g_dxy_eta_lo_vs_run[iDir];
494 
495  delete g_dz_phi_vs_run[iDir];
496  delete g_chi2_dz_phi_vs_run[iDir];
497  delete g_KS_dz_phi_vs_run[iDir];
498  delete g_dz_phi_hi_vs_run[iDir];
499  delete g_dz_phi_lo_vs_run[iDir];
500 
501  delete g_dz_eta_vs_run[iDir];
502  delete g_chi2_dz_eta_vs_run[iDir];
503  delete g_KS_dz_eta_vs_run[iDir];
504  delete g_dz_eta_hi_vs_run[iDir];
505  delete g_dz_eta_lo_vs_run[iDir];
506 
507  delete h_RMS_dxy_phi_vs_run[iDir];
508  delete h_RMS_dxy_eta_vs_run[iDir];
509  delete h_RMS_dz_phi_vs_run[iDir];
510  delete h_RMS_dz_eta_vs_run[iDir];
511 
512  delete h2_scatter_dxy_vs_run[iDir];
513  delete h2_scatter_dz_vs_run[iDir];
514  }
515 
516  fout->Close();
517 
518  timer.Stop();
519  timer.Print();
520 }
521 
526 /*--------------------------------------------------------------------*/
528  const std::vector<double> &ticks,
529  const std::vector<double> &ex_ticks,
530  TGraph *&g_mean,
531  TGraph *&g_chi2,
532  TGraph *&g_KS,
533  TGraph *&g_low,
534  TGraph *&g_high,
535  TGraphAsymmErrors *&g_asym,
536  TH1F *h_RMS[],
537  const pv::bundle &mybundle,
538  const pv::view &theView,
539  const int index,
540  const TString &label)
541 /*--------------------------------------------------------------------*/
542 {
543  g_mean = new TGraph(ticks.size(), &(ticks[0]), &((allInputs.getMean()[label])[0]));
544  g_chi2 = new TGraph(ticks.size(), &(ticks[0]), &((allInputs.getChi2()[label])[0]));
545  g_KS = new TGraph(ticks.size(), &(ticks[0]), &((allInputs.getKS()[label])[0]));
546  g_high = new TGraph(ticks.size(), &(ticks[0]), &((allInputs.getHigh()[label])[0]));
547  g_low = new TGraph(ticks.size(), &(ticks[0]), &((allInputs.getLow()[label])[0]));
548 
549  g_asym = new TGraphAsymmErrors(ticks.size(),
550  &(ticks[0]),
551  &((allInputs.getMean()[label])[0]),
552  &(ex_ticks[0]),
553  &(ex_ticks[0]),
554  &((allInputs.getLowErr()[label])[0]),
555  &((allInputs.getHighErr()[label])[0]));
556 
557  g_mean->SetTitle(label);
558  g_asym->SetTitle(label);
559 
560  // scatter or RMS TH1
561  h_RMS[index] = new TH1F(Form("h_RMS_dz_eta_%s", label.Data()), label, ticks.size() - 1, &(ticks[0]));
562  h_RMS[index]->SetStats(kFALSE);
563 
564  for (size_t bincounter = 1; bincounter < ticks.size(); bincounter++) {
565  h_RMS[index]->SetBinContent(
566  bincounter, std::abs(allInputs.getHigh()[label][bincounter - 1] - allInputs.getLow()[label][bincounter - 1]));
567  h_RMS[index]->SetBinError(bincounter, 0.01);
568  }
569 }
570 
575 /*--------------------------------------------------------------------*/
576 std::vector<int> PreparePVTrends::list_files(const char *dirname, const char *ext)
577 /*--------------------------------------------------------------------*/
578 {
579  std::vector<int> theRunNumbers;
580 
581  TSystemDirectory dir(dirname, dirname);
582  TList *files = dir.GetListOfFiles();
583  if (files) {
584  TSystemFile *file;
585  TString fname;
586  TIter next(files);
587  while ((file = (TSystemFile *)next())) {
588  fname = file->GetName();
589  if (!file->IsDirectory() && fname.EndsWith(ext) && fname.BeginsWith("PVValidation")) {
590  //logInfo << fname.Data() << std::endl;
591  TObjArray *bits = fname.Tokenize("_");
592  TString theRun = bits->At(2)->GetName();
593  //logInfo << theRun << std::endl;
594  TString formatRun = (theRun.ReplaceAll(".root", "")).ReplaceAll("_", "");
595  //logInfo << dirname << " "<< formatRun.Atoi() << std::endl;
596  theRunNumbers.push_back(formatRun.Atoi());
597  }
598  }
599  }
600  return theRunNumbers;
601 }
602 
607 /*--------------------------------------------------------------------*/
608 TH1F *PreparePVTrends::drawConstantWithErr(TH1F *hist, Int_t iter, Double_t theConst)
609 /*--------------------------------------------------------------------*/
610 {
611  Int_t nbins = hist->GetNbinsX();
612  Double_t lowedge = hist->GetBinLowEdge(1);
613  Double_t highedge = hist->GetBinLowEdge(nbins + 1);
614 
615  TH1F *hzero = new TH1F(Form("hconst_%s_%i", hist->GetName(), iter),
616  Form("hconst_%s_%i", hist->GetName(), iter),
617  nbins,
618  lowedge,
619  highedge);
620  for (Int_t i = 0; i <= hzero->GetNbinsX(); i++) {
621  hzero->SetBinContent(i, theConst);
622  hzero->SetBinError(i, hist->GetBinError(i));
623  }
624  hzero->SetLineWidth(2);
625  hzero->SetLineStyle(9);
626  hzero->SetLineColor(kMagenta);
627 
628  return hzero;
629 }
630 
635 /*--------------------------------------------------------------------*/
637 /*--------------------------------------------------------------------*/
638 {
639  /*
640  Double_t y_min = hist->GetBinLowEdge(1);
641  Double_t y_max = hist->GetBinLowEdge(hist->GetNbinsX()+1);
642  */
643 
644  Double_t y_min = -0.1;
645  Double_t y_max = 0.1;
646 
647  std::vector<Double_t> contents;
648  for (int j = 0; j < hist->GetNbinsX(); j++) {
649  if (std::abs(hist->GetXaxis()->GetBinCenter(j)) <= 0.1)
650  contents.push_back(hist->GetBinContent(j + 1));
651  }
652 
653  auto ret = unrolledHisto(y_min, y_max, contents.size(), contents);
654  return ret;
655 }
656 
661 /*--------------------------------------------------------------------*/
663 /*--------------------------------------------------------------------*/
664 {
665  int nbins = hist->GetNbinsX();
666  // if there are no bins in the histogram then return default constructed object
667  // shouldn't really ever happen
668  if (nbins <= 0) {
669  logError << "No bins in the input histogram";
670  return pv::biases();
671  }
672 
673  //extract median from histogram
674  double *y = new double[nbins];
675  double *err = new double[nbins];
676 
677  // remember for weight means <x> = sum_i (x_i* w_i) / sum_i w_i ; where w_i = 1/sigma^2_i
678 
679  for (int j = 0; j < nbins; j++) {
680  y[j] = hist->GetBinContent(j + 1);
681  if (hist->GetBinError(j + 1) != 0.) {
682  err[j] = 1. / (hist->GetBinError(j + 1) * hist->GetBinError(j + 1));
683  } else {
684  err[j] = 0.;
685  }
686  }
687 
688  Double_t w_mean = TMath::Mean(nbins, y, err);
689  Double_t w_rms = TMath::RMS(nbins, y, err);
690 
691  Double_t mean = TMath::Mean(nbins, y);
692  Double_t rms = TMath::RMS(nbins, y);
693 
694  Double_t max = hist->GetMaximum();
695  Double_t min = hist->GetMinimum();
696 
697  // in case one would like to use a pol0 fit
698  hist->Fit("pol0", "Q0+");
699  TF1 *f = (TF1 *)hist->FindObject("pol0");
700  //f->SetLineColor(hist->GetLineColor());
701  //f->SetLineStyle(hist->GetLineStyle());
702  Double_t chi2 = f->GetChisquare();
703  Int_t ndf = f->GetNDF();
704 
705  TH1F *theZero = drawConstantWithErr(hist, 1, 1.);
706  TH1F *displaced = (TH1F *)hist->Clone("displaced");
707  displaced->Add(theZero);
708  Double_t ksScore = std::max(-20., TMath::Log10(displaced->KolmogorovTest(theZero)));
709 
710  /*
711  std::pair<std::pair<Double_t,Double_t>, Double_t> result;
712  std::pair<Double_t,Double_t> resultBounds;
713  resultBounds = useRMS_ ? std::make_pair(mean-rms,mean+rms) : std::make_pair(min,max) ;
714  result = make_pair(resultBounds,mean);
715  */
716 
717  pv::biases result(mean, rms, w_mean, w_rms, min, max, chi2, ndf, ksScore);
718 
719  delete theZero;
720  delete displaced;
721  delete[] y;
722  delete[] err;
723  return result;
724 }
725 
730 /*--------------------------------------------------------------------*/
732  std::vector<int> intersection,
733  const Int_t nDirs_,
734  const char *dirs[10],
735  TString LegLabels[10],
736  bool useRMS,
737  const size_t nWorkers,
738  bool doUnitTest)
739 /*--------------------------------------------------------------------*/
740 {
742 
743  unsigned int effSize = std::min(nWorkers, intersection.size());
744 
745  unsigned int pitch = std::floor(intersection.size() / effSize);
746  unsigned int first = iter * pitch;
747  unsigned int last = (iter == (effSize - 1)) ? intersection.size() : ((iter + 1) * pitch);
748 
749  logInfo << "iter:" << iter << "| pitch: " << pitch << " [" << first << "-" << last << ")" << std::endl;
750 
751  ret.m_index = iter;
752 
753  for (unsigned int n = first; n < last; n++) {
754  //in case of debug, use only 50
755  //for(unsigned int n=0; n<50;n++){
756 
757  //if(intersection.at(n)!=283946)
758  // continue;
759 
760  if (VERBOSE) {
761  logInfo << "iter: " << iter << " " << n << " " << intersection.at(n) << std::endl;
762  }
763 
764  TFile *fins[nDirs_];
765 
766  TH1F *dxyPhiMeanTrend[nDirs_];
767  TH1F *dxyPhiWidthTrend[nDirs_];
768  TH1F *dzPhiMeanTrend[nDirs_];
769  TH1F *dzPhiWidthTrend[nDirs_];
770 
771  //TH1F *dxyLadderMeanTrend[nDirs_];
772  //TH1F *dxyLadderWidthTrend[nDirs_];
773  //TH1F *dzLadderWidthTrend[nDirs_];
774  //TH1F *dzLadderMeanTrend[nDirs_];
775 
776  //TH1F *dxyModZMeanTrend[nDirs_];
777  //TH1F *dxyModZWidthTrend[nDirs_];
778  //TH1F *dzModZMeanTrend[nDirs_];
779  //TH1F *dzModZWidthTrend[nDirs_];
780 
781  TH1F *dxyEtaMeanTrend[nDirs_];
782  TH1F *dxyEtaWidthTrend[nDirs_];
783  TH1F *dzEtaMeanTrend[nDirs_];
784  TH1F *dzEtaWidthTrend[nDirs_];
785 
786  TH1F *dxyNormPhiWidthTrend[nDirs_];
787  TH1F *dxyNormEtaWidthTrend[nDirs_];
788  TH1F *dzNormPhiWidthTrend[nDirs_];
789  TH1F *dzNormEtaWidthTrend[nDirs_];
790 
791  TH1F *dxyNormPtWidthTrend[nDirs_];
792  TH1F *dzNormPtWidthTrend[nDirs_];
793  TH1F *dxyPtWidthTrend[nDirs_];
794  TH1F *dzPtWidthTrend[nDirs_];
795 
796  TH1F *dxyIntegralTrend[nDirs_];
797  TH1F *dzIntegralTrend[nDirs_];
798 
799  bool areAllFilesOK = true;
800  Int_t lastOpen = 0;
801 
802  // loop over the objects
803  for (Int_t j = 0; j < nDirs_; j++) {
804  //fins[j] = TFile::Open(Form("%s/PVValidation_%s_%i.root",dirs[j],dirs[j],intersection[n]));
805  size_t position = std::string(dirs[j]).find('/');
806  std::string stem = std::string(dirs[j]).substr(position + 1); // get from position to the end
807 
808  fins[j] = new TFile(Form("%s/PVValidation_%s_%i.root", dirs[j], stem.c_str(), intersection[n]));
809  if (fins[j]->IsZombie()) {
810  logError << Form("%s/PVValidation_%s_%i.root", dirs[j], stem.c_str(), intersection[n])
811  << " is a Zombie! cannot combine" << std::endl;
812  areAllFilesOK = false;
813  lastOpen = j;
814  break;
815  }
816 
817  if (VERBOSE) {
818  logInfo << Form("%s/PVValidation_%s_%i.root", dirs[j], stem.c_str(), intersection[n])
819  << " has size: " << fins[j]->GetSize() << " b ";
820  }
821 
822  // sanity check
823  TH1F *h_tracks = (TH1F *)fins[j]->Get("PVValidation/EventFeatures/h_nTracks");
824  Double_t numEvents = h_tracks->GetEntries();
825 
826  if (!doUnitTest) {
827  if (numEvents < 2500) {
828  logWarning << "excluding run " << intersection[n] << " because it has less than 2.5k events" << std::endl;
829  areAllFilesOK = false;
830  lastOpen = j;
831  break;
832  }
833  } else {
834  if (numEvents == 0) {
835  logWarning << "excluding run " << intersection[n] << " because it has 0 events" << std::endl;
836  areAllFilesOK = false;
837  lastOpen = j;
838  break;
839  }
840  }
841 
842  dxyPhiMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dxy_phi");
843  dxyPhiWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dxy_phi");
844  dzPhiMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dz_phi");
845  dzPhiWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dz_phi");
846 
847  //dxyLadderMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dxy_ladder");
848  //dxyLadderWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dxy_ladder");
849  //dzLadderMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dz_ladder");
850  //dzLadderWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dz_ladder");
851 
852  dxyEtaMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dxy_eta");
853  dxyEtaWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dxy_eta");
854  dzEtaMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dz_eta");
855  dzEtaWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dz_eta");
856 
857  //dxyModZMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dxy_modZ");
858  //dxyModZWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dxy_modZ");
859  //dzModZMeanTrend[j] = (TH1F *)fins[j]->Get("PVValidation/MeanTrends/means_dz_modZ");
860  //dzModZWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dz_modZ");
861 
862  dxyNormPhiWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dxy_phi");
863  dxyNormEtaWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dxy_eta");
864  dzNormPhiWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dz_phi");
865  dzNormEtaWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dz_eta");
866 
867  dxyNormPtWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dxy_pTCentral");
868  dzNormPtWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/norm_widths_dz_pTCentral");
869  dxyPtWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dxy_pTCentral");
870  dzPtWidthTrend[j] = (TH1F *)fins[j]->Get("PVValidation/WidthTrends/widths_dz_pTCentral");
871 
872  dxyIntegralTrend[j] = (TH1F *)fins[j]->Get("PVValidation/ProbeTrackFeatures/h_probedxyRefitV");
873  dzIntegralTrend[j] = (TH1F *)fins[j]->Get("PVValidation/ProbeTrackFeatures/h_probedzRefitV");
874 
875  // fill the vectors of biases
876 
877  auto dxyPhiBiases = getBiases(dxyPhiMeanTrend[j]);
878 
879  //logInfo<<"\n" <<j<<" "<< LegLabels[j] << " dxy(phi) mean: "<< dxyPhiBiases.getWeightedMean()
880  // <<" dxy(phi) max: "<< dxyPhiBiases.getMax()
881  // <<" dxy(phi) min: "<< dxyPhiBiases.getMin()
882  // << std::endl;
883 
884  ret.m_dxyPhiMeans[LegLabels[j]].push_back(dxyPhiBiases.getWeightedMean());
885  ret.m_dxyPhiChi2[LegLabels[j]].push_back(TMath::Log10(dxyPhiBiases.getNormChi2()));
886  ret.m_dxyPhiKS[LegLabels[j]].push_back(dxyPhiBiases.getKSScore());
887 
888  //logInfo<<"\n" <<j<<" "<< LegLabels[j] << " dxy(phi) ks score: "<< dxyPhiBiases.getKSScore() << std::endl;
889 
890  useRMS
891  ? ret.m_dxyPhiLo[LegLabels[j]].push_back(dxyPhiBiases.getWeightedMean() - 2 * dxyPhiBiases.getWeightedRMS())
892  : ret.m_dxyPhiLo[LegLabels[j]].push_back(dxyPhiBiases.getMin());
893  useRMS
894  ? ret.m_dxyPhiHi[LegLabels[j]].push_back(dxyPhiBiases.getWeightedMean() + 2 * dxyPhiBiases.getWeightedRMS())
895  : ret.m_dxyPhiHi[LegLabels[j]].push_back(dxyPhiBiases.getMax());
896 
897  auto dxyEtaBiases = getBiases(dxyEtaMeanTrend[j]);
898  ret.m_dxyEtaMeans[LegLabels[j]].push_back(dxyEtaBiases.getWeightedMean());
899  ret.m_dxyEtaChi2[LegLabels[j]].push_back(TMath::Log10(dxyEtaBiases.getNormChi2()));
900  ret.m_dxyEtaKS[LegLabels[j]].push_back(dxyEtaBiases.getKSScore());
901  useRMS
902  ? ret.m_dxyEtaLo[LegLabels[j]].push_back(dxyEtaBiases.getWeightedMean() - 2 * dxyEtaBiases.getWeightedRMS())
903  : ret.m_dxyEtaLo[LegLabels[j]].push_back(dxyEtaBiases.getMin());
904  useRMS
905  ? ret.m_dxyEtaHi[LegLabels[j]].push_back(dxyEtaBiases.getWeightedMean() + 2 * dxyEtaBiases.getWeightedRMS())
906  : ret.m_dxyEtaHi[LegLabels[j]].push_back(dxyEtaBiases.getMax());
907 
908  auto dzPhiBiases = getBiases(dzPhiMeanTrend[j]);
909  ret.m_dzPhiMeans[LegLabels[j]].push_back(dzPhiBiases.getWeightedMean());
910  ret.m_dzPhiChi2[LegLabels[j]].push_back(TMath::Log10(dzPhiBiases.getNormChi2()));
911  ret.m_dzPhiKS[LegLabels[j]].push_back(dzPhiBiases.getKSScore());
912  useRMS ? ret.m_dzPhiLo[LegLabels[j]].push_back(dzPhiBiases.getWeightedMean() - 2 * dzPhiBiases.getWeightedRMS())
913  : ret.m_dzPhiLo[LegLabels[j]].push_back(dzPhiBiases.getMin());
914  useRMS ? ret.m_dzPhiHi[LegLabels[j]].push_back(dzPhiBiases.getWeightedMean() + 2 * dzPhiBiases.getWeightedRMS())
915  : ret.m_dzPhiHi[LegLabels[j]].push_back(dzPhiBiases.getMax());
916 
917  auto dzEtaBiases = getBiases(dzEtaMeanTrend[j]);
918  ret.m_dzEtaMeans[LegLabels[j]].push_back(dzEtaBiases.getWeightedMean());
919  ret.m_dzEtaChi2[LegLabels[j]].push_back(TMath::Log10(dzEtaBiases.getNormChi2()));
920  ret.m_dzEtaKS[LegLabels[j]].push_back(dzEtaBiases.getKSScore());
921  useRMS ? ret.m_dzEtaLo[LegLabels[j]].push_back(dzEtaBiases.getWeightedMean() - 2 * dzEtaBiases.getWeightedRMS())
922  : ret.m_dzEtaLo[LegLabels[j]].push_back(dzEtaBiases.getMin());
923  useRMS ? ret.m_dzEtaHi[LegLabels[j]].push_back(dzEtaBiases.getWeightedMean() + 2 * dzEtaBiases.getWeightedRMS())
924  : ret.m_dzEtaHi[LegLabels[j]].push_back(dzEtaBiases.getMax());
925 
926  // unrolled histograms
927  ret.m_dxyVect[LegLabels[j]].push_back(getUnrolledHisto(dxyIntegralTrend[j]));
928  ret.m_dzVect[LegLabels[j]].push_back(getUnrolledHisto(dzIntegralTrend[j]));
929  }
930 
931  if (!areAllFilesOK) {
932  // do all the necessary deletions
933  logWarning << "====> not all files are OK" << std::endl;
934 
935  for (int i = 0; i < lastOpen; i++) {
936  fins[i]->Close();
937  }
938  continue;
939  } else {
940  ret.m_runs.push_back(intersection.at(n));
941  }
942 
943  if (VERBOSE) {
944  logInfo << "I am still here - runs.size(): " << ret.m_runs.size() << std::endl;
945  }
946 
947  // do all the necessary deletions
948 
949  for (int i = 0; i < nDirs_; i++) {
950  delete dxyPhiMeanTrend[i];
951  delete dzPhiMeanTrend[i];
952  delete dxyEtaMeanTrend[i];
953  delete dzEtaMeanTrend[i];
954 
955  delete dxyPhiWidthTrend[i];
956  delete dzPhiWidthTrend[i];
957  delete dxyEtaWidthTrend[i];
958  delete dzEtaWidthTrend[i];
959 
960  delete dxyNormPhiWidthTrend[i];
961  delete dxyNormEtaWidthTrend[i];
962  delete dzNormPhiWidthTrend[i];
963  delete dzNormEtaWidthTrend[i];
964 
965  delete dxyNormPtWidthTrend[i];
966  delete dzNormPtWidthTrend[i];
967  delete dxyPtWidthTrend[i];
968  delete dzPtWidthTrend[i];
969 
970  fins[i]->Close();
971  }
972 
973  if (VERBOSE) {
974  logInfo << std::endl;
975  }
976  }
977 
978  return ret;
979 }
Structure biases Contains characterization of a single run PV bias plot.
Structure outPVtrends Contains the ensemble of all the alignmentTrends built by the functor...
Definition: OutPVtrends.h:88
#define VERBOSE
alignmentTrend getHighErr() const
std::vector< std::string > LabelList
ret
prodAgent to be discontinued
void multiRunPVValidation(bool useRMS=true, TString lumiInputFile="", bool doUnitTest=false)
alignmentTrend getMean() const
alignmentTrend getLowErr() const
static outPVtrends processData(size_t iter, std::vector< int > intersection, const Int_t nDirs_, const char *dirs[10], TString LegLabels[10], bool useRMS, const size_t nWorkers, bool doUnitTest)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::vector< int > list_files(const char *dirname=".", const char *ext=".root")
assert(be >=bs)
Structure wrappedTrends Contains the ensemble vs run number of the alignmentTrend characterization...
nlohmann::json json
#define logInfo
char const * label
Structure bundle Contains the ensemble of all the information to build the graphs alignmentTrends...
alignmentTrend getHigh() const
void setDirsAndLabels(boost::property_tree::ptree &json)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const char * outputFileName_
double f[11][100]
void outputGraphs(const pv::wrappedTrends &allInputs, const std::vector< double > &ticks, const std::vector< double > &ex_ticks, TGraph *&g_mean, TGraph *&g_chi2, TGraph *&g_KS, TGraph *&g_low, TGraph *&g_high, TGraphAsymmErrors *&g_asym, TH1F *h_RMS[], const pv::bundle &mybundle, const pv::view &theView, const int index, const TString &label)
static TH1F * drawConstantWithErr(TH1F *hist, Int_t iter, Double_t theConst)
static unrolledHisto getUnrolledHisto(TH1F *hist)
alignmentTrend getKS() const
std::map< TString, std::vector< double > > alignmentTrend
Definition: OutPVtrends.h:44
std::vector< std::string > DirList
const size_t nWorkers_
double b
Definition: hdecay.h:120
string fname
main script
double a
Definition: hdecay.h:121
static int position[264][3]
Definition: ReadPGInfo.cc:289
alignmentTrend getChi2() const
alignmentTrend getLow() const
Definition: memstream.h:15
static pv::biases getBiases(TH1F *hist)
PreparePVTrends(const char *outputFileName, int nWorkers, boost::property_tree::ptree &json)
#define logWarning
#define logError
T * Get(Args... args)
Definition: Trend.h:122
std::vector< std::string > set_intersection(std::vector< std::string > const &v1, std::vector< std::string > const &v2)