Code siehe hier:
Code: Alles auswählen
from pyexcel import *
import gc
import math
import numpy as num
import copy
import datetime
class calstat():
def __init__(self,calfile): # läuft perfekt durch
wbread=Workbook(False,calfile)
self.Arange={}
self.Brange={}
self.Crange={}
self.Srange={}
self.Overload={}
self.PAR={}
self.SN=wbread.ReadCell('iSAR',5,6)
date=wbread.ReadCell('iSAR',6,6)
year=int(date/365.252252252252)+1899
day=int((date/365.252252252252-int(date/365.252252252252))*365.252252252252)
self.date=datetime.date(year,12,31)+datetime.timedelta(days=day)
Aarray=num.zeros([256])
for ws in range(1,wbread.CountWorksheets()+1):
calstate=wbread.ReadCell(ws,3,5) #check if it is a calibration sheet (3E=256)
if calstate==256:
freq=str(int(wbread.ReadCell(ws,6,5)))
modname=wbread.ReadCell(ws,10,5)
levels=wbread.ReadCell(ws,9,5)
self.Overload[modname]=wbread.ReadCell(ws,14,5)
colA=int(6+levels*2)
colB=int(colA+1)
colC=int(colB+1)
#print colA,colB,colC
if modname=='CW':
#Arange=wbread.ReadCol(ws,colA)
Aread=wbread.ReadCol(ws,colA)
for a in range(256):
Aarray[a]=Aread[a,0]
self.Arange[freq]=copy.copy(Aarray) # needs to be copied, for not to be a pointer
if levels==7:
self.Brange[modname]=wbread.ReadCol(ws,colB)
self.Crange[modname]=wbread.ReadCol(ws,colC)
#data has to be called as self.Brange['CW'][1,0]
wbread.Close()
def readreference(self,sensortype,Gel):
#sensortype: old, new, FXX
#Gel: HSL, MSL
BCfile='../input/'+sensortype+'_'+Gel+'_mod.csv'
BC=num.loadtxt(BCfile,dtype='S20',delimiter=';',skiprows=3)
self.BCref={}
for bci in range(num.size(BC,0)):
self.BCref[BC[bci,0]]=BC[bci,1:5]
def curveErrors(self,modname): # Diese Funktion ist die welche Probleme macht
eSARV=num.array([0.019,0.049,0.115,0.246,0.495,0.732,1.067])*(10**(self.Overload[modname]/10))
eSARdbsensor=num.zeros([7])
eSARdBrefx=num.zeros([7])
eSARdBrefy=num.zeros([7])
errorvalues=num.zeros([256])
A=13.9
#ref points
for k in range(7):
#print "for1"+str(k)
eSARdBrefx[k]=A+10*math.log10(eSARV[k])+float(str(self.BCref[modname][0]))*math.log10(1+float(str(self.BCref[modname][1]))+eSARV[k])
eSARdBrefy[k]=A+10*math.log10(iSARV[k])+float(str(self.BCref[modname][2]))*math.log10(1+float(str(self.BCref[modname][3]))+eSARV[k])
#sensors
for s in range(256):
print "for2"+str(s)
for k in range(7): #Manchmal bleibt der Code hier hängen
iSARdbsensor[k]=A+10*math.log10(iSARV[k])+self.Brange[modname][s,0]*math.log10(1+self.Crange[modname][s,0]+eSARV[k])
if s%2==0:
print "if" #Manchmal bleibt der Code hier hängen
errorvalues[s]=math.sqrt(sum((eSARdbsensor-eSARdBrefx)**2)/7)
else:
print "else" #Manchmal bleibt der Code hier hängen
errorvalues[s]=math.sqrt(sum((eSARdbsensor-eSARdBrefy)**2)/7)
self.Srange[modname]=errorvalues