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

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

Referenced by ntuplePlotting.drawSingle().

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

Definition at line 1664 of file plotting.py.

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

Definition at line 106 of file plotting.py.

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

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

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

References _findBoundsY(), _getXmax(), _getXmin(), ALCARECOTkAlBeamHalo_cff.filter, SiStripPI.max, min(), and harvestTrackValidationPlots.str.

Referenced by ntuplePlotting.drawSingle().

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

References _getYmax(), _getYmin(), _getYminIgnoreOutlier(), _getYminMaxAroundMedian(), ALCARECOTkAlBeamHalo_cff.filter, SiStripPI.max, min(), and harvestTrackValidationPlots.str.

Referenced by _findBounds().

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

Definition at line 94 of file plotting.py.

References _getDirectoryDetailed().

Referenced by plotting.PlotterTableItem.create().

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

Definition at line 70 of file plotting.py.

References join().

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

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

Definition at line 46 of file plotting.py.

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

46 def _getObject(tdirectory, name):
47  obj = tdirectory.Get(name)
48  if not obj:
49  if verbose:
50  print "Did not find {obj} from {dir}".format(obj=name, dir=tdirectory.GetPath())
51  return None
52  return obj
53 
def _getObject(tdirectory, name)
Definition: plotting.py:46
def plotting._getOrCreateObject (   tdirectory,
  nameOrCreator 
)
private

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

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

Definition at line 353 of file plotting.py.

References SiStripPI.max, and harvestTrackValidationPlots.str.

Referenced by _findBounds().

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

Definition at line 337 of file plotting.py.

References min(), and harvestTrackValidationPlots.str.

Referenced by _findBounds().

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

Definition at line 384 of file plotting.py.

References SiStripPI.max, and harvestTrackValidationPlots.str.

Referenced by _findBoundsY().

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

Definition at line 399 of file plotting.py.

References SiStripPI.max.

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

Definition at line 369 of file plotting.py.

References min(), and harvestTrackValidationPlots.str.

Referenced by _findBoundsY().

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

Definition at line 402 of file plotting.py.

References ALCARECOTkAlBeamHalo_cff.filter, and createfilelist.int.

Referenced by _findBoundsY().

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

Definition at line 419 of file plotting.py.

References ALCARECOTkAlBeamHalo_cff.filter, createfilelist.int, and harvestTrackValidationPlots.str.

Referenced by _findBoundsY().

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

Definition at line 709 of file plotting.py.

References SiStripPI.max.

Referenced by _mergeBinLabelsX(), and _mergeBinLabelsY().

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

Definition at line 703 of file plotting.py.

References _mergeBinLabels().

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

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

Definition at line 706 of file plotting.py.

References _mergeBinLabels().

Referenced by plotting.Plot.draw().

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

Definition at line 116 of file plotting.py.

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

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

Definition at line 18 of file plotting.py.

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

Definition at line 740 of file plotting.py.

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

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

Definition at line 603 of file plotting.py.

Referenced by trackingPlots.TrackingSeedingLayerTable.draw().

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

Definition at line 97 of file plotting.py.

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

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

Definition at line 643 of file plotting.py.

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

Variable Documentation

plotting._gr
private

Definition at line 240 of file plotting.py.

plotting._plotStylesColor
private

Definition at line 1180 of file plotting.py.

plotting._plotStylesMarker
private

Definition at line 1181 of file plotting.py.

plotting._ratio
private

Definition at line 200 of file plotting.py.

plotting._ratioYTitle
private

Definition at line 16 of file plotting.py.

plotting._th1
private

Definition at line 192 of file plotting.py.

plotting._uncertainty
private

Definition at line 193 of file plotting.py.

plotting._xerrshigh
private

Definition at line 244 of file plotting.py.

plotting._xerrslow
private

Definition at line 243 of file plotting.py.

plotting._xvalues
private

Definition at line 242 of file plotting.py.

plotting._yerrshigh
private

Definition at line 246 of file plotting.py.

plotting._yerrslow
private

Definition at line 247 of file plotting.py.

plotting._yvalues
private

Definition at line 245 of file plotting.py.

plotting.IgnoreCommandLineOptions

Definition at line 11 of file plotting.py.

plotting.verbose

Definition at line 15 of file plotting.py.