CMS 3D CMS Logo

Classes | Functions | Variables
plotting Namespace Reference

Classes

class  AggregateBins
 
class  AggregateHistos
 
class  CutEfficiency
 
class  DQMSubFolder
 
class  FakeDuplicate
 
class  Frame
 
class  FrameRatio
 
class  FrameTGraph2D
 
class  GetDirectoryCode
 
class  Plot
 
class  PlotEmpty
 
class  PlotFolder
 
class  PlotGroup
 
class  PlotOnSideGroup
 
class  Plotter
 
class  PlotterFolder
 
class  PlotterInstance
 
class  PlotterItem
 
class  PlotterTableItem
 
class  PlotText
 
class  PlotTextBox
 
class  ROC
 
class  Subtract
 
class  Transform
 

Functions

def _calculateRatios (histos, ratioUncertainty=False)
 
def _copyStyle (src, dst)
 
def _createCanvas (name, width, height)
 
def _drawFrame (pad, bounds, zmax=None, xbinlabels=None, xbinlabelsize=None, xbinlabeloption=None, ybinlabels=None, suffix="")
 
def _findBounds (th1s, ylog, xmin=None, xmax=None, ymin=None, ymax=None)
 
def _findBoundsY (th1s, ylog, ymin=None, ymax=None, coverage=None, coverageRange=None)
 
def _getDirectory (args, kwargs)
 
def _getDirectoryDetailed (tfile, possibleDirs, subDir=None)
 
def _getObject (tdirectory, name)
 
def _getOrCreateObject (tdirectory, nameOrCreator)
 
def _getXmax (obj, limitToNonZeroContent=False)
 
def _getXmin (obj, limitToNonZeroContent=False)
 
def _getYmax (obj, limitToNonZeroContent=False)
 
def _getYmaxWithError (th1)
 
def _getYmin (obj, limitToNonZeroContent=False)
 
def _getYminIgnoreOutlier (th1)
 
def _getYminMaxAroundMedian (obj, coverage, coverageRange=None)
 
def _mergeBinLabels (labelsAll)
 
def _mergeBinLabelsX (histos)
 
def _mergeBinLabelsY (histos)
 
def _modifyPadForRatio (pad, ratioFactor)
 
def _setStyle ()
 
def _th1IncludeOnlyBins (histos, xbinlabels)
 
def _th1RemoveEmptyBins (histos, xbinlabels)
 
def _th1ToOrderedDict (th1, renameBin=None)
 
def _th2RemoveEmptyBins (histos, xbinlabels, ybinlabels)
 

Variables

 _gr
 
 _plotStylesColor
 
 _plotStylesMarker
 
 _ratio
 
 _ratioYTitle
 
 _th1
 
 _uncertainty
 
 _xerrshigh
 
 _xerrslow
 
 _xvalues
 
 _yerrshigh
 
 _yerrslow
 
 _yvalues
 
 IgnoreCommandLineOptions
 
 verbose
 

Function Documentation

def plotting._calculateRatios (   histos,
  ratioUncertainty = False 
)
private
Calculate the ratios for a list of histograms

Definition at line 149 of file plotting.py.

References funct.abs(), cond::serialization.equal(), and SiStripPI.max.

Referenced by ntuplePlotting.drawSingle().

149 def _calculateRatios(histos, ratioUncertainty=False):
150  """Calculate the ratios for a list of histograms"""
151 
152  def _divideOrZero(numerator, denominator):
153  if denominator == 0:
154  return 0
155  return numerator/denominator
156 
157  def equal(a, b):
158  if a == 0. and b == 0.:
159  return True
160  return abs(a-b)/max(abs(a),abs(b)) < 1e-3
161 
162  def findBins(wrap, bins_xvalues):
163  ret = []
164  currBin = wrap.begin()
165  i = 0
166  while i < len(bins_xvalues) and currBin < wrap.end():
167  (xcenter, xlow, xhigh) = bins_xvalues[i]
168  xlowEdge = xcenter-xlow
169  xupEdge = xcenter+xhigh
170 
171  (curr_center, curr_low, curr_high) = wrap.xvalues(currBin)
172  curr_lowEdge = curr_center-curr_low
173  curr_upEdge = curr_center+curr_high
174 
175  if equal(xlowEdge, curr_lowEdge) and equal(xupEdge, curr_upEdge):
176  ret.append(currBin)
177  currBin += 1
178  i += 1
179  elif curr_upEdge <= xlowEdge:
180  currBin += 1
181  elif curr_lowEdge >= xupEdge:
182  ret.append(None)
183  i += 1
184  else:
185  ret.append(None)
186  currBin += 1
187  i += 1
188  if len(ret) != len(bins_xvalues):
189  ret.extend([None]*( len(bins_xvalues) - len(ret) ))
190  return ret
191 
192  # Define wrappers for TH1/TGraph/TGraph2D to have uniform interface
193  # TODO: having more global wrappers would make some things simpler also elsewhere in the code
194  class WrapTH1:
195  def __init__(self, th1, uncertainty):
196  self._th1 = th1
197  self._uncertainty = uncertainty
198 
199  xaxis = th1.GetXaxis()
200  xaxis_arr = xaxis.GetXbins()
201  if xaxis_arr.GetSize() > 0: # unequal binning
202  lst = [xaxis_arr[i] for i in range(0, xaxis_arr.GetSize())]
203  arr = array.array("d", lst)
204  self._ratio = ROOT.TH1F("foo", "foo", xaxis.GetNbins(), arr)
205  else:
206  self._ratio = ROOT.TH1F("foo", "foo", xaxis.GetNbins(), xaxis.GetXmin(), xaxis.GetXmax())
207  _copyStyle(th1, self._ratio)
208  self._ratio.SetStats(0)
209  self._ratio.SetLineColor(ROOT.kBlack)
210  self._ratio.SetLineWidth(1)
211  def draw(self, style=None):
212  st = style
213  if st is None:
214  if self._uncertainty:
215  st = "EP"
216  else:
217  st = "HIST P"
218  self._ratio.Draw("same "+st)
219  def begin(self):
220  return 1
221  def end(self):
222  return self._th1.GetNbinsX()+1
223  def xvalues(self, bin):
224  xval = self._th1.GetBinCenter(bin)
225  xlow = xval-self._th1.GetXaxis().GetBinLowEdge(bin)
226  xhigh = self._th1.GetXaxis().GetBinUpEdge(bin)-xval
227  return (xval, xlow, xhigh)
228  def yvalues(self, bin):
229  yval = self._th1.GetBinContent(bin)
230  yerr = self._th1.GetBinError(bin)
231  return (yval, yerr, yerr)
232  def y(self, bin):
233  return self._th1.GetBinContent(bin)
234  def divide(self, bin, scale):
235  self._ratio.SetBinContent(bin, _divideOrZero(self._th1.GetBinContent(bin), scale))
236  self._ratio.SetBinError(bin, _divideOrZero(self._th1.GetBinError(bin), scale))
237  def makeRatio(self):
238  pass
239  def getRatio(self):
240  return self._ratio
241 
242  class WrapTGraph:
243  def __init__(self, gr, uncertainty):
244  self._gr = gr
245  self._uncertainty = uncertainty
246  self._xvalues = []
247  self._xerrslow = []
248  self._xerrshigh = []
249  self._yvalues = []
250  self._yerrshigh = []
251  self._yerrslow = []
252  def draw(self, style=None):
253  if self._ratio is None:
254  return
255  st = style
256  if st is None:
257  if self._uncertainty:
258  st = "PZ"
259  else:
260  st = "PX"
261  self._ratio.Draw("same "+st)
262  def begin(self):
263  return 0
264  def end(self):
265  return self._gr.GetN()
266  def xvalues(self, bin):
267  return (self._gr.GetX()[bin], self._gr.GetErrorXlow(bin), self._gr.GetErrorXhigh(bin))
268  def yvalues(self, bin):
269  return (self._gr.GetY()[bin], self._gr.GetErrorYlow(bin), self._gr.GetErrorYhigh(bin))
270  def y(self, bin):
271  return self._gr.GetY()[bin]
272  def divide(self, bin, scale):
273  # Ignore bin if denominator is zero
274  if scale == 0:
275  return
276  # No more items in the numerator
277  if bin >= self._gr.GetN():
278  return
279  # denominator is missing an item
280  xvals = self.xvalues(bin)
281  xval = xvals[0]
282 
283  self._xvalues.append(xval)
284  self._xerrslow.append(xvals[1])
285  self._xerrshigh.append(xvals[2])
286  yvals = self.yvalues(bin)
287  self._yvalues.append(yvals[0] / scale)
288  if self._uncertainty:
289  self._yerrslow.append(yvals[1] / scale)
290  self._yerrshigh.append(yvals[2] / scale)
291  else:
292  self._yerrslow.append(0)
293  self._yerrshigh.append(0)
294  def makeRatio(self):
295  if len(self._xvalues) == 0:
296  self._ratio = None
297  return
298  self._ratio = ROOT.TGraphAsymmErrors(len(self._xvalues), array.array("d", self._xvalues), array.array("d", self._yvalues),
299  array.array("d", self._xerrslow), array.array("d", self._xerrshigh),
300  array.array("d", self._yerrslow), array.array("d", self._yerrshigh))
301  _copyStyle(self._gr, self._ratio)
302  def getRatio(self):
303  return self._ratio
304  class WrapTGraph2D(WrapTGraph):
305  def __init__(self, gr, uncertainty):
306  WrapTGraph.__init__(self, gr, uncertainty)
307  def xvalues(self, bin):
308  return (self._gr.GetX()[bin], self._gr.GetErrorX(bin), self._gr.GetErrorX(bin))
309  def yvalues(self, bin):
310  return (self._gr.GetY()[bin], self._gr.GetErrorY(bin), self._gr.GetErrorY(bin))
311 
312  def wrap(o):
313  if isinstance(o, ROOT.TH1):
314  return WrapTH1(o, ratioUncertainty)
315  elif isinstance(o, ROOT.TGraph):
316  return WrapTGraph(o, ratioUncertainty)
317  elif isinstance(o, ROOT.TGraph2D):
318  return WrapTGraph2D(o, ratioUncertainty)
319 
320  wrappers = [wrap(h) for h in histos]
321  ref = wrappers[0]
322 
323  wrappers_bins = []
324  ref_bins = [ref.xvalues(b) for b in range(ref.begin(), ref.end())]
325  for w in wrappers:
326  wrappers_bins.append(findBins(w, ref_bins))
327 
328  for i, bin in enumerate(range(ref.begin(), ref.end())):
329  (scale, ylow, yhigh) = ref.yvalues(bin)
330  for w, bins in zip(wrappers, wrappers_bins):
331  if bins[i] is None:
332  continue
333  w.divide(bins[i], scale)
334 
335  for w in wrappers:
336  w.makeRatio()
337 
338  return wrappers
339 
340 
def _copyStyle(src, dst)
Definition: plotting.py:1662
bool equal(const T &first, const T &second)
Definition: Equal.h:34
def _calculateRatios(histos, ratioUncertainty=False)
Definition: plotting.py:149
def draw(name, histos, styles=_defaultStyles, legendLabels=[], kwargs)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define end
Definition: vmac.h:39
void divide(MonitorElement *eff, const MonitorElement *numerator, const MonitorElement *denominator)
Function to fill an efficiency histograms with binomial errors.
Definition: Histograms.h:22
#define begin
Definition: vmac.h:32
auto wrap(F iFunc) -> decltype(iFunc())
def plotting._copyStyle (   src,
  dst 
)
private

Definition at line 1662 of file plotting.py.

1662 def _copyStyle(src, dst):
1663  properties = []
1664  if hasattr(src, "GetLineColor") and hasattr(dst, "SetLineColor"):
1665  properties.extend(["LineColor", "LineStyle", "LineWidth"])
1666  if hasattr(src, "GetFillColor") and hasattr(dst, "SetFillColor"):
1667  properties.extend(["FillColor", "FillStyle"])
1668  if hasattr(src, "GetMarkerColor") and hasattr(dst, "SetMarkerColor"):
1669  properties.extend(["MarkerColor", "MarkerSize", "MarkerStyle"])
1670 
1671  for prop in properties:
1672  getattr(dst, "Set"+prop)(getattr(src, "Get"+prop)())
1673 
def _copyStyle(src, dst)
Definition: plotting.py:1662
def plotting._createCanvas (   name,
  width,
  height 
)
private

Definition at line 110 of file plotting.py.

Referenced by plotting.PlotGroup._drawSeparate(), ntuplePlotting.draw(), plotting.PlotGroup.draw(), and ntuplePlotting.drawMany().

110 def _createCanvas(name, width, height):
111  # silence warning of deleting canvas with the same name
112  if not verbose:
113  backup = ROOT.gErrorIgnoreLevel
114  ROOT.gErrorIgnoreLevel = ROOT.kError
115  canvas = ROOT.TCanvas(name, name, width, height)
116  if not verbose:
117  ROOT.gErrorIgnoreLevel = backup
118  return canvas
119 
def _createCanvas(name, width, height)
Definition: plotting.py:110
def plotting._drawFrame (   pad,
  bounds,
  zmax = None,
  xbinlabels = None,
  xbinlabelsize = None,
  xbinlabeloption = None,
  ybinlabels = None,
  suffix = "" 
)
private
Function to draw a frame

Arguments:
pad    -- TPad to where the frame is drawn
bounds -- List or 4-tuple for (xmin, ymin, xmax, ymax)

Keyword arguments:
zmax            -- Maximum Z, needed for TH2 histograms
xbinlabels      -- Optional list of strings for x axis bin labels
xbinlabelsize   -- Optional number for the x axis bin label size
xbinlabeloption -- Optional string for the x axis bin options (passed to ROOT.TH1.LabelsOption())
suffix          -- Optional string for a postfix of the frame name

Definition at line 1186 of file plotting.py.

1186 def _drawFrame(pad, bounds, zmax=None, xbinlabels=None, xbinlabelsize=None, xbinlabeloption=None, ybinlabels=None, suffix=""):
1187  """Function to draw a frame
1188 
1189  Arguments:
1190  pad -- TPad to where the frame is drawn
1191  bounds -- List or 4-tuple for (xmin, ymin, xmax, ymax)
1192 
1193  Keyword arguments:
1194  zmax -- Maximum Z, needed for TH2 histograms
1195  xbinlabels -- Optional list of strings for x axis bin labels
1196  xbinlabelsize -- Optional number for the x axis bin label size
1197  xbinlabeloption -- Optional string for the x axis bin options (passed to ROOT.TH1.LabelsOption())
1198  suffix -- Optional string for a postfix of the frame name
1199  """
1200  if xbinlabels is None and ybinlabels is None:
1201  frame = pad.DrawFrame(*bounds)
1202  else:
1203  # Special form needed if want to set x axis bin labels
1204  nbins = len(xbinlabels)
1205  if ybinlabels is None:
1206  frame = ROOT.TH1F("hframe"+suffix, "", nbins, bounds[0], bounds[2])
1207  frame.SetMinimum(bounds[1])
1208  frame.SetMaximum(bounds[3])
1209  frame.GetYaxis().SetLimits(bounds[1], bounds[3])
1210  else:
1211  ybins = len(ybinlabels)
1212  frame = ROOT.TH2F("hframe"+suffix, "", nbins,bounds[0],bounds[2], ybins,bounds[1],bounds[3])
1213  frame.SetMaximum(zmax)
1214 
1215  frame.SetBit(ROOT.TH1.kNoStats)
1216  frame.SetBit(ROOT.kCanDelete)
1217  frame.Draw("")
1218 
1219  xaxis = frame.GetXaxis()
1220  for i in range(nbins):
1221  xaxis.SetBinLabel(i+1, xbinlabels[i])
1222  if xbinlabelsize is not None:
1223  xaxis.SetLabelSize(xbinlabelsize)
1224  if xbinlabeloption is not None:
1225  frame.LabelsOption(xbinlabeloption)
1226 
1227  if ybinlabels is not None:
1228  yaxis = frame.GetYaxis()
1229  for i, lab in enumerate(ybinlabels):
1230  yaxis.SetBinLabel(i+1, lab)
1231  if xbinlabelsize is not None:
1232  yaxis.SetLabelSize(xbinlabelsize)
1233  if xbinlabeloption is not None:
1234  frame.LabelsOption(xbinlabeloption, "Y")
1235 
1236  return frame
1237 
def _drawFrame(pad, bounds, zmax=None, xbinlabels=None, xbinlabelsize=None, xbinlabeloption=None, ybinlabels=None, suffix="")
Definition: plotting.py:1186
def plotting._findBounds (   th1s,
  ylog,
  xmin = None,
  xmax = None,
  ymin = None,
  ymax = None 
)
private
Find x-y axis boundaries encompassing a list of TH1s if the bounds are not given in arguments.

Arguments:
th1s -- List of TH1s
ylog -- Boolean indicating if y axis is in log scale or not (affects the automatic ymax)

Keyword arguments:
xmin -- Minimum x value; if None, take the minimum of TH1s
xmax -- Maximum x value; if None, take the maximum of TH1s
ymin -- Minimum y value; if None, take the minimum of TH1s
ymax -- Maximum y value; if None, take the maximum of TH1s

Definition at line 458 of file plotting.py.

References _findBoundsY(), _getXmax(), _getXmin(), SiStripPI.max, min(), edm.print(), and str.

Referenced by ntuplePlotting.drawSingle().

458 def _findBounds(th1s, ylog, xmin=None, xmax=None, ymin=None, ymax=None):
459  """Find x-y axis boundaries encompassing a list of TH1s if the bounds are not given in arguments.
460 
461  Arguments:
462  th1s -- List of TH1s
463  ylog -- Boolean indicating if y axis is in log scale or not (affects the automatic ymax)
464 
465  Keyword arguments:
466  xmin -- Minimum x value; if None, take the minimum of TH1s
467  xmax -- Maximum x value; if None, take the maximum of TH1s
468  ymin -- Minimum y value; if None, take the minimum of TH1s
469  ymax -- Maximum y value; if None, take the maximum of TH1s
470  """
471 
472  (ymin, ymax) = _findBoundsY(th1s, ylog, ymin, ymax)
473 
474  if xmin is None or xmax is None or isinstance(xmin, list) or isinstance(max, list):
475  xmins = []
476  xmaxs = []
477  for th1 in th1s:
478  xmins.append(_getXmin(th1, limitToNonZeroContent=isinstance(xmin, list)))
479  xmaxs.append(_getXmax(th1, limitToNonZeroContent=isinstance(xmax, list)))
480 
481  # Filter out cases where histograms have zero content
482  xmins = [h for h in xmins if h is not None]
483  xmaxs = [h for h in xmaxs if h is not None]
484 
485  if xmin is None:
486  xmin = min(xmins)
487  elif isinstance(xmin, list):
488  if len(xmins) == 0: # all histograms zero
489  xmin = min(xmin)
490  if verbose:
491  print("Histogram is zero, using the smallest given value for xmin from", str(xmin))
492  else:
493  xm = min(xmins)
494  xmins_below = [x for x in xmin if x<=xm]
495  if len(xmins_below) == 0:
496  xmin = min(xmin)
497  if xm < xmin:
498  if verbose:
499  print("Histogram minimum x %f is below all given xmin values %s, using the smallest one" % (xm, str(xmin)))
500  else:
501  xmin = max(xmins_below)
502 
503  if xmax is None:
504  xmax = max(xmaxs)
505  elif isinstance(xmax, list):
506  if len(xmaxs) == 0: # all histograms zero
507  xmax = max(xmax)
508  if verbose:
509  print("Histogram is zero, using the smallest given value for xmax from", str(xmin))
510  else:
511  xm = max(xmaxs)
512  xmaxs_above = [x for x in xmax if x>xm]
513  if len(xmaxs_above) == 0:
514  xmax = max(xmax)
515  if xm > xmax:
516  if verbose:
517  print("Histogram maximum x %f is above all given xmax values %s, using the maximum one" % (xm, str(xmax)))
518  else:
519  xmax = min(xmaxs_above)
520 
521  for th1 in th1s:
522  th1.GetXaxis().SetRangeUser(xmin, xmax)
523 
524  return (xmin, ymin, xmax, ymax)
525 
def _findBoundsY(th1s, ylog, ymin=None, ymax=None, coverage=None, coverageRange=None)
Definition: plotting.py:526
def _findBounds(th1s, ylog, xmin=None, xmax=None, ymin=None, ymax=None)
Definition: plotting.py:458
def _getXmax(obj, limitToNonZeroContent=False)
Definition: plotting.py:357
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
T min(T a, T b)
Definition: MathUtil.h:58
def _getXmin(obj, limitToNonZeroContent=False)
Definition: plotting.py:341
#define str(s)
def plotting._findBoundsY (   th1s,
  ylog,
  ymin = None,
  ymax = None,
  coverage = None,
  coverageRange = None 
)
private
Find y axis boundaries encompassing a list of TH1s if the bounds are not given in arguments.

Arguments:
th1s -- List of TH1s
ylog -- Boolean indicating if y axis is in log scale or not (affects the automatic ymax)

Keyword arguments:
ymin -- Minimum y value; if None, take the minimum of TH1s
ymax -- Maximum y value; if None, take the maximum of TH1s
coverage -- If set, use only values within the 'coverage' part around the median are used for min/max (useful for ratio)
coverageRange -- If coverage and this are set, use only the x axis specified by an (xmin,xmax) pair for the coverage

Definition at line 526 of file plotting.py.

References _getYmax(), _getYmin(), _getYminIgnoreOutlier(), _getYminMaxAroundMedian(), SiStripPI.max, min(), edm.print(), and str.

Referenced by _findBounds().

526 def _findBoundsY(th1s, ylog, ymin=None, ymax=None, coverage=None, coverageRange=None):
527  """Find y axis boundaries encompassing a list of TH1s if the bounds are not given in arguments.
528 
529  Arguments:
530  th1s -- List of TH1s
531  ylog -- Boolean indicating if y axis is in log scale or not (affects the automatic ymax)
532 
533  Keyword arguments:
534  ymin -- Minimum y value; if None, take the minimum of TH1s
535  ymax -- Maximum y value; if None, take the maximum of TH1s
536  coverage -- If set, use only values within the 'coverage' part around the median are used for min/max (useful for ratio)
537  coverageRange -- If coverage and this are set, use only the x axis specified by an (xmin,xmax) pair for the coverage
538  """
539  if coverage is not None or isinstance(th1s[0], ROOT.TH2):
540  # the only use case for coverage for now is ratio, for which
541  # the scalings are not needed (actually harmful), so let's
542  # just ignore them if 'coverage' is set
543  #
544  # Also for TH2 do not adjust automatic y bounds
545  y_scale_max = lambda y: y
546  y_scale_min = lambda y: y
547  else:
548  if ylog:
549  y_scale_max = lambda y: y*1.5
550  else:
551  y_scale_max = lambda y: y*1.05
552  y_scale_min = lambda y: y*0.9 # assuming log
553 
554  if ymin is None or ymax is None or isinstance(ymin, list) or isinstance(ymax, list):
555  ymins = []
556  ymaxs = []
557  for th1 in th1s:
558  if coverage is not None:
559  (_ymin, _ymax) = _getYminMaxAroundMedian(th1, coverage, coverageRange)
560  else:
561  if ylog and isinstance(ymin, list):
562  _ymin = _getYminIgnoreOutlier(th1)
563  else:
564  _ymin = _getYmin(th1, limitToNonZeroContent=isinstance(ymin, list))
565  _ymax = _getYmax(th1, limitToNonZeroContent=isinstance(ymax, list))
566 # _ymax = _getYmaxWithError(th1)
567 
568  ymins.append(_ymin)
569  ymaxs.append(_ymax)
570 
571  if ymin is None:
572  ymin = min(ymins)
573  elif isinstance(ymin, list):
574  ym_unscaled = min(ymins)
575  ym = y_scale_min(ym_unscaled)
576  ymins_below = [y for y in ymin if y<=ym]
577  if len(ymins_below) == 0:
578  ymin = min(ymin)
579  if ym_unscaled < ymin:
580  if verbose:
581  print("Histogram minimum y %f is below all given ymin values %s, using the smallest one" % (ym, str(ymin)))
582  else:
583  ymin = max(ymins_below)
584 
585  if ymax is None:
586  # in case ymax is automatic, ymin is set by list, and the
587  # histograms are zero, ensure here that ymax > ymin
588  ymax = y_scale_max(max(ymaxs+[ymin]))
589  elif isinstance(ymax, list):
590  ym_unscaled = max(ymaxs)
591  ym = y_scale_max(ym_unscaled)
592  ymaxs_above = [y for y in ymax if y>ym]
593  if len(ymaxs_above) == 0:
594  ymax = max(ymax)
595  if ym_unscaled > ymax:
596  if verbose:
597  print("Histogram maximum y %f is above all given ymax values %s, using the maximum one" % (ym_unscaled, str(ymax)))
598  else:
599  ymax = min(ymaxs_above)
600 
601  for th1 in th1s:
602  th1.GetYaxis().SetRangeUser(ymin, ymax)
603 
604  return (ymin, ymax)
605 
def _getYmax(obj, limitToNonZeroContent=False)
Definition: plotting.py:388
def _findBoundsY(th1s, ylog, ymin=None, ymax=None, coverage=None, coverageRange=None)
Definition: plotting.py:526
def _getYmin(obj, limitToNonZeroContent=False)
Definition: plotting.py:373
def _getYminIgnoreOutlier(th1)
Definition: plotting.py:406
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
T min(T a, T b)
Definition: MathUtil.h:58
def _getYminMaxAroundMedian(obj, coverage, coverageRange=None)
Definition: plotting.py:422
#define str(s)
def plotting._getDirectory (   args,
  kwargs 
)
private

Definition at line 98 of file plotting.py.

References _getDirectoryDetailed().

Referenced by plotting.PlotterTableItem.create().

98 def _getDirectory(*args, **kwargs):
99  return GetDirectoryCode.codesToNone(_getDirectoryDetailed(*args, **kwargs))
100 
def _getDirectory(args, kwargs)
Definition: plotting.py:98
def _getDirectoryDetailed(tfile, possibleDirs, subDir=None)
Definition: plotting.py:74
def plotting._getDirectoryDetailed (   tfile,
  possibleDirs,
  subDir = None 
)
private
Get TDirectory from TFile.

Definition at line 74 of file plotting.py.

References join(), and edm.print().

Referenced by _getDirectory(), and plotting.PlotterFolder.create().

74 def _getDirectoryDetailed(tfile, possibleDirs, subDir=None):
75  """Get TDirectory from TFile."""
76  if tfile is None:
78  for pdf in possibleDirs:
79  d = tfile.Get(pdf)
80  if d:
81  if subDir is not None:
82  # Pick associator if given
83  d = d.Get(subDir)
84  if d:
85  return d
86  else:
87  if verbose:
88  print("Did not find subdirectory '%s' from directory '%s' in file %s" % (subDir, pdf, tfile.GetName()))
89 # if "Step" in subDir:
90 # raise Exception("Foo")
92  else:
93  return d
94  if verbose:
95  print("Did not find any of directories '%s' from file %s" % (",".join(possibleDirs), tfile.GetName()))
97 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def _getDirectoryDetailed(tfile, possibleDirs, subDir=None)
Definition: plotting.py:74
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def plotting._getObject (   tdirectory,
  name 
)
private

Definition at line 50 of file plotting.py.

References edm.print().

Referenced by _getOrCreateObject(), plotting.Subtract.create(), plotting.FakeDuplicate.create(), plotting.AggregateHistos.create(), and plotting.PlotterFolder.create().

50 def _getObject(tdirectory, name):
51  obj = tdirectory.Get(name)
52  if not obj:
53  if verbose:
54  print("Did not find {obj} from {dir}".format(obj=name, dir=tdirectory.GetPath()))
55  return None
56  return obj
57 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def _getObject(tdirectory, name)
Definition: plotting.py:50
def plotting._getOrCreateObject (   tdirectory,
  nameOrCreator 
)
private

Definition at line 58 of file plotting.py.

References _getObject().

Referenced by trackingPlots.TimePerEventPlot._create(), plotting.Plot._createOne(), plotting.Transform.create(), plotting.CutEfficiency.create(), plotting.AggregateBins.create(), plotting.ROC.create(), and trackingPlots.TimePerTrackPlot.create().

58 def _getOrCreateObject(tdirectory, nameOrCreator):
59  if hasattr(nameOrCreator, "create"):
60  return nameOrCreator.create(tdirectory)
61  return _getObject(tdirectory, nameOrCreator)
62 
def _getOrCreateObject(tdirectory, nameOrCreator)
Definition: plotting.py:58
def _getObject(tdirectory, name)
Definition: plotting.py:50
def plotting._getXmax (   obj,
  limitToNonZeroContent = False 
)
private

Definition at line 357 of file plotting.py.

References SiStripPI.max, and str.

Referenced by _findBounds().

357 def _getXmax(obj, limitToNonZeroContent=False):
358  if isinstance(obj, ROOT.TH1):
359  xaxis = obj.GetXaxis()
360  if limitToNonZeroContent:
361  for i in range(obj.GetNbinsX(), 0, -1):
362  if obj.GetBinContent(i) != 0:
363  return xaxis.GetBinUpEdge(i)
364  # None for all bins being zero
365  return None
366  else:
367  return xaxis.GetBinUpEdge(xaxis.GetLast())
368  elif isinstance(obj, ROOT.TGraph) or isinstance(obj, ROOT.TGraph2D):
369  m = max([obj.GetX()[i] for i in range(0, obj.GetN())])
370  return m*1.1 if m > 0 else m*0.9
371  raise Exception("Unsupported type %s" % str(obj))
372 
def _getXmax(obj, limitToNonZeroContent=False)
Definition: plotting.py:357
#define str(s)
def plotting._getXmin (   obj,
  limitToNonZeroContent = False 
)
private

Definition at line 341 of file plotting.py.

References min(), and str.

Referenced by _findBounds().

341 def _getXmin(obj, limitToNonZeroContent=False):
342  if isinstance(obj, ROOT.TH1):
343  xaxis = obj.GetXaxis()
344  if limitToNonZeroContent:
345  for i in range(1, obj.GetNbinsX()+1):
346  if obj.GetBinContent(i) != 0:
347  return xaxis.GetBinLowEdge(i)
348  # None for all bins being zero
349  return None
350  else:
351  return xaxis.GetBinLowEdge(xaxis.GetFirst())
352  elif isinstance(obj, ROOT.TGraph) or isinstance(obj, ROOT.TGraph2D):
353  m = min([obj.GetX()[i] for i in range(0, obj.GetN())])
354  return m*0.9 if m > 0 else m*1.1
355  raise Exception("Unsupported type %s" % str(obj))
356 
T min(T a, T b)
Definition: MathUtil.h:58
def _getXmin(obj, limitToNonZeroContent=False)
Definition: plotting.py:341
#define str(s)
def plotting._getYmax (   obj,
  limitToNonZeroContent = False 
)
private

Definition at line 388 of file plotting.py.

References SiStripPI.max, and str.

Referenced by _findBoundsY().

388 def _getYmax(obj, limitToNonZeroContent=False):
389  if isinstance(obj, ROOT.TH2):
390  yaxis = obj.GetYaxis()
391  return yaxis.GetBinUpEdge(yaxis.GetLast())
392  elif isinstance(obj, ROOT.TH1):
393  if limitToNonZeroContent:
394  lst = [obj.GetBinContent(i) for i in range(1, obj.GetNbinsX()+1) if obj.GetBinContent(i) != 0 ]
395  return max(lst) if len(lst) != 0 else 0
396  else:
397  return obj.GetMaximum()
398  elif isinstance(obj, ROOT.TGraph) or isinstance(obj, ROOT.TGraph2D):
399  m = max([obj.GetY()[i] for i in range(0, obj.GetN())])
400  return m*1.1 if m > 0 else m*0.9
401  raise Exception("Unsupported type %s" % str(obj))
402 
def _getYmax(obj, limitToNonZeroContent=False)
Definition: plotting.py:388
#define str(s)
def plotting._getYmaxWithError (   th1)
private

Definition at line 403 of file plotting.py.

References SiStripPI.max.

404  return max([th1.GetBinContent(i)+th1.GetBinError(i) for i in range(1, th1.GetNbinsX()+1)])
405 
def _getYmaxWithError(th1)
Definition: plotting.py:403
def plotting._getYmin (   obj,
  limitToNonZeroContent = False 
)
private

Definition at line 373 of file plotting.py.

References min(), and str.

Referenced by _findBoundsY().

373 def _getYmin(obj, limitToNonZeroContent=False):
374  if isinstance(obj, ROOT.TH2):
375  yaxis = obj.GetYaxis()
376  return yaxis.GetBinLowEdge(yaxis.GetFirst())
377  elif isinstance(obj, ROOT.TH1):
378  if limitToNonZeroContent:
379  lst = [obj.GetBinContent(i) for i in range(1, obj.GetNbinsX()+1) if obj.GetBinContent(i) != 0 ]
380  return min(lst) if len(lst) != 0 else 0
381  else:
382  return obj.GetMinimum()
383  elif isinstance(obj, ROOT.TGraph) or isinstance(obj, ROOT.TGraph2D):
384  m = min([obj.GetY()[i] for i in range(0, obj.GetN())])
385  return m*0.9 if m > 0 else m*1.1
386  raise Exception("Unsupported type %s" % str(obj))
387 
def _getYmin(obj, limitToNonZeroContent=False)
Definition: plotting.py:373
T min(T a, T b)
Definition: MathUtil.h:58
#define str(s)
def plotting._getYminIgnoreOutlier (   th1)
private

Definition at line 406 of file plotting.py.

References createfilelist.int.

Referenced by _findBoundsY().

407  yvals = sorted([n for n in [th1.GetBinContent(i) for i in range(1, th1.GetNbinsX()+1)] if n>0])
408  if len(yvals) == 0:
409  return th1.GetMinimum()
410  if len(yvals) == 1:
411  return yvals[0]
412 
413  # Define outlier as being x10 less than minimum of the 95 % of the non-zero largest values
414  ind_min = len(yvals)-1 - int(len(yvals)*0.95)
415  min_val = yvals[ind_min]
416  for i in range(0, ind_min):
417  if yvals[i] > 0.1*min_val:
418  return yvals[i]
419 
420  return min_val
421 
def _getYminIgnoreOutlier(th1)
Definition: plotting.py:406
def plotting._getYminMaxAroundMedian (   obj,
  coverage,
  coverageRange = None 
)
private

Definition at line 422 of file plotting.py.

References createfilelist.int, and str.

Referenced by _findBoundsY().

422 def _getYminMaxAroundMedian(obj, coverage, coverageRange=None):
423  inRange = lambda x: True
424  inRange2 = lambda xmin,xmax: True
425  if coverageRange:
426  inRange = lambda x: coverageRange[0] <= x <= coverageRange[1]
427  inRange2 = lambda xmin,xmax: coverageRange[0] <= xmin and xmax <= coverageRange[1]
428 
429  if isinstance(obj, ROOT.TH1):
430  yvals = [obj.GetBinContent(i) for i in range(1, obj.GetNbinsX()+1) if inRange2(obj.GetXaxis().GetBinLowEdge(i), obj.GetXaxis().GetBinUpEdge(i))]
431  yvals = [x for x in yvals if x != 0]
432  elif isinstance(obj, ROOT.TGraph) or isinstance(obj, ROOT.TGraph2D):
433  yvals = [obj.GetY()[i] for i in range(0, obj.GetN()) if inRange(obj.GetX()[i])]
434  else:
435  raise Exception("Unsupported type %s" % str(obj))
436  if len(yvals) == 0:
437  return (0, 0)
438  if len(yvals) == 1:
439  return (yvals[0], yvals[0])
440  if len(yvals) == 2:
441  return (yvals[0], yvals[1])
442 
443  yvals.sort()
444  nvals = int(len(yvals)*coverage)
445  if nvals < 2:
446  # Take median and +- 1 values
447  if len(yvals) % 2 == 0:
448  half = len(yvals)/2
449  return ( yvals[half-1], yvals[half] )
450  else:
451  middle = len(yvals)/2
452  return ( yvals[middle-1], yvals[middle+1] )
453  ind_min = (len(yvals)-nvals)/2
454  ind_max = len(yvals)-1 - ind_min
455 
456  return (yvals[ind_min], yvals[ind_max])
457 
def _getYminMaxAroundMedian(obj, coverage, coverageRange=None)
Definition: plotting.py:422
#define str(s)
def plotting._mergeBinLabels (   labelsAll)
private

Definition at line 712 of file plotting.py.

References SiStripPI.max.

Referenced by _mergeBinLabelsX(), and _mergeBinLabelsY().

712 def _mergeBinLabels(labelsAll):
713  labels_merged = labelsAll[0]
714  for labels in labelsAll[1:]:
715  diff = difflib.unified_diff(labels_merged, labels, n=max(len(labels_merged), len(labels)))
716  labels_merged = []
717  operation = []
718  for item in diff: # skip the "header" lines
719  if item[:2] == "@@":
720  break
721  for item in diff:
722  operation.append(item[0])
723  lab = item[1:]
724  if lab in labels_merged:
725  # pick the last addition of the bin
726  ind = labels_merged.index(lab)
727  if operation[ind] == "-" and operation[-1] == "+":
728  labels_merged.remove(lab)
729  del operation[ind] # to keep xbinlabels and operation indices in sync
730  elif operation[ind] == "+" and operation[-1] == "-":
731  del operation[-1] # to keep xbinlabels and operation indices in sync
732  continue
733  else:
734  raise Exception("This should never happen")
735  labels_merged.append(lab)
736  # unified_diff returns empty diff if labels_merged and labels are equal
737  # so if labels_merged is empty here, it can be just set to labels
738  if len(labels_merged) == 0:
739  labels_merged = labels
740 
741  return labels_merged
742 
def _mergeBinLabels(labelsAll)
Definition: plotting.py:712
def plotting._mergeBinLabelsX (   histos)
private

Definition at line 706 of file plotting.py.

References _mergeBinLabels().

Referenced by trackingPlots.TrackingSeedingLayerTable.draw(), and plotting.Plot.draw().

706 def _mergeBinLabelsX(histos):
707  return _mergeBinLabels([[h.GetXaxis().GetBinLabel(i) for i in range(1, h.GetNbinsX()+1)] for h in histos])
708 
def _mergeBinLabels(labelsAll)
Definition: plotting.py:712
def _mergeBinLabelsX(histos)
Definition: plotting.py:706
def plotting._mergeBinLabelsY (   histos)
private

Definition at line 709 of file plotting.py.

References _mergeBinLabels().

Referenced by plotting.Plot.draw().

709 def _mergeBinLabelsY(histos):
710  return _mergeBinLabels([[h.GetYaxis().GetBinLabel(i) for i in range(1, h.GetNbinsY()+1)] for h in histos])
711 
def _mergeBinLabelsY(histos)
Definition: plotting.py:709
def _mergeBinLabels(labelsAll)
Definition: plotting.py:712
def plotting._modifyPadForRatio (   pad,
  ratioFactor 
)
private

Definition at line 120 of file plotting.py.

Referenced by ntuplePlotting.draw(), and ntuplePlotting.drawMany().

120 def _modifyPadForRatio(pad, ratioFactor):
121  pad.Divide(1, 2)
122 
123  divisionPoint = 1-1/ratioFactor
124 
125  topMargin = pad.GetTopMargin()
126  bottomMargin = pad.GetBottomMargin()
127  divisionPoint += (1-divisionPoint)*bottomMargin # correct for (almost-)zeroing bottom margin of pad1
128  divisionPointForPad1 = 1-( (1-divisionPoint) / (1-0.02) ) # then correct for the non-zero bottom margin, but for pad1 only
129 
130  # Set the lower point of the upper pad to divisionPoint
131  pad1 = pad.cd(1)
132  yup = 1.0
133  ylow = divisionPointForPad1
134  xup = 1.0
135  xlow = 0.0
136  pad1.SetPad(xlow, ylow, xup, yup)
137  pad1.SetFillStyle(4000) # transparent
138  pad1.SetBottomMargin(0.02) # need some bottom margin here for eps/pdf output (at least in ROOT 5.34)
139 
140  # Set the upper point of the lower pad to divisionPoint
141  pad2 = pad.cd(2)
142  yup = divisionPoint
143  ylow = 0.0
144  pad2.SetPad(xlow, ylow, xup, yup)
145  pad2.SetFillStyle(4000) # transparent
146  pad2.SetTopMargin(0.0)
147  pad2.SetBottomMargin(bottomMargin/(ratioFactor*divisionPoint))
148 
def _modifyPadForRatio(pad, ratioFactor)
Definition: plotting.py:120
def plotting._setStyle ( )
private

Definition at line 22 of file plotting.py.

22 def _setStyle():
23  _absoluteSize = True
24  if _absoluteSize:
25  font = 43
26  titleSize = 22
27  labelSize = 22
28  statSize = 14
29  else:
30  font = 42
31  titleSize = 0.05
32  labelSize = 0.05
33  statSize = 0.025
34 
35  ROOT.gROOT.SetStyle("Plain")
36  ROOT.gStyle.SetPadRightMargin(0.07)
37  ROOT.gStyle.SetPadLeftMargin(0.13)
38  ROOT.gStyle.SetTitleFont(font, "XYZ")
39  ROOT.gStyle.SetTitleSize(titleSize, "XYZ")
40  ROOT.gStyle.SetTitleOffset(1.2, "Y")
41  #ROOT.gStyle.SetTitleFontSize(0.05)
42  ROOT.gStyle.SetLabelFont(font, "XYZ")
43  ROOT.gStyle.SetLabelSize(labelSize, "XYZ")
44  ROOT.gStyle.SetTextSize(labelSize)
45  ROOT.gStyle.SetStatFont(font)
46  ROOT.gStyle.SetStatFontSize(statSize)
47 
48  ROOT.TGaxis.SetMaxDigits(4)
49 
def _setStyle()
Definition: plotting.py:22
def plotting._th1IncludeOnlyBins (   histos,
  xbinlabels 
)
private

Definition at line 743 of file plotting.py.

Referenced by trackingPlots.TrackingSeedingLayerTable.draw(), and plotting.Plot.draw().

743 def _th1IncludeOnlyBins(histos, xbinlabels):
744  histos_new = []
745  for h in histos:
746  h_new = h.Clone(h.GetName()+"_xbinlabels")
747  h_new.SetBins(len(xbinlabels), h.GetBinLowEdge(1), h.GetBinLowEdge(1)+len(xbinlabels))
748  for i, label in enumerate(xbinlabels):
749  bin = h.GetXaxis().FindFixBin(label)
750  if bin >= 0:
751  h_new.SetBinContent(i+1, h.GetBinContent(bin))
752  h_new.SetBinError(i+1, h.GetBinError(bin))
753  else:
754  h_new.SetBinContent(i+1, 0)
755  h_new.SetBinError(i+1, 0)
756  histos_new.append(h_new)
757  return histos_new
758 
759 
def _th1IncludeOnlyBins(histos, xbinlabels)
Definition: plotting.py:743
def plotting._th1RemoveEmptyBins (   histos,
  xbinlabels 
)
private

Definition at line 606 of file plotting.py.

Referenced by trackingPlots.TrackingSeedingLayerTable.draw().

606 def _th1RemoveEmptyBins(histos, xbinlabels):
607  binsToRemove = set()
608  for b in range(1, histos[0].GetNbinsX()+1):
609  binEmpty = True
610  for h in histos:
611  if h.GetBinContent(b) > 0:
612  binEmpty = False
613  break
614  if binEmpty:
615  binsToRemove.add(b)
616 
617  if len(binsToRemove) > 0:
618  # filter xbinlabels
619  xbinlab_new = []
620  for i in range(len(xbinlabels)):
621  if (i+1) not in binsToRemove:
622  xbinlab_new.append(xbinlabels[i])
623  xbinlabels = xbinlab_new
624 
625  # filter histogram bins
626  histos_new = []
627  for h in histos:
628  values = []
629  for b in range(1, h.GetNbinsX()+1):
630  if b not in binsToRemove:
631  values.append( (h.GetXaxis().GetBinLabel(b), h.GetBinContent(b), h.GetBinError(b)) )
632 
633  if len(values) > 0:
634  h_new = h.Clone(h.GetName()+"_empty")
635  h_new.SetBins(len(values), h.GetBinLowEdge(1), h.GetBinLowEdge(1)+len(values))
636  for b, (l, v, e) in enumerate(values):
637  h_new.GetXaxis().SetBinLabel(b+1, l)
638  h_new.SetBinContent(b+1, v)
639  h_new.SetBinError(b+1, e)
640 
641  histos_new.append(h_new)
642  histos = histos_new
643 
644  return (histos, xbinlabels)
645 
def _th1RemoveEmptyBins(histos, xbinlabels)
Definition: plotting.py:606
def plotting._th1ToOrderedDict (   th1,
  renameBin = None 
)
private

Definition at line 101 of file plotting.py.

Referenced by trackingPlots.TrackingSummaryTable.create(), and plotting.AggregateBins.create().

101 def _th1ToOrderedDict(th1, renameBin=None):
102  values = collections.OrderedDict()
103  for i in range(1, th1.GetNbinsX()+1):
104  binLabel = th1.GetXaxis().GetBinLabel(i)
105  if renameBin is not None:
106  binLabel = renameBin(binLabel)
107  values[binLabel] = (th1.GetBinContent(i), th1.GetBinError(i))
108  return values
109 
def _th1ToOrderedDict(th1, renameBin=None)
Definition: plotting.py:101
def plotting._th2RemoveEmptyBins (   histos,
  xbinlabels,
  ybinlabels 
)
private

Definition at line 646 of file plotting.py.

646 def _th2RemoveEmptyBins(histos, xbinlabels, ybinlabels):
647  xbinsToRemove = set()
648  ybinsToRemove = set()
649  for ih, h in enumerate(histos):
650  for bx in range(1, h.GetNbinsX()+1):
651  binEmpty = True
652  for by in range(1, h.GetNbinsY()+1):
653  if h.GetBinContent(bx, by) > 0:
654  binEmpty = False
655  break
656  if binEmpty:
657  xbinsToRemove.add(bx)
658  elif ih > 0:
659  xbinsToRemove.discard(bx)
660 
661  for by in range(1, h.GetNbinsY()+1):
662  binEmpty = True
663  for bx in range(1, h.GetNbinsX()+1):
664  if h.GetBinContent(bx, by) > 0:
665  binEmpty = False
666  break
667  if binEmpty:
668  ybinsToRemove.add(by)
669  elif ih > 0:
670  ybinsToRemove.discard(by)
671 
672  if len(xbinsToRemove) > 0 or len(ybinsToRemove) > 0:
673  xbinlabels_new = []
674  xbins = []
675  for b in range(1, len(xbinlabels)+1):
676  if b not in xbinsToRemove:
677  xbinlabels_new.append(histos[0].GetXaxis().GetBinLabel(b))
678  xbins.append(b)
679  xbinlabels = xbinlabels_new
680  ybinlabels_new = []
681  ybins = []
682  for b in range(1, len(ybinlabels)+1):
683  if b not in ybinsToRemove:
684  ybinlabels.append(histos[0].GetYaxis().GetBinLabel(b))
685  ybins.append(b)
686  ybinlabels = xbinlabels_new
687 
688  histos_new = []
689  if len(xbinlabels) == 0 or len(ybinlabels) == 0:
690  return (histos_new, xbinlabels, ybinlabels)
691  for h in histos:
692  h_new = ROOT.TH2F(h.GetName()+"_empty", h.GetTitle(), len(xbinlabels),0,len(xbinlabels), len(ybinlabels),0,len(ybinlabels))
693  for b, l in enumerate(xbinlabels):
694  h_new.GetXaxis().SetBinLabel(b+1, l)
695  for b, l in enumerate(ybinlabels):
696  h_new.GetYaxis().SetBinLabel(b+1, l)
697 
698  for ix, bx in enumerate(xbins):
699  for iy, by in enumerate(ybins):
700  h_new.SetBinContent(ix+1, iy+1, h.GetBinContent(bx, by))
701  h_new.SetBinError(ix+1, iy+1, h.GetBinError(bx, by))
702  histos_new.append(h_new)
703  histos = histos_new
704  return (histos, xbinlabels, ybinlabels)
705 
def _th2RemoveEmptyBins(histos, xbinlabels, ybinlabels)
Definition: plotting.py:646

Variable Documentation

plotting._gr
private

Definition at line 244 of file plotting.py.

plotting._plotStylesColor
private

Definition at line 1183 of file plotting.py.

plotting._plotStylesMarker
private

Definition at line 1184 of file plotting.py.

plotting._ratio
private

Definition at line 204 of file plotting.py.

plotting._ratioYTitle
private

Definition at line 20 of file plotting.py.

plotting._th1
private

Definition at line 196 of file plotting.py.

plotting._uncertainty
private

Definition at line 197 of file plotting.py.

plotting._xerrshigh
private

Definition at line 248 of file plotting.py.

plotting._xerrslow
private

Definition at line 247 of file plotting.py.

plotting._xvalues
private

Definition at line 246 of file plotting.py.

plotting._yerrshigh
private

Definition at line 250 of file plotting.py.

plotting._yerrslow
private

Definition at line 251 of file plotting.py.

plotting._yvalues
private

Definition at line 249 of file plotting.py.

plotting.IgnoreCommandLineOptions

Definition at line 15 of file plotting.py.

plotting.verbose

Definition at line 19 of file plotting.py.