/usr/share/cain/gui/TableHistogramFramesStatistics.py is in cain 1.9-8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | """Display population statistics in a table."""
import wx
import math
from TableBase import TableBase
def flatten(theList):
"""Flatten the list."""
result = []
for x in theList:
if hasattr(x, '__iter__') and not isinstance(x, basestring):
result.extend(flatten(x))
else:
result.append(x)
return result
class Grid(TableBase):
def __init__(self, parent, model, output):
TableBase.__init__(self, parent)
self.SetRowLabelSize(16*10)
# A row for each frame.
numberOfRows = len(output.frameTimes)
# A column for the mean and standard deviation of each recorded species.
self.resize(numberOfRows, 2 * len(output.recordedSpecies))
self.setColumnLabels(flatten([
(u'\u03bc(' + model.speciesIdentifiers[_i] + ')',
u'\u03c3(' + model.speciesIdentifiers[_i] + ')')
for _i in output.recordedSpecies]))
# For each frame.
for i in range(len(output.frameTimes)):
# Frame time.
self.SetRowLabelValue(i, str(output.frameTimes[i]))
# For each recorded species.
for j in range(len(output.recordedSpecies)):
h = output.histograms[i][j]
self.SetCellValue(i, 2 * j, '%g' % h.getMean())
if h.isVarianceDefined():
self.SetCellValue(i, 2 * j + 1,
'%g' % math.sqrt(h.getUnbiasedVariance()))
else:
self.SetCellValue(i, 2 * j + 1, '-')
class Panel(wx.Panel):
def __init__(self, parent, model, output):
wx.Panel.__init__(self, parent)
self.grid = Grid(self, model, output)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.grid, 1, wx.EXPAND)
self.SetSizer(sizer)
self.Fit()
class TableHistogramFramesStatistics(wx.Frame):
def __init__(self, model, output, title='Statistics', parent=None):
wx.Frame.__init__(self, parent, title=title, size=(600,600))
display = Panel(self, model, output)
display.grid.AutoSize()
self.Layout()
#
# Test Code.
#
if __name__ == '__main__':
from StringIO import StringIO
import sys
sys.path.insert(1, '..')
from state.HistogramFrames import HistogramFrames
from state.Model import Model
numberOfBins = 20
multiplicity = 2
recordedSpecies = [0]
output = HistogramFrames(numberOfBins, multiplicity, recordedSpecies)
output.setFrameTimes([1e20/9.])
# Poisson with mean 10. PMF = e^-lambda lambda^n / n!
poisson = [math.exp(-10)]
for n in range(1,numberOfBins):
poisson.append(poisson[-1] * 10. / n)
cardinality = len(poisson)
sumOfWeights = 1
mean = 0.
for i in range(len(poisson)):
mean += i * poisson[i]
summedSecondCenteredMoment = 0.
for i in range(len(poisson)):
summedSecondCenteredMoment += poisson[i] * (i - mean)**2
lowerBound = 0
width = 1
stream = StringIO('%r\n' * 6 % (cardinality, sumOfWeights, mean,
summedSecondCenteredMoment, lowerBound,
width) +
''.join([str(_x) + ' ' for _x in poisson]) + '\n' +
'0 ' * len(poisson) + '\n')
output.histograms[0][0].read(stream, multiplicity)
app = wx.PySimpleApp()
model = Model()
model.speciesIdentifiers = ['X']
TableHistogramFramesStatistics(model, output).Show()
app.MainLoop()
|