CMS 3D CMS Logo

JetHtPlotConfiguration.cc
Go to the documentation of this file.
2 
3 /*
4  * Default constructor
5  */
7  : fDebugLevel(0),
8  fDrawTrackQA(false),
9  fDrawReferenceProfile(false),
10  fDrawCentralEtaSummaryProfile(true),
11  fProfileLegendShiftTotalX(0),
12  fProfileLegendShiftTotalY(0),
13  fProfileLegendTextSize(0.05),
14  fProfileLegendTextFont(62),
15  fTrendLegendShiftTotalX(0),
16  fTrendLegendShiftTotalY(0),
17  fTrendLegendTextSize(0.05),
18  fTrendLegendTextFont(62),
19  fDrawTrendTag(false),
20  fTrendTagText(0),
21  fTrendTagPositionX(0),
22  fTrendTagPositionY(0),
23  fTrendTagTextSize(0.05),
24  fTrendTagTextFont(42),
25  fTrendCanvasHeight(400),
26  fTrendCanvasWidth(1000),
27  fTrendMarginLeft(0.08),
28  fTrendMarginRight(0.03),
29  fTrendMarginTop(0.06),
30  fTrendMarginBottom(0.15),
31  fTrendTitleOffsetX(1.1),
32  fTrendTitleOffsetY(0.55),
33  fTrendTitleSizeX(0.06),
34  fTrendTitleSizeY(0.06),
35  fTrendLabelOffsetX(0.01),
36  fTrendLabelOffsetY(0.007),
37  fTrendLabelSizeX(0.05),
38  fTrendLabelSizeY(0.05),
39  fInputFileNames(0),
40  fLegendComments(0),
41  fMarkerColor(0),
42  fMarkerStyle(0),
43  fMarkerSize(0),
44  fCopyErrorColor(0),
45  fLegendTextForAllRuns("All"),
46  fDrawPlotsForEachIOV(false),
47  fNIovInOnePlot(1),
48  fUseLuminosityForTrends(true),
49  fSkipRunsWithNoData(false),
50  fNormalizeQAplots(true),
51  fSaveComment(""),
52  fLumiPerIovFile("lumiPerRun_Run2.txt"),
53  fIovListMode("run"),
54  fDrawYearLines(false),
55  fYearLineColor(kBlack),
56  fYearLineWidth(1),
57  fYearLineStyle(1),
58  fRunsForLines(0),
59  fWidePtBinBorders(0),
60  fMakeIovListForSlides(false),
61  fIovListForSlides("iovListForSlides.txt") {
62  // Default zoom values
63  double defaultProfileZoomLow[knProfileTypes] = {28, 45, 30, 7, 40, 20, 25, 20};
64  double defaultProfileZoomHigh[knProfileTypes] = {60, 80, 95, 40, 70, 90, 90, 80};
65  double defaultTrendZoomLow[knTrendTypes] = {20, 10};
66  double defaultTrendZoomHigh[knTrendTypes] = {95, 90};
67 
68  // Initialize arrays
69  for (int iHistogram = 0; iHistogram < knHistogramTypes; iHistogram++) {
70  fDrawHistogram[iHistogram] = false;
71  }
72  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
73  fDrawProfile[iProfile] = false;
74  fProfileZoomLow[iProfile] = defaultProfileZoomLow[iProfile];
75  fProfileZoomHigh[iProfile] = defaultProfileZoomHigh[iProfile];
76  }
77  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
78  fDrawTrend[iTrend] = false;
79  fTrendZoomLow[iTrend] = defaultTrendZoomLow[iTrend];
80  fTrendZoomHigh[iTrend] = defaultTrendZoomHigh[iTrend];
81  }
82  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
83  fProfileLegendShiftColumnX[iColumn] = 0;
84  fProfileLegendShiftColumnY[iColumn] = 0;
85  }
86 }
87 
88 /*
89  * Copy constructor
90  */
92  : fDebugLevel(in.fDebugLevel),
93  fDrawTrackQA(in.fDrawTrackQA),
94  fDrawReferenceProfile(in.fDrawReferenceProfile),
95  fDrawCentralEtaSummaryProfile(in.fDrawCentralEtaSummaryProfile),
96  fProfileLegendShiftTotalX(in.fProfileLegendShiftTotalX),
97  fProfileLegendShiftTotalY(in.fProfileLegendShiftTotalY),
98  fProfileLegendTextSize(in.fProfileLegendTextSize),
99  fProfileLegendTextFont(in.fProfileLegendTextFont),
100  fTrendLegendShiftTotalX(in.fTrendLegendShiftTotalX),
101  fTrendLegendShiftTotalY(in.fTrendLegendShiftTotalY),
102  fTrendLegendTextSize(in.fTrendLegendTextSize),
103  fTrendLegendTextFont(in.fTrendLegendTextFont),
104  fDrawTrendTag(in.fDrawTrendTag),
105  fTrendTagText(in.fTrendTagText),
106  fTrendTagPositionX(in.fTrendTagPositionX),
107  fTrendTagPositionY(in.fTrendTagPositionY),
108  fTrendTagTextSize(in.fTrendTagTextSize),
109  fTrendTagTextFont(in.fTrendTagTextFont),
110  fTrendCanvasHeight(in.fTrendCanvasHeight),
111  fTrendCanvasWidth(in.fTrendCanvasWidth),
112  fTrendMarginLeft(in.fTrendMarginLeft),
113  fTrendMarginRight(in.fTrendMarginRight),
114  fTrendMarginTop(in.fTrendMarginTop),
115  fTrendMarginBottom(in.fTrendMarginBottom),
116  fTrendTitleOffsetX(in.fTrendTitleOffsetX),
117  fTrendTitleOffsetY(in.fTrendTitleOffsetY),
118  fTrendTitleSizeX(in.fTrendTitleSizeX),
119  fTrendTitleSizeY(in.fTrendTitleSizeY),
120  fTrendLabelOffsetX(in.fTrendLabelOffsetX),
121  fTrendLabelOffsetY(in.fTrendLabelOffsetY),
122  fTrendLabelSizeX(in.fTrendLabelSizeX),
123  fTrendLabelSizeY(in.fTrendLabelSizeY),
124  fInputFileNames(in.fInputFileNames),
125  fLegendComments(in.fLegendComments),
126  fMarkerColor(in.fMarkerColor),
127  fMarkerStyle(in.fMarkerStyle),
128  fMarkerSize(in.fMarkerSize),
129  fCopyErrorColor(in.fCopyErrorColor),
130  fLegendTextForAllRuns(in.fLegendTextForAllRuns),
131  fDrawPlotsForEachIOV(in.fDrawPlotsForEachIOV),
132  fNIovInOnePlot(in.fNIovInOnePlot),
133  fUseLuminosityForTrends(in.fUseLuminosityForTrends),
134  fSkipRunsWithNoData(in.fSkipRunsWithNoData),
135  fNormalizeQAplots(in.fNormalizeQAplots),
136  fSaveComment(in.fSaveComment),
137  fLumiPerIovFile(in.fLumiPerIovFile),
138  fIovListMode(in.fIovListMode),
139  fDrawYearLines(in.fDrawYearLines),
140  fYearLineColor(in.fYearLineColor),
141  fYearLineWidth(in.fYearLineWidth),
142  fYearLineStyle(in.fYearLineStyle),
143  fRunsForLines(in.fRunsForLines),
144  fWidePtBinBorders(in.fWidePtBinBorders),
145  fMakeIovListForSlides(in.fMakeIovListForSlides),
146  fIovListForSlides(in.fIovListForSlides) {
147  // Copy arrays
148  for (int iHistogram = 0; iHistogram < knHistogramTypes; iHistogram++) {
149  fDrawHistogram[iHistogram] = in.fDrawHistogram[iHistogram];
150  }
151  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
152  fDrawProfile[iProfile] = in.fDrawProfile[iProfile];
153  fProfileZoomLow[iProfile] = in.fProfileZoomLow[iProfile];
154  fProfileZoomHigh[iProfile] = in.fProfileZoomHigh[iProfile];
155  }
156  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
157  fDrawTrend[iTrend] = in.fDrawTrend[iTrend];
158  fTrendZoomLow[iTrend] = in.fTrendZoomLow[iTrend];
159  fTrendZoomHigh[iTrend] = in.fTrendZoomHigh[iTrend];
160  }
161  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
162  fProfileLegendShiftColumnX[iColumn] = in.fProfileLegendShiftColumnX[iColumn];
163  fProfileLegendShiftColumnY[iColumn] = in.fProfileLegendShiftColumnY[iColumn];
164  }
165 }
166 
167 /*
168  * Assingment operator
169  */
171  if (&in == this)
172  return *this;
173 
174  fDebugLevel = in.fDebugLevel;
175  fDrawTrackQA = in.fDrawTrackQA;
176  fDrawReferenceProfile = in.fDrawReferenceProfile;
177  fDrawCentralEtaSummaryProfile = in.fDrawCentralEtaSummaryProfile;
178  fProfileLegendShiftTotalX = in.fProfileLegendShiftTotalX;
179  fProfileLegendShiftTotalY = in.fProfileLegendShiftTotalY;
180  fProfileLegendTextSize = in.fProfileLegendTextSize;
181  fProfileLegendTextFont = in.fProfileLegendTextFont;
182  fTrendLegendShiftTotalX = in.fTrendLegendShiftTotalX;
183  fTrendLegendShiftTotalY = in.fTrendLegendShiftTotalY;
184  fTrendLegendTextSize = in.fTrendLegendTextSize;
185  fTrendLegendTextFont = in.fTrendLegendTextFont;
186  fDrawTrendTag = in.fDrawTrendTag;
187  fTrendTagText = in.fTrendTagText;
188  fTrendTagPositionX = in.fTrendTagPositionX;
189  fTrendTagPositionY = in.fTrendTagPositionY;
190  fTrendTagTextSize = in.fTrendTagTextSize;
191  fTrendTagTextFont = in.fTrendTagTextFont;
192  fTrendCanvasHeight = in.fTrendCanvasHeight;
193  fTrendCanvasWidth = in.fTrendCanvasWidth;
194  fTrendMarginLeft = in.fTrendMarginLeft;
195  fTrendMarginRight = in.fTrendMarginRight;
196  fTrendMarginTop = in.fTrendMarginTop;
197  fTrendMarginBottom = in.fTrendMarginBottom;
198  fTrendTitleOffsetX = in.fTrendTitleOffsetX;
199  fTrendTitleOffsetY = in.fTrendTitleOffsetY;
200  fTrendTitleSizeX = in.fTrendTitleSizeX;
201  fTrendTitleSizeY = in.fTrendTitleSizeY;
202  fTrendLabelOffsetX = in.fTrendLabelOffsetX;
203  fTrendLabelOffsetY = in.fTrendLabelOffsetY;
204  fTrendLabelSizeX = in.fTrendLabelSizeX;
205  fTrendLabelSizeY = in.fTrendLabelSizeY;
206  fInputFileNames = in.fInputFileNames;
207  fLegendComments = in.fLegendComments;
208  fMarkerColor = in.fMarkerColor;
209  fMarkerStyle = in.fMarkerStyle;
210  fMarkerSize = in.fMarkerSize;
211  fCopyErrorColor = in.fCopyErrorColor;
212  fLegendTextForAllRuns = in.fLegendTextForAllRuns;
213  fDrawPlotsForEachIOV = in.fDrawPlotsForEachIOV;
214  fNIovInOnePlot = in.fNIovInOnePlot;
215  fUseLuminosityForTrends = in.fUseLuminosityForTrends;
216  fSkipRunsWithNoData = in.fSkipRunsWithNoData;
217  fNormalizeQAplots = in.fNormalizeQAplots;
218  fSaveComment = in.fSaveComment;
219  fLumiPerIovFile = in.fLumiPerIovFile;
220  fIovListMode = in.fIovListMode;
221  fDrawYearLines = in.fDrawYearLines;
222  fYearLineColor = in.fYearLineColor;
223  fYearLineWidth = in.fYearLineWidth;
224  fYearLineStyle = in.fYearLineStyle;
225  fRunsForLines = in.fRunsForLines;
226  fWidePtBinBorders = in.fWidePtBinBorders;
227  fMakeIovListForSlides = in.fMakeIovListForSlides;
228  fIovListForSlides = in.fIovListForSlides;
229 
230  // Copy arrays
231  for (int iHistogram = 0; iHistogram < knHistogramTypes; iHistogram++) {
232  fDrawHistogram[iHistogram] = in.fDrawHistogram[iHistogram];
233  }
234  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
235  fDrawProfile[iProfile] = in.fDrawProfile[iProfile];
236  fProfileZoomLow[iProfile] = in.fProfileZoomLow[iProfile];
237  fProfileZoomHigh[iProfile] = in.fProfileZoomHigh[iProfile];
238  }
239  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
240  fDrawTrend[iTrend] = in.fDrawTrend[iTrend];
241  fTrendZoomLow[iTrend] = in.fTrendZoomLow[iTrend];
242  fTrendZoomHigh[iTrend] = in.fTrendZoomHigh[iTrend];
243  }
244  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
245  fProfileLegendShiftColumnX[iColumn] = in.fProfileLegendShiftColumnX[iColumn];
246  fProfileLegendShiftColumnY[iColumn] = in.fProfileLegendShiftColumnY[iColumn];
247  }
248 
249  return *this;
250 }
251 
252 /*
253  * Destructor
254  */
256 
257 /*
258  * Read the configuration from json file
259  */
261  // Read the file to property tree
262  namespace pt = boost::property_tree;
263  pt::ptree configuration;
264  pt::read_json(fileName, configuration);
265 
266  // Read the alignments and styles for these
267  int indexForDefault = 0;
268  std::string alignmentName;
269  std::string thisValue;
270  int thisNumber;
271  bool thisBool;
272  for (pt::ptree::value_type& result : configuration.get_child("jethtplot.alignments")) {
273  alignmentName = result.first;
274 
275  // Input file for the alignment
276  try {
277  thisValue = configuration.get_child(Form("jethtplot.alignments.%s.inputFile", alignmentName.c_str()))
278  .get_value<std::string>();
279 
280  // From the file name, expand possible environment variables
282 
283  // Expand CMSSW_BASE event without preceding $-sign
284  boost::replace_all(thisValue, "CMSSW_BASE", getenv("CMSSW_BASE"));
285 
286  fInputFileNames.push_back(thisValue);
287  } catch (const std::exception& e) {
288  if (fDebugLevel > 0) {
289  std::cout << "No input file given for alignment " << alignmentName
290  << "! All the configuration for this alignment is skipped." << std::endl;
291  }
292  continue;
293  }
294 
295  // Legend text for the alignment
296  try {
297  thisValue = configuration.get_child(Form("jethtplot.alignments.%s.legendText", alignmentName.c_str()))
298  .get_value<std::string>();
299  fLegendComments.push_back(thisValue);
300  } catch (const std::exception& e) {
301  if (fDebugLevel > 0) {
302  std::cout << "No legend text given for alignment " << alignmentName << "! Using default value "
303  << Form("Alignment%d", indexForDefault) << "." << std::endl;
304  fLegendComments.push_back(Form("Alignment%d", indexForDefault));
305  }
306  }
307 
308  // Marker color related to the alignment
309  try {
310  thisNumber =
311  configuration.get_child(Form("jethtplot.alignments.%s.color", alignmentName.c_str())).get_value<int>();
312  fMarkerColor.push_back(thisNumber);
313  } catch (const std::exception& e) {
314  if (fDebugLevel > 0) {
315  std::cout << "No marker color given for alignment " << alignmentName << "! Using default value "
316  << fDefaultColors[indexForDefault] << "." << std::endl;
317  fMarkerColor.push_back(fDefaultColors[indexForDefault]);
318  }
319  }
320 
321  // Marker style related to the alignment
322  try {
323  thisNumber =
324  configuration.get_child(Form("jethtplot.alignments.%s.style", alignmentName.c_str())).get_value<int>();
325  fMarkerStyle.push_back(thisNumber);
326  } catch (const std::exception& e) {
327  if (fDebugLevel > 0) {
328  std::cout << "No marker style given for alignment " << alignmentName << "! Using default value "
329  << fDefaultStyle << "." << std::endl;
330  fMarkerStyle.push_back(fDefaultStyle);
331  }
332  }
333 
334  // Marker size related to the alignment
335  try {
336  thisNumber =
337  configuration.get_child(Form("jethtplot.alignments.%s.markerSize", alignmentName.c_str())).get_value<int>();
338  fMarkerSize.push_back(thisNumber);
339  } catch (const std::exception& e) {
340  if (fDebugLevel > 0) {
341  std::cout << "No marker size given for alignment " << alignmentName << "! Using default value "
342  << fDefaultMarkerSize << "." << std::endl;
343  fMarkerSize.push_back(fDefaultMarkerSize);
344  }
345  }
346 
347  // Copy color for statistical error bar related to the alignment
348  try {
349  thisBool = configuration.get_child(Form("jethtplot.alignments.%s.copyErrorColor", alignmentName.c_str()))
350  .get_value<bool>();
351  fCopyErrorColor.push_back(thisBool);
352  } catch (const std::exception& e) {
353  if (fDebugLevel > 0) {
354  std::cout << "Not defined is marker color should be copied for statistical error bars for alignment "
355  << alignmentName << "! Using default value false." << std::endl;
356  fCopyErrorColor.push_back(false);
357  }
358  }
359 
360  indexForDefault++;
361  }
362 
363  // Read the drawing configuration for track QA
364  try {
365  fDrawTrackQA = configuration.get_child(Form("jethtplot.%s", fJsonTrackQAname.c_str())).get_value<bool>();
366  } catch (const std::exception& e) {
367  if (fDebugLevel > 0) {
368  std::cout << "No value " << Form("jethtplot.%s", fJsonTrackQAname.c_str())
369  << " in configuration. Using default value " << fDrawTrackQA << "." << std::endl;
370  }
371  }
372 
373  // Read the drawing configuration for dz and dxy value and error histograms
374  for (int iHistogram = 0; iHistogram < knHistogramTypes; iHistogram++) {
375  try {
376  fDrawHistogram[iHistogram] =
378  .get_child(
379  Form("jethtplot.%s.%s", fJsonCategoryNameHistogram.c_str(), fJsonNameHistogram[iHistogram].c_str()))
380  .get_value<bool>();
381  } catch (const std::exception& e) {
382  if (fDebugLevel > 0) {
383  std::cout << "No value "
384  << Form("jethtplot.%s.%s", fJsonCategoryNameHistogram.c_str(), fJsonNameHistogram[iHistogram].c_str())
385  << " in configuration. Using default value " << fDrawHistogram[iHistogram] << "." << std::endl;
386  }
387  }
388  }
389 
390  // Read the drawing configuration for profile plots
391  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
392  try {
393  fDrawProfile[iProfile] =
395  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameProfile[iProfile].c_str()))
396  .get_value<bool>();
397  } catch (const std::exception& e) {
398  if (fDebugLevel > 0) {
399  std::cout << "No value "
400  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameProfile[iProfile].c_str())
401  << " in configuration. Using default value " << fDrawProfile[iProfile] << "." << std::endl;
402  }
403  }
404  }
405 
406  // Draw the drawing of reference profile
407  try {
410  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameReferenceProfile.c_str()))
411  .get_value<bool>();
412  } catch (const std::exception& e) {
413  if (fDebugLevel > 0) {
414  std::cout << "No value "
415  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameReferenceProfile.c_str())
416  << " in configuration. Using default value " << fDrawReferenceProfile << "." << std::endl;
417  }
418  }
419 
420  // Draw the central eta summary profile to the all runs summary profile plots
421  try {
424  .get_child(
425  Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameCentralEtaSummaryProfile.c_str()))
426  .get_value<bool>();
427  } catch (const std::exception& e) {
428  if (fDebugLevel > 0) {
429  std::cout << "No value "
430  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameCentralEtaSummaryProfile.c_str())
431  << " in configuration. Using default value " << fDrawCentralEtaSummaryProfile << "." << std::endl;
432  }
433  }
434 
435  // Read the total legend shift in x-direction for legends in profile plots
436  try {
439  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftTotalX.c_str()))
440  .get_value<double>();
441  } catch (const std::exception& e) {
442  if (fDebugLevel > 0) {
443  std::cout << "No value "
444  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftTotalX.c_str())
445  << " in configuration. Using default value " << fProfileLegendShiftTotalX << "." << std::endl;
446  }
447  }
448 
449  // Read the total legend shift in y-direction for legends in profile plots
450  try {
453  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftTotalY.c_str()))
454  .get_value<double>();
455  } catch (const std::exception& e) {
456  if (fDebugLevel > 0) {
457  std::cout << "No value "
458  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftTotalY.c_str())
459  << " in configuration. Using default value " << fProfileLegendShiftTotalY << "." << std::endl;
460  }
461  }
462 
463  // Read the columnwise legend shift in x-direction for legends in profile plots
464  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
465  try {
466  fProfileLegendShiftColumnX[iColumn] =
468  .get_child(Form(
469  "jethtplot.%s.%s%d", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftColumnX.c_str(), iColumn))
470  .get_value<double>();
471  } catch (const std::exception& e) {
472  if (fDebugLevel > 0) {
473  std::cout
474  << "No value "
475  << Form("jethtplot.%s.%s%d", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftColumnX.c_str(), iColumn)
476  << " in configuration. Using default value " << fProfileLegendShiftColumnX[iColumn] << "." << std::endl;
477  }
478  }
479  }
480 
481  // Read the columnwise legend shift in y-direction for legends in profile plots
482  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
483  try {
484  fProfileLegendShiftColumnY[iColumn] =
486  .get_child(Form(
487  "jethtplot.%s.%s%d", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftColumnY.c_str(), iColumn))
488  .get_value<double>();
489  } catch (const std::exception& e) {
490  if (fDebugLevel > 0) {
491  std::cout
492  << "No value "
493  << Form("jethtplot.%s.%s%d", fJsonCategoryNameProfile.c_str(), fJsonNameLegendShiftColumnY.c_str(), iColumn)
494  << " in configuration. Using default value " << fProfileLegendShiftColumnY[iColumn] << "." << std::endl;
495  }
496  }
497  }
498 
499  // Read the legend text size for profile plots
500  try {
503  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendTextSize.c_str()))
504  .get_value<double>();
505  } catch (const std::exception& e) {
506  if (fDebugLevel > 0) {
507  std::cout << "No value "
508  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendTextSize.c_str())
509  << " in configuration. Using default value " << fProfileLegendTextSize << "." << std::endl;
510  }
511  }
512 
513  // Read the legend text font for profile plots
514  try {
517  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendTextFont.c_str()))
518  .get_value<int>();
519  } catch (const std::exception& e) {
520  if (fDebugLevel > 0) {
521  std::cout << "No value "
522  << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNameLegendTextFont.c_str())
523  << " in configuration. Using default value " << fProfileLegendTextFont << "." << std::endl;
524  }
525  }
526 
527  // Read the legend text referring to all runs
528  try {
530  configuration.get_child(Form("jethtplot.%s", fJsonNameLegendTextForAllRuns.c_str())).get_value<std::string>();
531  } catch (const std::exception& e) {
532  if (fDebugLevel > 0) {
533  std::cout << "No value " << Form("jethtplot.%s", fJsonNameLegendTextForAllRuns.c_str())
534  << " in configuration. Using default value " << fLegendTextForAllRuns << "." << std::endl;
535  }
536  }
537 
538  // Read the configuration for plotting individual IOV:s for dxy, dx and profile plots
539  try {
541  configuration.get_child(Form("jethtplot.%s", fJsonDrawPlotsForEachIOV.c_str())).get_value<bool>();
542  } catch (const std::exception& e) {
543  if (fDebugLevel > 0) {
544  std::cout << "No value " << Form("jethtplot.%s", fJsonDrawPlotsForEachIOV.c_str())
545  << " in configuration. Using default value " << fDrawPlotsForEachIOV << "." << std::endl;
546  }
547  }
548 
549  // Read the number of IOVs plotted in the same figure, if individual IOV are plotted for profiles
550  try {
552  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNIovInOnePlot.c_str()))
553  .get_value<int>();
554  } catch (const std::exception& e) {
555  if (fDebugLevel > 0) {
556  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameProfile.c_str(), fJsonNIovInOnePlot.c_str())
557  << " in configuration. Using default value " << fNIovInOnePlot << "." << std::endl;
558  }
559  }
560 
561  // Read the axis zoom values for profile plots
562  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
563  try {
564  fProfileZoomLow[iProfile] =
566  .get_child(Form(
567  "jethtplot.%s.min%s", fJsonCategoryNameProfileZoom.c_str(), fJsonNameProfileZoom[iProfile].c_str()))
568  .get_value<double>();
569  } catch (const std::exception& e) {
570  if (fDebugLevel > 0) {
571  std::cout << "No value "
572  << Form("jethtplot.%s.min%s",
574  fJsonNameProfileZoom[iProfile].c_str())
575  << " in configuration. Using default value " << fProfileZoomLow[iProfile] << "." << std::endl;
576  }
577  }
578 
579  try {
580  fProfileZoomHigh[iProfile] =
582  .get_child(Form(
583  "jethtplot.%s.max%s", fJsonCategoryNameProfileZoom.c_str(), fJsonNameProfileZoom[iProfile].c_str()))
584  .get_value<double>();
585  } catch (const std::exception& e) {
586  if (fDebugLevel > 0) {
587  std::cout << "No value "
588  << Form("jethtplot.%s.max%s",
590  fJsonNameProfileZoom[iProfile].c_str())
591  << " in configuration. Using default value " << fProfileZoomHigh[iProfile] << "." << std::endl;
592  }
593  }
594  }
595 
596  // Read the drawing configuration for trend plots
597  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
598  try {
599  fDrawTrend[iTrend] =
601  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTrend[iTrend].c_str()))
602  .get_value<bool>();
603  } catch (const std::exception& e) {
604  if (fDebugLevel > 0) {
605  std::cout << "No value "
606  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTrend[iTrend].c_str())
607  << " in configuration. Using default value " << fDrawTrend[iTrend] << "." << std::endl;
608  }
609  }
610  }
611 
612  // Read the total legend shift in x-direction for legends in trend plots
613  try {
616  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendShiftTotalX.c_str()))
617  .get_value<double>();
618  } catch (const std::exception& e) {
619  if (fDebugLevel > 0) {
620  std::cout << "No value "
621  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendShiftTotalX.c_str())
622  << " in configuration. Using default value " << fTrendLegendShiftTotalX << "." << std::endl;
623  }
624  }
625 
626  // Read the total legend shift in y-direction for legends in trend plots
627  try {
630  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendShiftTotalY.c_str()))
631  .get_value<double>();
632  } catch (const std::exception& e) {
633  if (fDebugLevel > 0) {
634  std::cout << "No value "
635  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendShiftTotalY.c_str())
636  << " in configuration. Using default value " << fTrendLegendShiftTotalY << "." << std::endl;
637  }
638  }
639 
640  // Read the legend text size for trend plots
641  try {
644  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendTextSize.c_str()))
645  .get_value<double>();
646  } catch (const std::exception& e) {
647  if (fDebugLevel > 0) {
648  std::cout << "No value "
649  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendTextSize.c_str())
650  << " in configuration. Using default value " << fTrendLegendTextSize << "." << std::endl;
651  }
652  }
653 
654  // Read the legend text font for trend plots
655  try {
658  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendTextFont.c_str()))
659  .get_value<int>();
660  } catch (const std::exception& e) {
661  if (fDebugLevel > 0) {
662  std::cout << "No value "
663  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLegendTextFont.c_str())
664  << " in configuration. Using default value " << fTrendLegendTextFont << "." << std::endl;
665  }
666  }
667 
668  // Read the flag for drawing vertical lines to trend plots
669  try {
671  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonDrawYearLines.c_str()))
672  .get_value<bool>();
673  } catch (const std::exception& e) {
674  if (fDebugLevel > 0) {
675  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonDrawYearLines.c_str())
676  << " in configuration. Using default value " << fDrawYearLines << "." << std::endl;
677  }
678  }
679 
680  // Read the line color for year lines in trend plots
681  try {
683  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineColor.c_str()))
684  .get_value<int>();
685  } catch (const std::exception& e) {
686  if (fDebugLevel > 0) {
687  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineColor.c_str())
688  << " in configuration. Using default value " << fYearLineColor << "." << std::endl;
689  }
690  }
691 
692  // Read the line witdh for year lines in trend plots
693  try {
695  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineWidth.c_str()))
696  .get_value<int>();
697  } catch (const std::exception& e) {
698  if (fDebugLevel > 0) {
699  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineWidth.c_str())
700  << " in configuration. Using default value " << fYearLineWidth << "." << std::endl;
701  }
702  }
703 
704  // Read the line style for year lines in trend plots
705  try {
707  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineStyle.c_str()))
708  .get_value<int>();
709  } catch (const std::exception& e) {
710  if (fDebugLevel > 0) {
711  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonYearLineStyle.c_str())
712  << " in configuration. Using default value " << fYearLineStyle << "." << std::endl;
713  }
714  }
715 
716  // Read run positions to which vertical lines are drawn in trend plots
717  try {
718  for (auto& item :
719  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonRunsForLines.c_str()))) {
720  fRunsForLines.push_back(item.second.get_value<int>());
721  }
722  } catch (const std::exception& e) {
723  if (fDebugLevel > 0) {
724  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonRunsForLines.c_str())
725  << " in configuration. Using default values 290543 and 314881." << std::endl;
726  }
727  fRunsForLines.push_back(290543);
728  fRunsForLines.push_back(314881);
729  }
730 
731  // Read the flag for drawing manual tags to trend plots
732  try {
733  fDrawTrendTag =
734  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameDrawTag.c_str()))
735  .get_value<bool>();
736  } catch (const std::exception& e) {
737  if (fDebugLevel > 0) {
738  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameDrawTag.c_str())
739  << " in configuration. Using default value " << fDrawTrendTag << "." << std::endl;
740  }
741  }
742 
743  // Read the configuration for tags in trend plots
744  try {
745  int itemIndex = 0;
746  for (auto& configurationArray :
747  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagInfo.c_str()))) {
748  itemIndex = 0;
749  for (auto& item : configurationArray.second) {
750  if (itemIndex == 0) {
751  fTrendTagText.push_back(item.second.get_value<std::string>());
752  }
753  if (itemIndex == 1) {
754  fTrendTagPositionX.push_back(item.second.get_value<double>());
755  }
756  if (itemIndex == 2) {
757  fTrendTagPositionY.push_back(item.second.get_value<double>());
758  }
759  itemIndex++;
760  }
761  }
762  } catch (const std::exception& e) {
763  if (fDebugLevel > 0) {
764  std::cout << "There was either no value for "
765  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagInfo.c_str())
766  << " in configuration, or the input was in wrong format. Using default values 2016 at (0.105,0.855), "
767  "2017 at (0.305,0.855) and 2018 at (0.563,0.855)."
768  << std::endl;
769  }
770  fTrendTagText.clear();
771  fTrendTagText.push_back("2016");
772  fTrendTagText.push_back("2017");
773  fTrendTagText.push_back("2018");
774  fTrendTagPositionX.clear();
775  fTrendTagPositionX.push_back(0.105);
776  fTrendTagPositionX.push_back(0.305);
777  fTrendTagPositionX.push_back(0.563);
778  fTrendTagPositionY.clear();
779  fTrendTagPositionY.push_back(0.855);
780  fTrendTagPositionY.push_back(0.855);
781  fTrendTagPositionY.push_back(0.855);
782  }
783 
784  // Read the tag text size for trend plots
785  try {
787  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagTextSize.c_str()))
788  .get_value<double>();
789  } catch (const std::exception& e) {
790  if (fDebugLevel > 0) {
791  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagTextSize.c_str())
792  << " in configuration. Using default value " << fTrendTagTextSize << "." << std::endl;
793  }
794  }
795 
796  // Read the tag text font for trend plots
797  try {
799  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagTextFont.c_str()))
800  .get_value<int>();
801  } catch (const std::exception& e) {
802  if (fDebugLevel > 0) {
803  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTagTextFont.c_str())
804  << " in configuration. Using default value " << fTrendTagTextFont << "." << std::endl;
805  }
806  }
807 
808  // Read the trend plot canvas height
809  try {
811  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameCanvasHeight.c_str()))
812  .get_value<int>();
813  } catch (const std::exception& e) {
814  if (fDebugLevel > 0) {
815  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameCanvasHeight.c_str())
816  << " in configuration. Using default value " << fTrendCanvasHeight << "." << std::endl;
817  }
818  }
819 
820  // Read the trend plot canvas width
821  try {
823  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameCanvasWidth.c_str()))
824  .get_value<int>();
825  } catch (const std::exception& e) {
826  if (fDebugLevel > 0) {
827  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameCanvasWidth.c_str())
828  << " in configuration. Using default value " << fTrendCanvasWidth << "." << std::endl;
829  }
830  }
831 
832  // Read the left margin for trend plots
833  try {
835  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginLeft.c_str()))
836  .get_value<double>();
837  } catch (const std::exception& e) {
838  if (fDebugLevel > 0) {
839  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginLeft.c_str())
840  << " in configuration. Using default value " << fTrendMarginLeft << "." << std::endl;
841  }
842  }
843 
844  // Read the right margin for trend plots
845  try {
847  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginRight.c_str()))
848  .get_value<double>();
849  } catch (const std::exception& e) {
850  if (fDebugLevel > 0) {
851  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginRight.c_str())
852  << " in configuration. Using default value " << fTrendMarginRight << "." << std::endl;
853  }
854  }
855 
856  // Read the top margin for trend plots
857  try {
859  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginTop.c_str()))
860  .get_value<double>();
861  } catch (const std::exception& e) {
862  if (fDebugLevel > 0) {
863  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginTop.c_str())
864  << " in configuration. Using default value " << fTrendMarginTop << "." << std::endl;
865  }
866  }
867 
868  // Read the bottom margin for trend plots
869  try {
871  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginBottom.c_str()))
872  .get_value<double>();
873  } catch (const std::exception& e) {
874  if (fDebugLevel > 0) {
875  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameMarginBottom.c_str())
876  << " in configuration. Using default value " << fTrendMarginBottom << "." << std::endl;
877  }
878  }
879 
880  // Read the offset of the x-axis title in trend plots
881  try {
883  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleOffsetX.c_str()))
884  .get_value<double>();
885  } catch (const std::exception& e) {
886  if (fDebugLevel > 0) {
887  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleOffsetX.c_str())
888  << " in configuration. Using default value " << fTrendTitleOffsetX << "." << std::endl;
889  }
890  }
891 
892  // Read the offset of the y-axis title in trend plots
893  try {
895  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleOffsetY.c_str()))
896  .get_value<double>();
897  } catch (const std::exception& e) {
898  if (fDebugLevel > 0) {
899  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleOffsetY.c_str())
900  << " in configuration. Using default value " << fTrendTitleOffsetY << "." << std::endl;
901  }
902  }
903 
904  // Read the size of the x-axis title in trend plots
905  try {
907  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleSizeX.c_str()))
908  .get_value<double>();
909  } catch (const std::exception& e) {
910  if (fDebugLevel > 0) {
911  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleSizeX.c_str())
912  << " in configuration. Using default value " << fTrendTitleSizeX << "." << std::endl;
913  }
914  }
915 
916  // Read the size of the y-axis title in trend plots
917  try {
919  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleSizeY.c_str()))
920  .get_value<double>();
921  } catch (const std::exception& e) {
922  if (fDebugLevel > 0) {
923  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameTitleSizeY.c_str())
924  << " in configuration. Using default value " << fTrendTitleSizeY << "." << std::endl;
925  }
926  }
927 
928  // Read the offset of the x-axis label in trend plots
929  try {
931  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelOffsetX.c_str()))
932  .get_value<double>();
933  } catch (const std::exception& e) {
934  if (fDebugLevel > 0) {
935  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelOffsetX.c_str())
936  << " in configuration. Using default value " << fTrendLabelOffsetX << "." << std::endl;
937  }
938  }
939 
940  // Read the offset of the y-axis label in trend plots
941  try {
943  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelOffsetY.c_str()))
944  .get_value<double>();
945  } catch (const std::exception& e) {
946  if (fDebugLevel > 0) {
947  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelOffsetY.c_str())
948  << " in configuration. Using default value " << fTrendLabelOffsetY << "." << std::endl;
949  }
950  }
951 
952  // Read the size of the x-axis label in trend plots
953  try {
955  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelSizeX.c_str()))
956  .get_value<double>();
957  } catch (const std::exception& e) {
958  if (fDebugLevel > 0) {
959  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelSizeX.c_str())
960  << " in configuration. Using default value " << fTrendLabelSizeX << "." << std::endl;
961  }
962  }
963 
964  // Read the size of the y-axis label in trend plots
965  try {
967  configuration.get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelSizeY.c_str()))
968  .get_value<double>();
969  } catch (const std::exception& e) {
970  if (fDebugLevel > 0) {
971  std::cout << "No value " << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonNameLabelSizeY.c_str())
972  << " in configuration. Using default value " << fTrendLabelSizeY << "." << std::endl;
973  }
974  }
975 
976  // Read the configuration for plotting trends plots as a function of luminosity
977  try {
980  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonUseLuminosityForTrends.c_str()))
981  .get_value<bool>();
982  } catch (const std::exception& e) {
983  if (fDebugLevel > 0) {
984  std::cout << "No value "
985  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonUseLuminosityForTrends.c_str())
986  << " in configuration. Using default value " << fUseLuminosityForTrends << "." << std::endl;
987  }
988  }
989 
990  // Read the configuration for skipping runs with no data in trend plots
991  try {
994  .get_child(Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonSkipRunsWithNoData.c_str()))
995  .get_value<bool>();
996  } catch (const std::exception& e) {
997  if (fDebugLevel > 0) {
998  std::cout << "No value "
999  << Form("jethtplot.%s.%s", fJsonCategoryNameTrend.c_str(), fJsonSkipRunsWithNoData.c_str())
1000  << " in configuration. Using default value " << fSkipRunsWithNoData << "." << std::endl;
1001  }
1002  }
1003 
1004  // Read the axis zoom values for trend plots
1005  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
1006  try {
1007  fTrendZoomLow[iTrend] =
1009  .get_child(
1010  Form("jethtplot.%s.min%s", fJsonCategoryNameTrendZoom.c_str(), fJsonNameTrendZoom[iTrend].c_str()))
1011  .get_value<double>();
1012  } catch (const std::exception& e) {
1013  if (fDebugLevel > 0) {
1014  std::cout << "No value "
1015  << Form("jethtplot.%s.min%s", fJsonCategoryNameTrendZoom.c_str(), fJsonNameTrendZoom[iTrend].c_str())
1016  << " in configuration. Using default value " << fTrendZoomLow[iTrend] << "." << std::endl;
1017  }
1018  }
1019 
1020  try {
1021  fTrendZoomHigh[iTrend] =
1023  .get_child(
1024  Form("jethtplot.%s.max%s", fJsonCategoryNameTrendZoom.c_str(), fJsonNameTrendZoom[iTrend].c_str()))
1025  .get_value<double>();
1026  } catch (const std::exception& e) {
1027  if (fDebugLevel > 0) {
1028  std::cout << "No value "
1029  << Form("jethtplot.%s.max%s", fJsonCategoryNameTrendZoom.c_str(), fJsonNameTrendZoom[iTrend].c_str())
1030  << " in configuration. Using default value " << fTrendZoomHigh[iTrend] << "." << std::endl;
1031  }
1032  }
1033  }
1034 
1035  // Read the configuration for normalizing QA plots by their integral
1036  try {
1037  fNormalizeQAplots = configuration.get_child(Form("jethtplot.%s", fJsonNormalizeQAplots.c_str())).get_value<bool>();
1038  } catch (const std::exception& e) {
1039  if (fDebugLevel > 0) {
1040  std::cout << "No value " << Form("jethtplot.%s", fJsonNormalizeQAplots.c_str())
1041  << " in configuration. Using default value " << fNormalizeQAplots << "." << std::endl;
1042  }
1043  }
1044 
1045  // Read comment given to saved figures
1046  try {
1047  fSaveComment = configuration.get_child(Form("jethtplot.%s", fJsonSaveComment.c_str())).get_value<std::string>();
1048  } catch (const std::exception& e) {
1049  if (fDebugLevel > 0) {
1050  std::cout << "No value " << Form("jethtplot.%s", fJsonSaveComment.c_str())
1051  << " in configuration. Using default value (empty string)." << std::endl;
1052  }
1053  }
1054 
1055  // Read the file name for luminosity per IOV
1056  try {
1057  fLumiPerIovFile =
1058  configuration.get_child(Form("jethtplot.%s", fJsonLumiPerIovFile.c_str())).get_value<std::string>();
1059 
1060  // From the file name, expand environment variables
1062 
1063  // Expand CMSSW_BASE even without preceding $-sign
1064  boost::replace_all(fLumiPerIovFile, "CMSSW_BASE", getenv("CMSSW_BASE"));
1065 
1066  // If file doesn't exist search elsewhere
1067 
1068  } catch (const std::exception& e) {
1069  if (fDebugLevel > 0) {
1070  std::cout << "No value " << Form("jethtplot.%s", fJsonLumiPerIovFile.c_str())
1071  << " in configuration. Using default value " << fLumiPerIovFile << "." << std::endl;
1072  }
1073  }
1074 
1075  // Read the IOV list mode. Either "run" or "IOV"
1076  try {
1077  fIovListMode = configuration.get_child(Form("jethtplot.%s", fJsonIovListMode.c_str())).get_value<std::string>();
1078  } catch (const std::exception& e) {
1079  if (fDebugLevel > 0) {
1080  std::cout << "No value " << Form("jethtplot.%s", fJsonIovListMode.c_str())
1081  << " in configuration. Using default value " << fIovListMode << "." << std::endl;
1082  }
1083  }
1084 
1085  // Read the bin borders for the wide pT bims.
1086  try {
1087  for (auto& item : configuration.get_child(Form("jethtplot.%s", fJsonWidePtBinBorders.c_str()))) {
1088  fWidePtBinBorders.push_back(item.second.get_value<double>());
1089  }
1090  } catch (const std::exception& e) {
1091  if (fDebugLevel > 0) {
1092  std::cout << "No value " << Form("jethtplot.%s", fJsonWidePtBinBorders.c_str())
1093  << " in configuration. Using default values 3, 5, 10, 20, 50 and 100." << std::endl;
1094  }
1095  fWidePtBinBorders.push_back(3.0);
1096  fWidePtBinBorders.push_back(5.0);
1097  fWidePtBinBorders.push_back(10.0);
1098  fWidePtBinBorders.push_back(20.0);
1099  fWidePtBinBorders.push_back(50.0);
1100  fWidePtBinBorders.push_back(100.0);
1101  }
1102 
1103  // Read the flag for creating an IOV list for the slides
1104  try {
1106  configuration.get_child(Form("jethtplot.%s", fJsonMakeIovListForSlides.c_str())).get_value<bool>();
1107  } catch (const std::exception& e) {
1108  if (fDebugLevel > 0) {
1109  std::cout << "No value " << Form("jethtplot.%s", fJsonMakeIovListForSlides.c_str())
1110  << " in configuration. Using default value " << fMakeIovListForSlides << "." << std::endl;
1111  }
1112  }
1113 
1114  // Read the output file name for the IOV list for the slides
1115  try {
1117  configuration.get_child(Form("jethtplot.%s", fJsonIovListForSlides.c_str())).get_value<std::string>();
1118 
1119  // From the file name, expand environment variables
1121 
1122  // Expand CMSSW_BASE event without preceding $-sign
1123  boost::replace_all(fIovListForSlides, "CMSSW_BASE", getenv("CMSSW_BASE"));
1124 
1125  } catch (const std::exception& e) {
1126  if (fDebugLevel > 0) {
1127  std::cout << "No value " << Form("jethtplot.%s", fJsonIovListForSlides.c_str())
1128  << " in configuration. Using default value " << fIovListForSlides << "." << std::endl;
1129  }
1130  }
1131 }
1132 
1133 /*
1134  * Print the current configuration to console
1135  */
1137  // Print all input files
1138  std::cout << "Input files: " << std::endl;
1139  for (const std::string& fileName : fInputFileNames) {
1140  std::cout << fileName << std::endl;
1141  }
1142 
1143  // Print legend text related to input files
1144  std::cout << "Legend text related to input files: " << std::endl;
1145  for (const std::string& legendText : fLegendComments) {
1146  std::cout << legendText << std::endl;
1147  }
1148 
1149  // Print all marker colors
1150  std::cout << "Marker colors: " << std::endl;
1151  for (int color : fMarkerColor) {
1152  std::cout << color << std::endl;
1153  }
1154 
1155  // Print all marker styles
1156  std::cout << "Marker styles: " << std::endl;
1157  for (int style : fMarkerStyle) {
1158  std::cout << style << std::endl;
1159  }
1160 
1161  // Print all marker sizes
1162  std::cout << "Marker sizes: " << std::endl;
1163  for (int size : fMarkerSize) {
1164  std::cout << size << std::endl;
1165  }
1166 
1167  // Print all error color copying information
1168  std::cout << "Copy error colors: " << std::endl;
1169  for (bool color : fCopyErrorColor) {
1170  std::cout << color << std::endl;
1171  }
1172 
1173  // Print the configuration for QA plot drawing
1174  std::cout << fJsonTrackQAname << " : " << fDrawTrackQA << std::endl;
1175 
1176  // Print the configuration for histogram drawing
1177  for (int iHistogram = 0; iHistogram < knHistogramTypes; iHistogram++) {
1178  std::cout << fJsonCategoryNameHistogram << " " << fJsonNameHistogram[iHistogram] << " : "
1179  << fDrawHistogram[iHistogram] << std::endl;
1180  }
1181 
1182  // Print the configuration for profile plot drawing
1183  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
1184  std::cout << fJsonCategoryNameProfile << " " << fJsonNameProfile[iProfile] << " : " << fDrawProfile[iProfile]
1185  << std::endl;
1186  }
1187 
1188  // Print the configuration for reference profile drawing
1190  << std::endl;
1192  << fDrawCentralEtaSummaryProfile << std::endl;
1193 
1194  // Print the configuration for positioning the legends in profile plots
1196  << std::endl;
1198  << std::endl;
1199  for (int iColumn = 0; iColumn < kMaxLegendColumns; iColumn++) {
1200  std::cout << fJsonCategoryNameProfile << " " << fJsonNameLegendShiftColumnX << iColumn << " : "
1201  << fProfileLegendShiftColumnX[iColumn] << std::endl;
1202  std::cout << fJsonCategoryNameProfile << " " << fJsonNameLegendShiftColumnY << iColumn << " : "
1203  << fProfileLegendShiftColumnY[iColumn] << std::endl;
1204  }
1206  << std::endl;
1208  << std::endl;
1209 
1210  // Print the configuration for profile plot zoom
1211  for (int iProfile = 0; iProfile < knProfileTypes; iProfile++) {
1212  std::cout << fJsonCategoryNameProfileZoom << " min" << fJsonNameProfileZoom[iProfile] << " : "
1213  << fProfileZoomLow[iProfile] << std::endl;
1214  std::cout << fJsonCategoryNameProfileZoom << " max" << fJsonNameProfileZoom[iProfile] << " : "
1215  << fProfileZoomHigh[iProfile] << std::endl;
1216  }
1217 
1218  // Print the configuration for trend plot drawing
1219  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
1220  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTrend[iTrend] << " : " << fDrawTrend[iTrend] << std::endl;
1221  }
1222 
1223  // Print the canvas information for trend plots
1224  std::cout << fJsonCategoryNameTrend << " " << fJsonNameCanvasHeight << " : " << fTrendCanvasHeight << std::endl;
1225  std::cout << fJsonCategoryNameTrend << " " << fJsonNameCanvasWidth << " : " << fTrendCanvasWidth << std::endl;
1226  std::cout << fJsonCategoryNameTrend << " " << fJsonNameMarginLeft << " : " << fTrendMarginLeft << std::endl;
1227  std::cout << fJsonCategoryNameTrend << " " << fJsonNameMarginRight << " : " << fTrendMarginRight << std::endl;
1228  std::cout << fJsonCategoryNameTrend << " " << fJsonNameMarginTop << " : " << fTrendMarginTop << std::endl;
1229  std::cout << fJsonCategoryNameTrend << " " << fJsonNameMarginBottom << " : " << fTrendMarginBottom << std::endl;
1230  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTitleOffsetX << " : " << fTrendTitleOffsetX << std::endl;
1231  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTitleOffsetY << " : " << fTrendTitleOffsetY << std::endl;
1232  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTitleSizeX << " : " << fTrendTitleSizeX << std::endl;
1233  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTitleSizeY << " : " << fTrendTitleSizeY << std::endl;
1234  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLabelOffsetX << " : " << fTrendLabelOffsetX << std::endl;
1235  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLabelOffsetY << " : " << fTrendLabelOffsetY << std::endl;
1236  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLabelSizeX << " : " << fTrendLabelSizeX << std::endl;
1237  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLabelSizeY << " : " << fTrendLabelSizeY << std::endl;
1238 
1239  // Print the configuration for positioning the legends in trend plots
1241  << std::endl;
1243  << std::endl;
1244  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLegendTextSize << " : " << fTrendLegendTextSize << std::endl;
1245  std::cout << fJsonCategoryNameTrend << " " << fJsonNameLegendTextFont << " : " << fTrendLegendTextFont << std::endl;
1246 
1247  // Print the remaining configuration for trend plots
1248  std::cout << fJsonCategoryNameTrend << " " << fJsonDrawYearLines << " : " << fDrawYearLines << std::endl;
1249  std::cout << "Runs for vertical lines: " << std::endl;
1250  for (int myRun : fRunsForLines) {
1251  std::cout << myRun << " ";
1252  }
1253  std::cout << std::endl;
1254  std::cout << fJsonCategoryNameTrend << " " << fJsonYearLineColor << " : " << fYearLineColor << std::endl;
1255  std::cout << fJsonCategoryNameTrend << " " << fJsonYearLineWidth << " : " << fYearLineWidth << std::endl;
1256  std::cout << fJsonCategoryNameTrend << " " << fJsonYearLineStyle << " : " << fYearLineStyle << std::endl;
1258  << std::endl;
1259  std::cout << fJsonCategoryNameTrend << " " << fJsonSkipRunsWithNoData << " : " << fSkipRunsWithNoData << std::endl;
1260 
1261  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTagInfo << " : " << fDrawTrendTag << std::endl;
1262  for (std::vector<std::string>::size_type iTag = 0; iTag < fTrendTagText.size(); iTag++) {
1263  std::cout << "Tag" << iTag << ": " << fTrendTagText.at(iTag) << " x=" << fTrendTagPositionX.at(iTag)
1264  << " y=" << fTrendTagPositionY.at(iTag) << std::endl;
1265  }
1266  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTagTextSize << " : " << fTrendTagTextSize << std::endl;
1267  std::cout << fJsonCategoryNameTrend << " " << fJsonNameTagTextFont << " : " << fTrendTagTextFont << std::endl;
1268 
1269  // Print the configuration for trend plot zoom
1270  for (int iTrend = 0; iTrend < knTrendTypes; iTrend++) {
1271  std::cout << fJsonCategoryNameTrendZoom << " min" << fJsonNameTrendZoom[iTrend] << " : " << fTrendZoomLow[iTrend]
1272  << std::endl;
1273  std::cout << fJsonCategoryNameTrendZoom << " max" << fJsonNameTrendZoom[iTrend] << " : " << fTrendZoomHigh[iTrend]
1274  << std::endl;
1275  }
1276 
1277  // Print plotting configuration values
1278  std::cout << fJsonLumiPerIovFile << " : " << fLumiPerIovFile << std::endl;
1279  std::cout << fJsonIovListMode << " : " << fIovListMode << std::endl;
1281 
1282  std::cout << "Wide pT bin borders: " << std::endl;
1283  for (double myPt : fWidePtBinBorders) {
1284  std::cout << myPt << " ";
1285  }
1286  std::cout << std::endl;
1287 
1288  std::cout << fJsonDrawPlotsForEachIOV << " : " << fDrawPlotsForEachIOV << std::endl;
1289  std::cout << fJsonNIovInOnePlot << " : " << fNIovInOnePlot << std::endl;
1290  std::cout << fJsonNormalizeQAplots << " : " << fNormalizeQAplots << std::endl;
1291 
1292  std::cout << fJsonMakeIovListForSlides << " : " << fMakeIovListForSlides << std::endl;
1293  std::cout << fJsonIovListForSlides << " : " << fIovListForSlides << std::endl;
1294 
1295  // Print the save comment
1296  std::cout << "Saved files are given a comment: " << fSaveComment << std::endl;
1297 }
1298 
1299 // Getter for track QA histogram drawing flag
1301 
1302 // Getter for dxy and dz histogram drawing flags
1303 bool JetHtPlotConfiguration::drawHistogram(const int iHistogram) const { return fDrawHistogram[iHistogram]; }
1304 
1305 // Getter for profile drawing flags
1306 bool JetHtPlotConfiguration::drawProfile(const int iProfile) const { return fDrawProfile[iProfile]; }
1307 
1308 // Getter for drawing reference profile
1310 
1311 // Getter for drawing central eta histograms to the all runs summary plots
1313 
1314 // Getter for total legend shift in x-direction for the profile plots
1316 
1317 // Getter for total legend shift in x-direction for the profile plots
1319 
1320 // Getter for columnwise legend shift in x-direction for iColumnth column in the profile plots
1321 double JetHtPlotConfiguration::profileLegendShiftColumnX(const int iColumn) const {
1322  if (iColumn < 0 || iColumn >= kMaxLegendColumns)
1323  return 0;
1324  return fProfileLegendShiftColumnX[iColumn];
1325 }
1326 
1327 // Getter for columnwise legend shift in x-direction for iColumnth column in the profile plots
1328 double JetHtPlotConfiguration::profileLegendShiftColumnY(const int iColumn) const {
1329  if (iColumn < 0 || iColumn >= kMaxLegendColumns)
1330  return 0;
1331  return fProfileLegendShiftColumnY[iColumn];
1332 }
1333 
1334 // Getter for text size in profile plots
1336 
1337 // Getter for text font in profile plots
1339 
1340 // Getter for text string used to describe all runs
1342 
1343 // Getter for low end of profile axis zooms
1344 double JetHtPlotConfiguration::profileZoomLow(const int iProfile) const { return fProfileZoomLow[iProfile]; }
1345 
1346 // Getter for high end of profile axis zooms
1347 double JetHtPlotConfiguration::profileZoomHigh(const int iProfile) const { return fProfileZoomHigh[iProfile]; }
1348 
1349 // Getter for trend drawing flags
1350 bool JetHtPlotConfiguration::drawTrend(const int iTrend) const { return fDrawTrend[iTrend]; }
1351 
1352 // Getter for total legend shift in x-direction for the trend plots
1354 
1355 // Getter for total legend shift in x-direction for the trend plots
1357 
1358 // Getter for text size in trend plots
1360 
1361 // Getter for text font in trend plots
1363 
1364 // Getter for drawing tags to the trend plots
1366 
1367 // Getter for tag list for the trend plot
1368 std::vector<std::string> JetHtPlotConfiguration::trendTagText() const { return fTrendTagText; }
1369 
1370 // Getter for x-positions of the tags in the trend plots
1371 std::vector<double> JetHtPlotConfiguration::trendTagPositionX() const { return fTrendTagPositionX; }
1372 
1373 // Getter for y-positions of the tags in the trend plots
1374 std::vector<double> JetHtPlotConfiguration::trendTagPositionY() const { return fTrendTagPositionY; }
1375 
1376 // Getter for text size in tags of trend plots
1378 
1379 // Getter for text font in tags of trend plots
1381 
1382 // Getter for trend plot canvas height
1384 
1385 // Getter for trend plot canvas width
1387 
1388 // Getter for the left margin in trend plots
1390 
1391 // Getter for the right margin in trend plots
1393 
1394 // Getter for the top margin in trend plots
1396 
1397 // Getter for the bottom margin in trend plots
1399 
1400 // Getter for the offset of the x-axis title in trend plots
1402 
1403 // Getter for the offset of the y-axis title in trend plots
1405 
1406 // Getter for the size of the x-axis title in trend plots
1408 
1409 // Getter for the size of the y-axis title in trend plots
1411 
1412 // Getter for the offset of the x-axis label in trend plots
1414 
1415 // Getter for the offset of the y-axis label in trend plots
1417 
1418 // Getter for the size of the x-axis label in trend plots
1420 
1421 // Getter for the size of the y-axis label in trend plots
1423 
1424 // Getter for low end of trend axis zooms
1425 double JetHtPlotConfiguration::trendZoomLow(const int iTrend) const { return fTrendZoomLow[iTrend]; }
1426 
1427 // Getter for high end of trend axis zooms
1428 double JetHtPlotConfiguration::trendZoomHigh(const int iTrend) const { return fTrendZoomHigh[iTrend]; }
1429 
1430 // Getter for number of input files
1432 
1433 // Getter for input file of index iFile
1435  const int inputFileCount = fInputFileNames.size();
1436  if (iFile < 0 || iFile >= inputFileCount)
1437  return "";
1438  return fInputFileNames.at(iFile);
1439 }
1440 
1441 // Getter for input file vector
1442 std::vector<std::string> JetHtPlotConfiguration::inputFiles() const { return fInputFileNames; }
1443 
1444 // Getter for a comment added to the legend
1446  const int commentCount = fLegendComments.size();
1447  if (iComment < 0 || iComment >= commentCount)
1448  return "";
1449  return fLegendComments.at(iComment);
1450 }
1451 
1452 // Getter for the marker color related to an alignment
1453 int JetHtPlotConfiguration::markerColor(const int iFile) const {
1454  if (iFile < 0)
1455  return kBlack;
1456  if (iFile > 10)
1457  return kBlack;
1458  const int markerColorCount = fMarkerColor.size();
1459  if (iFile >= markerColorCount)
1460  return fDefaultColors[iFile];
1461  return fMarkerColor.at(iFile);
1462 }
1463 
1464 // Getter for the marker style related to an alignment
1465 int JetHtPlotConfiguration::markerStyle(const int iFile) const {
1466  const int markerStyleCount = fMarkerStyle.size();
1467  if (iFile < 0 || iFile >= markerStyleCount)
1468  return fDefaultStyle;
1469  return fMarkerStyle.at(iFile);
1470 }
1471 
1472 // Getter for the marker size related to an alignment
1473 int JetHtPlotConfiguration::markerSize(const int iFile) const {
1474  const int markerSizeCount = fMarkerSize.size();
1475  if (iFile < 0 || iFile >= markerSizeCount)
1476  return fDefaultMarkerSize;
1477  return fMarkerSize.at(iFile);
1478 }
1479 
1480 // Getter for flags to copy error bar colors related to an alignment
1481 bool JetHtPlotConfiguration::copyErrorColor(const int iFile) const {
1482  const int errorCopyCount = fCopyErrorColor.size();
1483  if (iFile < 0 || iFile >= errorCopyCount)
1484  return false;
1485  return fCopyErrorColor.at(iFile);
1486 }
1487 
1488 // Getter for the luminosity per IOV file
1489 const char* JetHtPlotConfiguration::lumiPerIovFile() const { return fLumiPerIovFile.c_str(); }
1490 
1491 // Getter for the IOV list mode
1492 const char* JetHtPlotConfiguration::iovListMode() const { return fIovListMode.c_str(); }
1493 
1494 // Getter for the flag for drawing vertical lines to trend plots
1496 
1497 // Getter for color of the vertical lines drawn to trend plots
1499 
1500 // Getter for color of the vertical lines drawn to trend plots
1502 
1503 // Getter for color of the vertical lines drawn to trend plots
1505 
1506 // Getter for the run positions to where vertical lines are drawn
1507 std::vector<int> JetHtPlotConfiguration::runsForLines() const { return fRunsForLines; }
1508 
1509 // Getter for bin borders used in the wide pT binned histogram
1510 std::vector<double> JetHtPlotConfiguration::widePtBinBorders() const { return fWidePtBinBorders; }
1511 
1512 // Getter for drawing plots for each IOV
1514 
1515 // Getter for number of IOVs plotted in each figure
1517 
1518 // Getter for drawing trends as a function of luminosity
1520 
1521 // Getter for skipping runs with no data in trend plots
1523 
1524 // Getter for normalizing QA plots
1526 
1527 // Getter for comment given to saved figures
1528 const char* JetHtPlotConfiguration::saveComment() const { return fSaveComment.c_str(); }
1529 
1530 // Getter for flag to produce IOV list for slides
1532 
1533 // Getter for the name given to the IOV list for slides
1534 const char* JetHtPlotConfiguration::iovListForSlides() const { return fIovListForSlides.c_str(); }
1535 
1536 // Expand environmental variables updating the input string
1538  static std::regex env("\\$\\{?([^}\\/]+)\\}?\\/");
1539  std::smatch match;
1540  while (std::regex_search(text, match, env)) {
1541  const char* s = getenv(match[1].str().c_str());
1542  const std::string var(s == nullptr ? "" : Form("%s/", s));
1543  text.replace(match[0].first, match[0].second, var);
1544  }
1545 }
1546 
1547 // Expand environmental variables to a new string
1551  return text;
1552 }
size
Write out results.
double fProfileLegendShiftColumnY[kMaxLegendColumns]
std::vector< std::string > trendTagText() const
std::string fJsonNameHistogram[knHistogramTypes]
bool drawProfile(const int iProfile) const
double profileLegendShiftColumnY(const int iColumn) const
void autoExpandEnvironmentVariables(std::string &text) const
std::vector< double > trendTagPositionX() const
std::string fJsonNameTrend[knHistogramTypes]
std::vector< bool > fCopyErrorColor
std::string fJsonNameTrendZoom[knHistogramTypes]
std::vector< std::string > inputFiles() const
std::string fJsonNameProfileZoom[knProfileTypes]
std::vector< int > fMarkerColor
std::string expandEnvironmentVariables(const std::string &input) const
std::vector< int > runsForLines() const
std::vector< int > fRunsForLines
double trendZoomLow(const int iTrend) const
static const int kMaxLegendColumns
double fProfileZoomLow[knProfileTypes]
bool copyErrorColor(const int iFile) const
int markerStyle(const int iFile) const
uint16_t size_type
const char * iovListForSlides() const
std::vector< double > fWidePtBinBorders
static std::string const input
Definition: EdmProvDump.cc:50
double trendZoomHigh(const int iTrend) const
double fProfileLegendShiftColumnX[kMaxLegendColumns]
U second(std::pair< T, U > const &p)
std::vector< int > fMarkerSize
double fTrendZoomLow[knTrendTypes]
double fProfileZoomHigh[knProfileTypes]
Definition: style.py:1
std::vector< double > fTrendTagPositionX
bool drawTrend(const int iTrend) const
dictionary configuration
Definition: JetHT_cfg.py:38
std::string legendComment(const int iComment) const
std::string fJsonNameProfile[knProfileTypes]
bool fDrawProfile[knProfileTypes]
std::vector< std::string > fTrendTagText
std::vector< int > fMarkerStyle
bool drawHistogram(const int iHistogram) const
int markerColor(const int iFile) const
const char * lumiPerIovFile() const
int markerSize(const int iFile) const
bool fDrawHistogram[knHistogramTypes]
double fTrendZoomHigh[knTrendTypes]
std::string fJsonNameCentralEtaSummaryProfile
std::vector< std::string > fLegendComments
double profileLegendShiftColumnX(const int iColumn) const
std::string legendTextForAllRuns() const
const char * iovListMode() const
std::vector< double > fTrendTagPositionY
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
double profileZoomHigh(const int iProfile) const
#define str(s)
const char * saveComment() const
JetHtPlotConfiguration & operator=(const JetHtPlotConfiguration &obj)
std::vector< double > widePtBinBorders() const
std::vector< std::string > fInputFileNames
void readJsonFile(const std::string fileName)
std::vector< double > trendTagPositionY() const
double profileZoomLow(const int iProfile) const
std::string inputFile(const int iFile) const