| 1 | # $Id: tallyData.py,v 1.2 2003/06/16 17:06:44 dressel Exp $
|
|---|
| 2 | # -------------------------------------------------------------------
|
|---|
| 3 | # GEANT4 tag $Name: $
|
|---|
| 4 | # -------------------------------------------------------------------
|
|---|
| 5 | #
|
|---|
| 6 |
|
|---|
| 7 | class MeasureData:
|
|---|
| 8 | def __init__(self, entries, mean, sum, sumSquared, variance):
|
|---|
| 9 | self.entries = entries
|
|---|
| 10 | self.mean = mean
|
|---|
| 11 | self.sum = sum
|
|---|
| 12 | self.sumSquared = sumSquared
|
|---|
| 13 | self.variance = variance
|
|---|
| 14 |
|
|---|
| 15 | def __iadd__(self,m):
|
|---|
| 16 | self.entries += m.entries
|
|---|
| 17 | self.sum += m.sum
|
|---|
| 18 | self.sumSquared += m.sumSquared
|
|---|
| 19 | self.mean = self.getMean()
|
|---|
| 20 | self.variance = self.getVariance()
|
|---|
| 21 | return self
|
|---|
| 22 |
|
|---|
| 23 | def __add__(self,b):
|
|---|
| 24 | c = MeasureData(self.entries,
|
|---|
| 25 | self.mean,
|
|---|
| 26 | self.sum,
|
|---|
| 27 | self.sumSquared,
|
|---|
| 28 | self.variance)
|
|---|
| 29 | c+=b
|
|---|
| 30 | return c
|
|---|
| 31 |
|
|---|
| 32 | def getMean(self):
|
|---|
| 33 | return 1.0 * self.sum / self.entries
|
|---|
| 34 |
|
|---|
| 35 | def getVariance(self):
|
|---|
| 36 | n = 0
|
|---|
| 37 | f = 0
|
|---|
| 38 | if self.entries > 1:
|
|---|
| 39 | mean = self.getMean()
|
|---|
| 40 | n = 1.0 * self.entries/(self.entries -1)
|
|---|
| 41 | f = 1.0 * self.sumSquared/self.entries - mean*mean
|
|---|
| 42 | return n * f
|
|---|
| 43 |
|
|---|
| 44 |
|
|---|
| 45 |
|
|---|
| 46 | class TallyData:
|
|---|
| 47 | def __init__(self, binEdges, measures):
|
|---|
| 48 | self.binEdges = binEdges
|
|---|
| 49 | self.measures = measures
|
|---|
| 50 |
|
|---|
| 51 | def addMeasures(self, tally):
|
|---|
| 52 | if tally.binEdges != self.binEdges:
|
|---|
| 53 | print "TallyData.addMeasures: tally.binEdges != self.binEdges"
|
|---|
| 54 | else:
|
|---|
| 55 | for i in range(len(self.measures)):
|
|---|
| 56 | self.measures[i] += tally.measures[i]
|
|---|
| 57 |
|
|---|
| 58 |
|
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 | def createTallyDat(tally):
|
|---|
| 63 | measures = []
|
|---|
| 64 | for i in range(tally.size()):
|
|---|
| 65 | m = tally.measure(i)
|
|---|
| 66 | measures.append(MeasureData(m.GetEntries(),
|
|---|
| 67 | m.GetMean(),
|
|---|
| 68 | m.GetSum(),
|
|---|
| 69 | m.GetSumSquared(),
|
|---|
| 70 | m.GetVariance()))
|
|---|
| 71 | t = TallyData(tally.binEdges(), measures)
|
|---|
| 72 | return t
|
|---|