CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
plotting.Plot Class Reference

Public Member Functions

def __init__ (self, name, **kwargs)
 
def addToLegend (self, legend, legendLabels, denomUncertainty)
 
def clone (self, **kwargs)
 
def create (self, tdirNEvents, requireAllHistograms=False)
 
def draw (self, pad, ratio, ratioFactor, nrows)
 
def drawRatioUncertainty (self)
 
def getName (self)
 
def getNumberOfHistograms (self)
 
def isEmpty (self)
 
def isRatio (self, ratio)
 
def isTGraph2D (self)
 
def setName (self, name)
 
def setProperties (self, **kwargs)
 

Private Member Functions

def _createOne (self, name, index, tdir, nevents)
 
def _normalize (self)
 
def _setStats (self, histos, startingX, startingY)
 

Private Attributes

 _forLegend
 
 _frame
 
 _histograms
 
 _mainAdditional
 
 _name
 
 _ratioAdditional
 
 _ratios
 
 _tmp_histos
 
 _xtitle
 
 _ytitle
 

Detailed Description

Represents one plot, comparing one or more histograms.

Definition at line 1696 of file plotting.py.

Constructor & Destructor Documentation

◆ __init__()

def plotting.Plot.__init__ (   self,
  name,
**  kwargs 
)
Constructor.

Arguments:
name -- String for name of the plot, or Efficiency object

Keyword arguments:
fallback     -- Dictionary for specifying fallback (default None)
outname      -- String for an output name of the plot (default None for the same as 'name')
title        -- String for a title of the plot (default None)
xtitle       -- String for x axis title (default None)
xtitlesize   -- Float for x axis title size (default None)
xtitleoffset -- Float for x axis title offset (default None)
xlabelsize   -- Float for x axis label size (default None)
ytitle       -- String for y axis title (default None)
ytitlesize   -- Float for y axis title size (default None)
ytitleoffset -- Float for y axis title offset (default None)
ztitle       -- String for z axis title (default None)
ztitleoffset -- Float for z axis title offset (default None)
xmin         -- Float for x axis minimum (default None, i.e. automatic)
xmax         -- Float for x axis maximum (default None, i.e. automatic)
ymin         -- Float for y axis minimum (default 0)
ymax         -- Float for y axis maximum (default None, i.e. automatic)
xlog         -- Bool for x axis log status (default False)
ylog         -- Bool for y axis log status (default False)
xgrid        -- Bool for x axis grid status (default True)
ygrid        -- Bool for y axis grid status (default True)
stat         -- Draw stat box? (default False)
fit          -- Do gaussian fit? (default False)
statx        -- Stat box x coordinate (default 0.65)
staty        -- Stat box y coordinate (default 0.8)
statyadjust  -- List of floats for stat box y coordinate adjustments (default None)
normalizeToUnitArea -- Normalize histograms to unit area? (default False)
normalizeToNumberOfEvents -- Normalize histograms to number of events? If yes, the PlotFolder needs 'numberOfEventsHistogram' set to a histogram filled once per event (default False)
profileX     -- Take histograms via ProfileX()? (default False)
fitSlicesY   -- Take histograms via FitSlicesY() (default False)
rebinX       -- rebin x axis (default None)
scale        -- Scale histograms by a number (default None)
xbinlabels   -- List of x axis bin labels (if given, default None)
xbinlabelsize -- Size of x axis bin labels (default None)
xbinlabeloption -- Option string for x axis bin labels (default None)
removeEmptyBins -- Bool for removing empty bins, but only if histogram has bin labels (default False)
printBins    -- Bool for printing bin values, but only if histogram has bin labels (default False)
drawStyle    -- If "hist", draw as line instead of points (default None)
drawCommand  -- Deliver this to Draw() (default: None for same as drawStyle)
lineWidth    -- If drawStyle=="hist", the width of line (default 2)
legendDx     -- Float for moving TLegend in x direction for separate=True (default None)
legendDy     -- Float for moving TLegend in y direction for separate=True (default None)
legendDw     -- Float for changing TLegend width for separate=True (default None)
legendDh     -- Float for changing TLegend height for separate=True (default None)
legend       -- Bool to enable/disable legend (default True)
adjustMarginLeft  -- Float for adjusting left margin (default None)
adjustMarginRight  -- Float for adjusting right margin (default None)
ratio        -- Possibility to disable ratio for this particular plot (default None)
ratioYmin    -- Float for y axis minimum in ratio pad (default: list of values)
ratioYmax    -- Float for y axis maximum in ratio pad (default: list of values)
ratioFit     -- Fit straight line in ratio? (default None)
ratioUncertainty -- Plot uncertainties on ratio? (default True)
ratioCoverageXrange -- Range of x axis values (xmin,xmax) to limit the automatic ratio y axis range calculation to (default None for disabled)
histogramModifier -- Function to be called in create() to modify the histograms (default None)

Definition at line 1698 of file plotting.py.

1698  def __init__(self, name, **kwargs):
1699  """ Constructor.
1700 
1701  Arguments:
1702  name -- String for name of the plot, or Efficiency object
1703 
1704  Keyword arguments:
1705  fallback -- Dictionary for specifying fallback (default None)
1706  outname -- String for an output name of the plot (default None for the same as 'name')
1707  title -- String for a title of the plot (default None)
1708  xtitle -- String for x axis title (default None)
1709  xtitlesize -- Float for x axis title size (default None)
1710  xtitleoffset -- Float for x axis title offset (default None)
1711  xlabelsize -- Float for x axis label size (default None)
1712  ytitle -- String for y axis title (default None)
1713  ytitlesize -- Float for y axis title size (default None)
1714  ytitleoffset -- Float for y axis title offset (default None)
1715  ztitle -- String for z axis title (default None)
1716  ztitleoffset -- Float for z axis title offset (default None)
1717  xmin -- Float for x axis minimum (default None, i.e. automatic)
1718  xmax -- Float for x axis maximum (default None, i.e. automatic)
1719  ymin -- Float for y axis minimum (default 0)
1720  ymax -- Float for y axis maximum (default None, i.e. automatic)
1721  xlog -- Bool for x axis log status (default False)
1722  ylog -- Bool for y axis log status (default False)
1723  xgrid -- Bool for x axis grid status (default True)
1724  ygrid -- Bool for y axis grid status (default True)
1725  stat -- Draw stat box? (default False)
1726  fit -- Do gaussian fit? (default False)
1727  statx -- Stat box x coordinate (default 0.65)
1728  staty -- Stat box y coordinate (default 0.8)
1729  statyadjust -- List of floats for stat box y coordinate adjustments (default None)
1730  normalizeToUnitArea -- Normalize histograms to unit area? (default False)
1731  normalizeToNumberOfEvents -- Normalize histograms to number of events? If yes, the PlotFolder needs 'numberOfEventsHistogram' set to a histogram filled once per event (default False)
1732  profileX -- Take histograms via ProfileX()? (default False)
1733  fitSlicesY -- Take histograms via FitSlicesY() (default False)
1734  rebinX -- rebin x axis (default None)
1735  scale -- Scale histograms by a number (default None)
1736  xbinlabels -- List of x axis bin labels (if given, default None)
1737  xbinlabelsize -- Size of x axis bin labels (default None)
1738  xbinlabeloption -- Option string for x axis bin labels (default None)
1739  removeEmptyBins -- Bool for removing empty bins, but only if histogram has bin labels (default False)
1740  printBins -- Bool for printing bin values, but only if histogram has bin labels (default False)
1741  drawStyle -- If "hist", draw as line instead of points (default None)
1742  drawCommand -- Deliver this to Draw() (default: None for same as drawStyle)
1743  lineWidth -- If drawStyle=="hist", the width of line (default 2)
1744  legendDx -- Float for moving TLegend in x direction for separate=True (default None)
1745  legendDy -- Float for moving TLegend in y direction for separate=True (default None)
1746  legendDw -- Float for changing TLegend width for separate=True (default None)
1747  legendDh -- Float for changing TLegend height for separate=True (default None)
1748  legend -- Bool to enable/disable legend (default True)
1749  adjustMarginLeft -- Float for adjusting left margin (default None)
1750  adjustMarginRight -- Float for adjusting right margin (default None)
1751  ratio -- Possibility to disable ratio for this particular plot (default None)
1752  ratioYmin -- Float for y axis minimum in ratio pad (default: list of values)
1753  ratioYmax -- Float for y axis maximum in ratio pad (default: list of values)
1754  ratioFit -- Fit straight line in ratio? (default None)
1755  ratioUncertainty -- Plot uncertainties on ratio? (default True)
1756  ratioCoverageXrange -- Range of x axis values (xmin,xmax) to limit the automatic ratio y axis range calculation to (default None for disabled)
1757  histogramModifier -- Function to be called in create() to modify the histograms (default None)
1758  """
1759  self._name = name
1760 
1761  def _set(attr, default):
1762  setattr(self, "_"+attr, kwargs.get(attr, default))
1763 
1764  _set("fallback", None)
1765  _set("outname", None)
1766 
1767  _set("title", None)
1768  _set("xtitle", None)
1769  _set("xtitlesize", None)
1770  _set("xtitleoffset", None)
1771  _set("xlabelsize", None)
1772  _set("ytitle", None)
1773  _set("ytitlesize", None)
1774  _set("ytitleoffset", None)
1775  _set("ztitle", None)
1776  _set("ztitleoffset", None)
1777 
1778  _set("xmin", None)
1779  _set("xmax", None)
1780  _set("ymin", 0.)
1781  _set("ymax", None)
1782 
1783  _set("xlog", False)
1784  _set("ylog", False)
1785  _set("xgrid", True)
1786  _set("ygrid", True)
1787 
1788  _set("stat", False)
1789  _set("fit", False)
1790 
1791  _set("statx", 0.65)
1792  _set("staty", 0.8)
1793  _set("statyadjust", None)
1794 
1795  _set("normalizeToUnitArea", False)
1796  _set("normalizeToNumberOfEvents", False)
1797  _set("profileX", False)
1798  _set("fitSlicesY", False)
1799  _set("rebinX", None)
1800 
1801  _set("scale", None)
1802  _set("xbinlabels", None)
1803  _set("xbinlabelsize", None)
1804  _set("xbinlabeloption", None)
1805  _set("removeEmptyBins", False)
1806  _set("printBins", False)
1807 
1808  _set("drawStyle", "EP")
1809  _set("drawCommand", None)
1810  _set("lineWidth", 2)
1811 
1812  _set("legendDx", None)
1813  _set("legendDy", None)
1814  _set("legendDw", None)
1815  _set("legendDh", None)
1816  _set("legend", True)
1817 
1818  _set("adjustMarginLeft", None)
1819  _set("adjustMarginRight", None)
1820 
1821  _set("ratio", None)
1822  _set("ratioYmin", [0, 0.2, 0.5, 0.7, 0.8, 0.9, 0.95])
1823  _set("ratioYmax", [1.05, 1.1, 1.2, 1.3, 1.5, 1.8, 2, 2.5, 3, 4, 5])
1824  _set("ratioFit", None)
1825  _set("ratioUncertainty", True)
1826  _set("ratioCoverageXrange", None)
1827 
1828  _set("histogramModifier", None)
1829 
1830  self._histograms = []
1831 

Member Function Documentation

◆ _createOne()

def plotting.Plot._createOne (   self,
  name,
  index,
  tdir,
  nevents 
)
private
Create one histogram from a TDirectory.

Definition at line 1879 of file plotting.py.

1879  def _createOne(self, name, index, tdir, nevents):
1880  """Create one histogram from a TDirectory."""
1881  if tdir == None:
1882  return None
1883 
1884  # If name is a list, pick the name by the index
1885  if isinstance(name, list):
1886  name = name[index]
1887 
1888  h = _getOrCreateObject(tdir, name)
1889  if h is not None and self._normalizeToNumberOfEvents and nevents is not None and nevents != 0:
1890  h.Scale(1.0/nevents)
1891  return h
1892 

References plotting._getOrCreateObject().

Referenced by plotting.Plot.create().

◆ _normalize()

def plotting.Plot._normalize (   self)
private
Normalise histograms to unit area

Definition at line 1985 of file plotting.py.

1985  def _normalize(self):
1986  """Normalise histograms to unit area"""
1987 
1988  for h in self._histograms:
1989  if h is None:
1990  continue
1991  i = h.Integral()
1992  if i == 0:
1993  continue
1994  if h.GetSumw2().fN <= 0: # to suppress warning
1995  h.Sumw2()
1996  h.Scale(1.0/i)
1997 

References RunHistogramManager._histograms, and plotting.Plot._histograms.

Referenced by plotting.Plot.draw().

◆ _setStats()

def plotting.Plot._setStats (   self,
  histos,
  startingX,
  startingY 
)
private
Set stats box.

Definition at line 1943 of file plotting.py.

1943  def _setStats(self, histos, startingX, startingY):
1944  """Set stats box."""
1945  if not self._stat:
1946  for h in histos:
1947  if h is not None and hasattr(h, "SetStats"):
1948  h.SetStats(0)
1949  return
1950 
1951  def _doStats(h, col, dy):
1952  if h is None:
1953  return
1954  h.SetStats(True)
1955 
1956  if self._fit and h.GetEntries() > 0.5:
1957  h.Fit("gaus", "Q")
1958  f = h.GetListOfFunctions().FindObject("gaus")
1959  if f == None:
1960  h.SetStats(0)
1961  return
1962  f.SetLineColor(col)
1963  f.SetLineWidth(1)
1964  h.Draw()
1965  ROOT.gPad.Update()
1966  st = h.GetListOfFunctions().FindObject("stats")
1967  if self._fit:
1968  st.SetOptFit(0o010)
1969  st.SetOptStat(1001)
1970  st.SetOptStat(1110)
1971  st.SetX1NDC(startingX)
1972  st.SetX2NDC(startingX+0.3)
1973  st.SetY1NDC(startingY+dy)
1974  st.SetY2NDC(startingY+dy+0.12)
1975  st.SetTextColor(col)
1976 
1977  dy = 0.0
1978  for i, h in enumerate(histos):
1979  if self._statyadjust is not None and i < len(self._statyadjust):
1980  dy += self._statyadjust[i]
1981 
1982  _doStats(h, _plotStylesColor[i], dy)
1983  dy -= 0.16
1984 

References DTSC._stat, and DTTrigGeom._stat.

◆ addToLegend()

def plotting.Plot.addToLegend (   self,
  legend,
  legendLabels,
  denomUncertainty 
)
Add histograms to a legend.

Arguments:
legend       -- TLegend
legendLabels -- List of strings for the legend labels

Definition at line 2231 of file plotting.py.

2231  def addToLegend(self, legend, legendLabels, denomUncertainty):
2232  """Add histograms to a legend.
2233 
2234  Arguments:
2235  legend -- TLegend
2236  legendLabels -- List of strings for the legend labels
2237  """
2238  first = denomUncertainty
2239  for h, label in zip(self._histograms, legendLabels):
2240  if h is None:
2241  first = False
2242  continue
2243  if first:
2244  self._forLegend = h.Clone()
2245  self._forLegend.SetFillStyle(1001)
2246  self._forLegend.SetFillColor(ROOT.kGray)
2247  entry = legend.AddEntry(self._forLegend, label, "lpf")
2248  first = False
2249  else:
2250  legend.AddEntry(h, label, "LP")
2251 

References RunHistogramManager._histograms, plotting.Plot._histograms, and ComparisonHelper.zip().

◆ clone()

def plotting.Plot.clone (   self,
**  kwargs 
)

◆ create()

def plotting.Plot.create (   self,
  tdirNEvents,
  requireAllHistograms = False 
)
Create histograms from list of TDirectories

Definition at line 1893 of file plotting.py.

1893  def create(self, tdirNEvents, requireAllHistograms=False):
1894  """Create histograms from list of TDirectories"""
1895  self._histograms = [self._createOne(self._name, i, tdirNEvent[0], tdirNEvent[1]) for i, tdirNEvent in enumerate(tdirNEvents)]
1896 
1897  if self._fallback is not None:
1898  profileX = [self._profileX]*len(self._histograms)
1899  for i in range(0, len(self._histograms)):
1900  if self._histograms[i] is None:
1901  self._histograms[i] = self._createOne(self._fallback["name"], i, tdirNEvents[i][0], tdirNEvents[i][1])
1902  profileX[i] = self._fallback.get("profileX", self._profileX)
1903 
1904  if self._histogramModifier is not None:
1905  self._histograms = self._histogramModifier(self._histograms)
1906 
1907  if len(self._histograms) > len(_plotStylesColor):
1908  raise Exception("More histograms (%d) than there are plot styles (%d) defined. Please define more plot styles in this file" % (len(self._histograms), len(_plotStylesColor)))
1909 
1910  # Modify histograms here in case self._name returns numbers
1911  # and self._histogramModifier creates the histograms from
1912  # these numbers
1913  def _modifyHisto(th1, profileX):
1914  if th1 is None:
1915  return None
1916 
1917  if profileX:
1918  th1 = th1.ProfileX()
1919 
1920  if self._fitSlicesY:
1921  ROOT.TH1.AddDirectory(True)
1922  th1.FitSlicesY()
1923  th1 = ROOT.gDirectory.Get(th1.GetName()+"_2")
1924  th1.SetDirectory(None)
1925  #th1.SetName(th1.GetName()+"_ref")
1926  ROOT.TH1.AddDirectory(False)
1927 
1928  if self._title is not None:
1929  th1.SetTitle(self._title)
1930 
1931  if self._scale is not None:
1932  th1.Scale(self._scale)
1933 
1934  return th1
1935 
1936  if self._fallback is not None:
1937  self._histograms = map(_modifyHisto, self._histograms, profileX)
1938  else:
1939  self._histograms = map(lambda h: _modifyHisto(h, self._profileX), self._histograms)
1940  if requireAllHistograms and None in self._histograms:
1941  self._histograms = [None]*len(self._histograms)
1942 

References plotting.Plot._createOne(), RunHistogramManager._histograms, plotting.Plot._histograms, FP420HitsObject._name, TrackerHitsObject._name, PGeometricDet::Item._name, TrackingRecHitAlgorithm._name, Logger._name, hcaldqm::DQModule._name, citk::IsolationConeDefinitionBase._name, DrellYanValidation._name, WValidation._name, hcaldqm::flag::Flag._name, hcaldqm::quantity::Quantity._name, HistoParams< T >._name, CutApplicatorBase._name, HistoParams< TH2F >._name, HistoParams< TProfile2D >._name, SequenceTypes.SequencePlaceholder._name, plotting.Subtract._name, plotting.Transform._name, plotting.FakeDuplicate._name, plotting.CutEfficiency._name, plotting.AggregateBins._name, plotting.AggregateHistos._name, plotting.ROC._name, SequenceTypes.TaskPlaceholder._name, plotting.Plot._name, plotting.AggregateBins._scale, HistoParams< T >._title, HistoParams< TH2F >._title, SiStripHitEffFromCalibTree._title, HistoParams< TProfile2D >._title, html.PageSet._title, plotting.Subtract._title, html.HtmlReport._title, plotting.Transform._title, plotting.FakeDuplicate._title, plotting.CutEfficiency._title, genParticles_cff.map, and FastTimerService_cff.range.

◆ draw()

def plotting.Plot.draw (   self,
  pad,
  ratio,
  ratioFactor,
  nrows 
)
Draw the histograms using values for a given algorithm.

Definition at line 1998 of file plotting.py.

1998  def draw(self, pad, ratio, ratioFactor, nrows):
1999  """Draw the histograms using values for a given algorithm."""
2000 # if len(self._histograms) == 0:
2001 # print "No histograms for plot {name}".format(name=self._name)
2002 # return
2003 
2004  isTGraph2D = self.isTGraph2D()
2005  if isTGraph2D:
2006  # Ratios for the TGraph2Ds is not that interesting
2007  ratioOrig = ratio
2008  ratio = False
2009 
2010  if self._normalizeToUnitArea:
2011  self._normalize()
2012 
2013  if self._rebinX is not None:
2014  for h in self._histograms:
2015  h.Rebin(self._rebinX)
2016 
2017  def _styleMarker(h, msty, col):
2018  h.SetMarkerStyle(msty)
2019  h.SetMarkerColor(col)
2020  h.SetMarkerSize(0.7)
2021  h.SetLineColor(1)
2022  h.SetLineWidth(1)
2023 
2024  def _styleHist(h, msty, col):
2025  _styleMarker(h, msty, col)
2026  h.SetLineColor(col)
2027  h.SetLineWidth(self._lineWidth)
2028 
2029  # Use marker or hist style
2030  style = _styleMarker
2031  if "hist" in self._drawStyle.lower():
2032  style = _styleHist
2033  if len(self._histograms) > 0 and isinstance(self._histograms[0], ROOT.TGraph):
2034  if "l" in self._drawStyle.lower():
2035  style = _styleHist
2036 
2037  # Apply style to histograms, filter out Nones
2038  histos = []
2039  for i, h in enumerate(self._histograms):
2040  if h is None:
2041  continue
2042  style(h, _plotStylesMarker[i], _plotStylesColor[i])
2043  histos.append(h)
2044  if len(histos) == 0:
2045  if verbose:
2046  print("No histograms for plot {name}".format(name=self.getName()))
2047  return
2048 
2049  # Extract x bin labels, make sure that only bins with same
2050  # label are compared with each other
2051  histosHaveBinLabels = len(histos[0].GetXaxis().GetBinLabel(1)) > 0
2052  xbinlabels = self._xbinlabels
2053  ybinlabels = None
2054  if xbinlabels is None:
2055  if histosHaveBinLabels:
2056  xbinlabels = _mergeBinLabelsX(histos)
2057  if isinstance(histos[0], ROOT.TH2):
2058  ybinlabels = _mergeBinLabelsY(histos)
2059 
2060  if len(histos) > 1: # don't bother if only one histogram
2061  # doing this for TH2 is pending for use case, for now there is only 1 histogram/plot for TH2
2062  histos = _th1IncludeOnlyBins(histos, xbinlabels)
2063  self._tmp_histos = histos # need to keep these in memory too ...
2064 
2065  # Remove empty bins, but only if histograms have bin labels
2066  if self._removeEmptyBins and histosHaveBinLabels:
2067  # at this point, all histograms have been "equalized" by their x binning and labels
2068  # therefore remove bins which are empty in all histograms
2069  if isinstance(histos[0], ROOT.TH2):
2070  (histos, xbinlabels, ybinlabels) = _th2RemoveEmptyBins(histos, xbinlabels, ybinlabels)
2071  else:
2072  (histos, xbinlabels) = _th1RemoveEmptyBins(histos, xbinlabels)
2073  self._tmp_histos = histos # need to keep these in memory too ...
2074  if len(histos) == 0:
2075  if verbose:
2076  print("No histograms with non-empty bins for plot {name}".format(name=self.getName()))
2077  return
2078 
2079  if self._printBins and histosHaveBinLabels:
2080  print("####################")
2081  print(self._name)
2082  width = max([len(l) for l in xbinlabels])
2083  tmp = "%%-%ds " % width
2084  for b in range(1, histos[0].GetNbinsX()+1):
2085  s = tmp % xbinlabels[b-1]
2086  for h in histos:
2087  s += "%.3f " % h.GetBinContent(b)
2088  print(s)
2089  print()
2090 
2091  bounds = _findBounds(histos, self._ylog,
2092  xmin=self._xmin, xmax=self._xmax,
2093  ymin=self._ymin, ymax=self._ymax)
2094  zmax = None
2095  if isinstance(histos[0], ROOT.TH2):
2096  zmax = max([h.GetMaximum() for h in histos])
2097 
2098  # need to keep these in memory
2099  self._mainAdditional = []
2100  self._ratioAdditional = []
2101 
2102  if ratio:
2103  self._ratios = _calculateRatios(histos, self._ratioUncertainty) # need to keep these in memory too ...
2104  ratioHistos = [h for h in [r.getRatio() for r in self._ratios[1:]] if h is not None]
2105 
2106  if len(ratioHistos) > 0:
2107  ratioBoundsY = _findBoundsY(ratioHistos, ylog=False, ymin=self._ratioYmin, ymax=self._ratioYmax, coverage=0.68, coverageRange=self._ratioCoverageXrange)
2108  else:
2109  ratioBoundsY = (0.9, 1,1) # hardcoded default in absence of valid ratio calculations
2110 
2111  if self._ratioFit is not None:
2112  for i, rh in enumerate(ratioHistos):
2113  tf_line = ROOT.TF1("line%d"%i, "[0]+x*[1]")
2114  tf_line.SetRange(self._ratioFit["rangemin"], self._ratioFit["rangemax"])
2115  fitres = rh.Fit(tf_line, "RINSQ")
2116  tf_line.SetLineColor(rh.GetMarkerColor())
2117  tf_line.SetLineWidth(2)
2118  self._ratioAdditional.append(tf_line)
2119  box = PlotTextBox(xmin=self._ratioFit.get("boxXmin", 0.14), ymin=None, # None for automatix
2120  xmax=self._ratioFit.get("boxXmax", 0.35), ymax=self._ratioFit.get("boxYmax", 0.09),
2121  color=rh.GetMarkerColor(), font=43, size=11, lineheight=0.02)
2122  box.move(dx=(box.width()+0.01)*i)
2123  #box.addText("Const: %.4f" % fitres.Parameter(0))
2124  #box.addText("Slope: %.4f" % fitres.Parameter(1))
2125  box.addText("Const: %.4f#pm%.4f" % (fitres.Parameter(0), fitres.ParError(0)))
2126  box.addText("Slope: %.4f#pm%.4f" % (fitres.Parameter(1), fitres.ParError(1)))
2127  self._mainAdditional.append(box)
2128 
2129 
2130  # Create bounds before stats in order to have the
2131  # SetRangeUser() calls made before the fit
2132  #
2133  # stats is better to be called before frame, otherwise get
2134  # mess in the plot (that frame creation cleans up)
2135  if ratio:
2136  pad.cd(1)
2137  self._setStats(histos, self._statx, self._staty)
2138 
2139  # Create frame
2140  if isTGraph2D:
2141  frame = FrameTGraph2D(pad, bounds, histos, ratioOrig, ratioFactor)
2142  else:
2143  if ratio:
2144  ratioBounds = (bounds[0], ratioBoundsY[0], bounds[2], ratioBoundsY[1])
2145  frame = FrameRatio(pad, bounds, zmax, ratioBounds, ratioFactor, nrows, xbinlabels, self._xbinlabelsize, self._xbinlabeloption)
2146  else:
2147  frame = Frame(pad, bounds, zmax, nrows, xbinlabels, self._xbinlabelsize, self._xbinlabeloption, ybinlabels=ybinlabels)
2148 
2149  # Set log and grid
2150  frame.setLogx(self._xlog)
2151  frame.setLogy(self._ylog)
2152  frame.setGridx(self._xgrid)
2153  frame.setGridy(self._ygrid)
2154 
2155  # Construct draw option string
2156  opt = "sames" # s for statbox or something?
2157  ds = ""
2158  if self._drawStyle is not None:
2159  ds = self._drawStyle
2160  if self._drawCommand is not None:
2161  ds = self._drawCommand
2162  if len(ds) > 0:
2163  opt += " "+ds
2164 
2165  # Set properties of frame
2166  frame.setTitle(histos[0].GetTitle())
2167  if self._xtitle == 'Default':
2168  frame.setXTitle( histos[0].GetXaxis().GetTitle() )
2169  elif self._xtitle is not None:
2170  frame.setXTitle(self._xtitle)
2171  if self._xtitlesize is not None:
2172  frame.setXTitleSize(self._xtitlesize)
2173  if self._xtitleoffset is not None:
2174  frame.setXTitleOffset(self._xtitleoffset)
2175  if self._xlabelsize is not None:
2176  frame.setXLabelSize(self._xlabelsize)
2177  if self._ytitle == 'Default':
2178  frame.setYTitle( histos[0].GetYaxis().GetTitle() )
2179  elif self._ytitle is not None:
2180  frame.setYTitle(self._ytitle)
2181  if self._ytitlesize is not None:
2182  frame.setYTitleSize(self._ytitlesize)
2183  if self._ytitleoffset is not None:
2184  frame.setYTitleOffset(self._ytitleoffset)
2185  if self._ztitle is not None:
2186  frame.setZTitle(self._ztitle)
2187  if self._ztitleoffset is not None:
2188  frame.setZTitleOffset(self._ztitleoffset)
2189  if self._adjustMarginLeft is not None:
2190  frame.adjustMarginLeft(self._adjustMarginLeft)
2191  if self._adjustMarginRight is not None:
2192  frame.adjustMarginRight(self._adjustMarginRight)
2193  elif "z" in opt:
2194  frame.adjustMarginLeft(0.03)
2195  frame.adjustMarginRight(0.08)
2196 
2197  # Draw histograms
2198  if ratio:
2199  frame._pad.cd()
2200 
2201  for i, h in enumerate(histos):
2202  o = opt
2203  if isTGraph2D and i == 0:
2204  o = o.replace("sames", "")
2205  h.Draw(o)
2206 
2207  for addl in self._mainAdditional:
2208  addl.Draw("same")
2209 
2210  # Draw ratios
2211  if ratio and len(self._ratios) > 0:
2212  frame._padRatio.cd()
2213  firstRatio = self._ratios[0].getRatio()
2214  if self._ratioUncertainty and firstRatio is not None:
2215  firstRatio.SetFillStyle(1001)
2216  firstRatio.SetFillColor(ROOT.kGray)
2217  firstRatio.SetLineColor(ROOT.kGray)
2218  firstRatio.SetMarkerColor(ROOT.kGray)
2219  firstRatio.SetMarkerSize(0)
2220  self._ratios[0].draw("E2")
2221  frame._padRatio.RedrawAxis("G") # redraw grid on top of the uncertainty of denominator
2222  for r in self._ratios[1:]:
2223  r.draw()
2224 
2225  for addl in self._ratioAdditional:
2226  addl.Draw("same")
2227 
2228  frame.redrawAxis()
2229  self._frame = frame # keep the frame in memory for sure
2230 

References RunHistogramManager._histograms, plotting.Plot._histograms, plotting._mergeBinLabelsX(), plotting._mergeBinLabelsY(), plotting.Plot._normalize(), plotting._th1IncludeOnlyBins(), HistoData.getName(), trklet::MemoryBase.getName(), emtf::Node.getName(), EcalLogicID.getName(), PCaloHit.getName(), CocoaMaterialElementary.getName(), trklet::ProcessBase.getName(), ecaldqm::DBReaderWorker.getName(), ParticleFlux.getName(), L1TUtmScale.getName(), FittedEntry.getName(), hcaldqm::mapper::Mapper.getName(), ecaldqm::DBWriterWorker.getName(), TkOfflineVariables.getName(), FieldHandlerBase< TOutput >.getName(), L1TUtmCondition.getName(), IdealResult.getName(), hcaldqm::mapper::HashMapper.getName(), L1TUtmAlgorithm.getName(), PassiveHit.getName(), jsoncollector::JsonMonitorable.getName(), TrackingRecHitAlgorithm.getName(), AnyMVAEstimatorRun2Base.getName(), QCriterion.getName(), CSGAction.getName(), MVAVariableManager< ParticleType >.getName(), DTTPGLutFile.getName(), AlignmentAlgorithm.getName(), L1TriggerLutFile.getName(), fastsim::InteractionModel.getName(), L1MuGMTReg.getName(), GenericMVAComputer::TaggingVariableIterator< Iter_t >::Value.getName(), pos::PixelPortcardMap.getName(), L1TUtmCut.getName(), GEMStation.getName(), PhysicsTools::Variable::Value.getName(), edm::messagelogger::ELseverityLevel.getName(), L1TUtmObject.getName(), edm::ELseverityLevel.getName(), L1TUtmTriggerMenu.getName(), RPCDCCLink.getName(), RPCAMCLink.getName(), L1MuGMTRegMMConfig.getName(), PhysicsTools::MVAModuleHelper< Record, Object, Filler >::Value.getName(), JanAlignmentAlgorithm.getName(), ecaldqm::DQWorker.getName(), cscdqm::HistoDef.getName(), FourVectorHLT::PathInfo.getName(), jsoncollector::DataPoint.getName(), RPCLBLink.getName(), PhysicsTools::Variable.getName(), dqm::impl::MonitorElement.getName(), L1MuGMTRegSortRankOffset.getName(), L1MuGMTRegCDLConfig.getName(), cscdqm::CSCHistoDef.getName(), plotting.PlotEmpty.getName(), plotting.Plot.getName(), plotting.Plot.isTGraph2D(), and print().

◆ drawRatioUncertainty()

def plotting.Plot.drawRatioUncertainty (   self)
Return true if the ratio uncertainty should be drawn

Definition at line 1875 of file plotting.py.

1875  def drawRatioUncertainty(self):
1876  """Return true if the ratio uncertainty should be drawn"""
1877  return self._ratioUncertainty
1878 

◆ getName()

def plotting.Plot.getName (   self)

◆ getNumberOfHistograms()

def plotting.Plot.getNumberOfHistograms (   self)
Return number of existing histograms.

Definition at line 1845 of file plotting.py.

1845  def getNumberOfHistograms(self):
1846  """Return number of existing histograms."""
1847  return len([h for h in self._histograms if h is not None])
1848 

References RunHistogramManager._histograms, and plotting.Plot._histograms.

Referenced by plotting.Plot.isEmpty().

◆ isEmpty()

def plotting.Plot.isEmpty (   self)
Return true if there are no histograms created for the plot

Definition at line 1849 of file plotting.py.

1849  def isEmpty(self):
1850  """Return true if there are no histograms created for the plot"""
1851  return self.getNumberOfHistograms() == 0
1852 

References plotting.PlotEmpty.getNumberOfHistograms(), and plotting.Plot.getNumberOfHistograms().

Referenced by plotting.Plot.clone().

◆ isRatio()

def plotting.Plot.isRatio (   self,
  ratio 
)

Definition at line 1859 of file plotting.py.

1859  def isRatio(self, ratio):
1860  if self._ratio is None:
1861  return ratio
1862  return ratio and self._ratio
1863 

◆ isTGraph2D()

def plotting.Plot.isTGraph2D (   self)

Definition at line 1853 of file plotting.py.

1853  def isTGraph2D(self):
1854  for h in self._histograms:
1855  if isinstance(h, ROOT.TGraph2D):
1856  return True
1857  return False
1858 

References RunHistogramManager._histograms, and plotting.Plot._histograms.

Referenced by plotting.Plot.draw().

◆ setName()

def plotting.Plot.setName (   self,
  name 
)

◆ setProperties()

def plotting.Plot.setProperties (   self,
**  kwargs 
)

Definition at line 1832 of file plotting.py.

1832  def setProperties(self, **kwargs):
1833  for name, value in six.iteritems(kwargs):
1834  if not hasattr(self, "_"+name):
1835  raise Exception("No attribute '%s'" % name)
1836  setattr(self, "_"+name, value)
1837 

Member Data Documentation

◆ _forLegend

plotting.Plot._forLegend
private

Definition at line 2244 of file plotting.py.

◆ _frame

plotting.Plot._frame
private

Definition at line 2229 of file plotting.py.

◆ _histograms

plotting.Plot._histograms
private

◆ _mainAdditional

plotting.Plot._mainAdditional
private

Definition at line 2099 of file plotting.py.

◆ _name

plotting.Plot._name
private

◆ _ratioAdditional

plotting.Plot._ratioAdditional
private

Definition at line 2100 of file plotting.py.

◆ _ratios

plotting.Plot._ratios
private

Definition at line 2103 of file plotting.py.

◆ _tmp_histos

plotting.Plot._tmp_histos
private

Definition at line 2063 of file plotting.py.

◆ _xtitle

plotting.Plot._xtitle
private

Definition at line 2167 of file plotting.py.

◆ _ytitle

plotting.Plot._ytitle
private

Definition at line 2177 of file plotting.py.

FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
plotting._mergeBinLabelsX
def _mergeBinLabelsX(histos)
Definition: plotting.py:708
plotting._th2RemoveEmptyBins
def _th2RemoveEmptyBins(histos, xbinlabels, ybinlabels)
Definition: plotting.py:648
plotting._calculateRatios
def _calculateRatios(histos, ratioUncertainty=False)
Definition: plotting.py:149
ntuplePlotting.draw
def draw(name, histos, styles=_defaultStyles, legendLabels=[], **kwargs)
Definition: ntuplePlotting.py:25
beamerCreator.create
def create(alignables, pedeDump, additionalData, outputFile, config)
Definition: beamerCreator.py:44
plotting._findBounds
def _findBounds(th1s, ylog, xmin=None, xmax=None, ymin=None, ymax=None)
Definition: plotting.py:460
clone
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
plotting._th1IncludeOnlyBins
def _th1IncludeOnlyBins(histos, xbinlabels)
Definition: plotting.py:745
getName
TString getName(TString structure, int layer, TString geometry)
Definition: DMRtrends.cc:235
str
#define str(s)
Definition: TestProcessor.cc:52
plotting._th1RemoveEmptyBins
def _th1RemoveEmptyBins(histos, xbinlabels)
Definition: plotting.py:608
style
Definition: style.py:1
pixelCPEforGPU::Frame
SOAFrame< float > Frame
Definition: pixelCPEforGPU.h:16
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
Exception
mps_setup.append
append
Definition: mps_setup.py:85
plotting._mergeBinLabelsY
def _mergeBinLabelsY(histos)
Definition: plotting.py:711
ComparisonHelper::zip
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
Definition: L1TStage2CaloLayer1.h:41
plotting._getOrCreateObject
def _getOrCreateObject(tdirectory, nameOrCreator)
Definition: plotting.py:58
format
plotting._findBoundsY
def _findBoundsY(th1s, ylog, ymin=None, ymax=None, coverage=None, coverageRange=None)
Definition: plotting.py:528
genParticles_cff.map
map
Definition: genParticles_cff.py:11