Source code for diaGrabber.source.methods.calc
# -*- coding: utf-8 *-*
'''Includes all classes for calculations for off-the-reel-taken-values of a source-class'''
[docs]class mean:
'''
calc. the mean of the last n values
:param n: number of the last values to calc the mean from
:type n: int
'''
def __init__(self,n):
self.value = 0.0
self.quantity = 0#number of middles values so far
self.maxQuantity = n # middle until this quantity is reached
def _get(self,new_value):
##dependent to the size of the cluster (v = old + (new-old)/size_cluser))
if self.quantity < self.maxQuantity:
self.quantity += 1
self.value += (new_value - self.value) / self.quantity
def _clean(self):
self.value = 0.0
self.quantity = 0
[docs]class delta:
'''calc. the mean-difference of the last n values
:param n: number of the last values to calc the mean from
:type n: int
'''
def __init__(self,n):
self.last_value = 0.0
self.value = 0.0#last delta
self.quantity = 0.0#number of middles values so far
self.maxQuantity = float(n) # middle until this quantity is reached
def _get(self,new_value):
##dependent to the size of the cluster (v = old + (new-old)/size_cluser))
delta = new_value-self.last_value
self.last_value = new_value
if self.quantity < self.maxQuantity:
self.quantity += 1
self.value += (delta - self.value) / self.quantity
def _clean(self):
self.last_value = 0.0
self.value = 0.0
self.quantity = 0
[docs]class divideCalcClasses:
'''
divide the last calulated values of two given calc-classes
:param upperCalcClass: foo
:type upperCalcClass: class of type :mod:`diaGrabber.methods.calc`
:param lowerCalcClass: foo
:type lowerCalcClass: class of type :mod:`diaGrabber.methods.calc`
In this case the derivate d(dim1)/d(dim2) middled for the last 10
valued will be calculated
This procedure will only work if both dimensions are in merge or basis.
fooooo
use it like this::
dim1 = myFile.basisDimension(...) # or mergeDimension
dim1.appendCalc(calc.delta(10))
dim2 = myFile.basisDimension(...)
dim2.appendCalc(calc.delta(10))
#<<<
dim2.appendCalc( calc.divideCalcClasses(dim1.getCalc(0), dim2.getCalc(0)) )
#>>>
'''
def __init__(self, upperCalcClass, lowerCalcClass):
self.upperCalcClass = upperCalcClass
self.lowerCalcClass = lowerCalcClass
def _get(self,new_value):
try:
self.value = self.upperCalcClass.value / self.lowerCalcClass.value
except ZeroDivisionError:
self.value = self.upperCalcClass.value / 1e-20
def _clean(self):
pass