Source code for calibration.TemperatureCalibration
import sys
import numpy as np
import csv
import os
import argparse
[docs]def TemperatureCalibration(csvFile):
"""Calculates temperature calibration offsets (coeff_illum, coeff_sensor), taking csv file as input.
Takes a CSV file containing phase values at temperatures for illumination and sensor. Gives coeff_illum and coeff_sensor as output
Uses a least squares fit to compute temperature calibration
"""
if not os.path.exists(csvFile):
print ("Invalid Filename")
sys.exit()
tSensor = []
tIllum = []
phaseCorr1 = []
with open(csvFile, 'rb') as f:
reader = csv.reader(f)
for row in reader:
tIllum.append(float(row[0]))
tSensor.append(float(row[1]))
phaseCorr1.append(float(row[2]))
tSensor = np.array(tSensor)
tIllum = np.array(tIllum)
phaseCorr1 = np.array(phaseCorr1)
tSensorCalib = tSensor[0]
tIllumCalib = tIllum[0]
phaseCorr1Calib = phaseCorr1[0]
tSensor -= tSensorCalib
tIllum -= tIllumCalib
phaseCorr1 -= phaseCorr1Calib
A = np.c_[tSensor,tIllum]
coeff_sensor,coeff_illum = np.linalg.lstsq(A, phaseCorr1)[0]
calibPrec = 1
coeff_illum *= 16
coeff_sensor *= 16
if coeff_illum > 2047 or coeff_illum < -2048 or coeff_sensor > 2047 or coeff_sensor < -2048:
calibPrec = 0
coeff_sensor /= 16
coeff_illum /= 16
return True, round(coeff_illum), round(coeff_sensor), calibPrec
[docs]def parseArgs (args = None):
parser = argparse.ArgumentParser(description='Calculate Temperature Calibration Offsets')
parser.add_argument('-f', '--file', help = 'FilePath', required = 'True', default= None)
return parser.parse_args(args)
if __name__ == '__main__':
val = parseArgs(sys.argv[1:])
try:
ret = TemperatureCalibration(val.file)
boo, coeff_illum, coeff_sensor, calibPrec = ret
print ("coeff_illum = %d\ncoeff_senosr = %d\ncalib_prec = %d\n"%(coeff_illum, coeff_sensor, calibPrec))
except Exception, e:
print e
sys.exit()