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 147 of file plotting.py.

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

Referenced by ntuplePlotting.drawSingle().

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

Definition at line 1660 of file plotting.py.

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

Definition at line 108 of file plotting.py.

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

108 def _createCanvas(name, width, height):
109  # silence warning of deleting canvas with the same name
110  if not verbose:
111  backup = ROOT.gErrorIgnoreLevel
112  ROOT.gErrorIgnoreLevel = ROOT.kError
113  canvas = ROOT.TCanvas(name, name, width, height)
114  if not verbose:
115  ROOT.gErrorIgnoreLevel = backup
116  return canvas
117 
def _createCanvas(name, width, height)
Definition: plotting.py:108
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 1184 of file plotting.py.

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

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

Referenced by ntuplePlotting.drawSingle().

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

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

Referenced by _findBounds().

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

Definition at line 96 of file plotting.py.

References _getDirectoryDetailed().

Referenced by plotting.PlotterTableItem.create().

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

Definition at line 72 of file plotting.py.

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

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

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

Definition at line 48 of file plotting.py.

References edm.print().

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

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

Definition at line 56 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().

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

Definition at line 355 of file plotting.py.

References SiStripPI.max, and str.

Referenced by _findBounds().

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

Definition at line 339 of file plotting.py.

References min(), and str.

Referenced by _findBounds().

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

Definition at line 386 of file plotting.py.

References SiStripPI.max, and str.

Referenced by _findBoundsY().

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

Definition at line 401 of file plotting.py.

References SiStripPI.max.

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

Definition at line 371 of file plotting.py.

References min(), and str.

Referenced by _findBoundsY().

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

Definition at line 404 of file plotting.py.

References createfilelist.int.

Referenced by _findBoundsY().

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

Definition at line 420 of file plotting.py.

References createfilelist.int, and str.

Referenced by _findBoundsY().

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

Definition at line 710 of file plotting.py.

References SiStripPI.max.

Referenced by _mergeBinLabelsX(), and _mergeBinLabelsY().

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

Definition at line 704 of file plotting.py.

References _mergeBinLabels().

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

704 def _mergeBinLabelsX(histos):
705  return _mergeBinLabels([[h.GetXaxis().GetBinLabel(i) for i in xrange(1, h.GetNbinsX()+1)] for h in histos])
706 
def _mergeBinLabels(labelsAll)
Definition: plotting.py:710
def _mergeBinLabelsX(histos)
Definition: plotting.py:704
def plotting._mergeBinLabelsY (   histos)
private

Definition at line 707 of file plotting.py.

References _mergeBinLabels().

Referenced by plotting.Plot.draw().

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

Definition at line 118 of file plotting.py.

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

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

Definition at line 20 of file plotting.py.

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

Definition at line 741 of file plotting.py.

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

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

Definition at line 604 of file plotting.py.

Referenced by trackingPlots.TrackingSeedingLayerTable.draw().

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

Definition at line 99 of file plotting.py.

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

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

Definition at line 644 of file plotting.py.

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

Variable Documentation

plotting._gr
private

Definition at line 242 of file plotting.py.

plotting._plotStylesColor
private

Definition at line 1181 of file plotting.py.

plotting._plotStylesMarker
private

Definition at line 1182 of file plotting.py.

plotting._ratio
private

Definition at line 202 of file plotting.py.

plotting._ratioYTitle
private

Definition at line 18 of file plotting.py.

plotting._th1
private

Definition at line 194 of file plotting.py.

plotting._uncertainty
private

Definition at line 195 of file plotting.py.

plotting._xerrshigh
private

Definition at line 246 of file plotting.py.

plotting._xerrslow
private

Definition at line 245 of file plotting.py.

plotting._xvalues
private

Definition at line 244 of file plotting.py.

plotting._yerrshigh
private

Definition at line 248 of file plotting.py.

plotting._yerrslow
private

Definition at line 249 of file plotting.py.

plotting._yvalues
private

Definition at line 247 of file plotting.py.

plotting.IgnoreCommandLineOptions

Definition at line 13 of file plotting.py.

plotting.verbose

Definition at line 17 of file plotting.py.