Skip to content
Snippets Groups Projects
Commit 45b972f5 authored by Tamas Gal's avatar Tamas Gal :speech_balloon:
Browse files

Calibrate all DUs

parent f5a6f34a
No related branches found
No related tags found
No related merge requests found
...@@ -44,7 +44,7 @@ class CalibrateAHRS(kp.Module): ...@@ -44,7 +44,7 @@ class CalibrateAHRS(kp.Module):
self.plots_path = self.require('plots_path') self.plots_path = self.require('plots_path')
det_id = self.require('det_id') det_id = self.require('det_id')
self.detector = kp.hardware.Detector(det_id=det_id) self.detector = kp.hardware.Detector(det_id=det_id)
self.du = self.get('du', default=1) self.dus = self.detector.dus
self.clbmap = kp.db.CLBMap(det_oid=det_id) self.clbmap = kp.db.CLBMap(det_oid=det_id)
...@@ -52,10 +52,13 @@ class CalibrateAHRS(kp.Module): ...@@ -52,10 +52,13 @@ class CalibrateAHRS(kp.Module):
self.cuckoo_log = kp.time.Cuckoo(10, print) self.cuckoo_log = kp.time.Cuckoo(10, print)
self.data = {} self.data = {}
queue_size = 50000 queue_size = 50000
for ahrs_param in ('yaw', 'pitch', 'roll'): for du in self.dus:
self.data[ahrs_param] = defaultdict( self.data[du] = {}
for ahrs_param in ('yaw', 'pitch', 'roll'):
self.data[du][ahrs_param] = defaultdict(
partial(deque, maxlen=queue_size))
self.data[du]['times'] = defaultdict(
partial(deque, maxlen=queue_size)) partial(deque, maxlen=queue_size))
self.times = defaultdict(partial(deque, maxlen=queue_size))
self.lock = threading.Lock() self.lock = threading.Lock()
self.index = 0 self.index = 0
...@@ -71,23 +74,22 @@ class CalibrateAHRS(kp.Module): ...@@ -71,23 +74,22 @@ class CalibrateAHRS(kp.Module):
self.log.info("Skipping base CLB") self.log.info("Skipping base CLB")
return blob return blob
if clb.du != self.du:
return blob
yaw = tmch_data.yaw yaw = tmch_data.yaw
calib = get_latest_ahrs_calibration(clb.upi, max_version=4) calib = get_latest_ahrs_calibration(clb.upi, max_version=4)
if calib is None: if calib is None:
self.log.warning("No calibration found for CLB UPI '%s'", clb.upi)
return blob return blob
du = clb.du
cyaw, cpitch, croll = fit_ahrs(tmch_data.A, tmch_data.H, *calib) cyaw, cpitch, croll = fit_ahrs(tmch_data.A, tmch_data.H, *calib)
self.cuckoo_log("DU{}-DOM{} (random pick): calibrated yaw={}".format( self.cuckoo_log("DU{}-DOM{} (random pick): calibrated yaw={}".format(
clb.du, clb.floor, cyaw)) clb.du, clb.floor, cyaw))
with self.lock: with self.lock:
self.data['yaw'][clb.floor].append(cyaw) self.data[du]['yaw'][clb.floor].append(cyaw)
self.data['pitch'][clb.floor].append(cpitch) self.data[du]['pitch'][clb.floor].append(cpitch)
self.data['roll'][clb.floor].append(croll) self.data[du]['roll'][clb.floor].append(croll)
self.times[clb.floor].append(now) self.data[du]['times'][clb.floor].append(now)
self.cuckoo.msg() self.cuckoo.msg()
return blob return blob
...@@ -96,30 +98,33 @@ class CalibrateAHRS(kp.Module): ...@@ -96,30 +98,33 @@ class CalibrateAHRS(kp.Module):
print(self.__class__.__name__ + ": updating plot.") print(self.__class__.__name__ + ": updating plot.")
# xfmt = md.DateFormatter('%Y-%m-%d %H:%M') # xfmt = md.DateFormatter('%Y-%m-%d %H:%M')
xfmt = md.DateFormatter('%H:%M') xfmt = md.DateFormatter('%H:%M')
for ahrs_param in self.data.keys(): for du in self.dus:
fig, ax = plt.subplots(figsize=(16, 6)) data = self.data[du]
sns.set_palette("husl", 18) for ahrs_param in data.keys():
ax.set_title("AHRS {} Calibration on DU{}\n{}".format( fig, ax = plt.subplots(figsize=(16, 6))
ahrs_param, self.du, datetime.utcnow())) sns.set_palette("husl", 18)
ax.set_xlabel("UTC time") ax.set_title("AHRS {} Calibration on DU{}\n{}".format(
ax.xaxis.set_major_formatter(xfmt) ahrs_param, du, datetime.utcnow()))
ax.set_ylabel(ahrs_param) ax.set_xlabel("UTC time")
with self.lock: ax.xaxis.set_major_formatter(xfmt)
for floor in sorted(self.data[ahrs_param].keys()): ax.set_ylabel(ahrs_param)
ax.plot( with self.lock:
self.times[floor], for floor in sorted(data[ahrs_param].keys()):
self.data[ahrs_param][floor], ax.plot(data['times'][floor],
marker='.', data[ahrs_param][floor],
linestyle='none', marker='.',
label="Floor {}".format(floor)) linestyle='none',
lgd = plt.legend( label="Floor {}".format(floor))
bbox_to_anchor=(1.005, 1), loc=2, borderaxespad=0.) lgd = plt.legend(bbox_to_anchor=(1.005, 1),
fig.tight_layout() loc=2,
plt.savefig( borderaxespad=0.)
os.path.join(self.plots_path, ahrs_param + '_calib.png'), fig.tight_layout()
bbox_extra_artists=(lgd, ), plt.savefig(os.path.join(
bbox_inches='tight') self.plots_path,
plt.close('all') ahrs_param + '_calib_du{}.png'.format(du)),
bbox_extra_artists=(lgd, ),
bbox_inches='tight')
plt.close('all')
def main(): def main():
...@@ -132,13 +137,12 @@ def main(): ...@@ -132,13 +137,12 @@ def main():
ligier_port = int(args['-p']) ligier_port = int(args['-p'])
pipe = kp.Pipeline() pipe = kp.Pipeline()
pipe.attach( pipe.attach(kp.io.ch.CHPump,
kp.io.ch.CHPump, host=ligier_ip,
host=ligier_ip, port=ligier_port,
port=ligier_port, tags='IO_MONIT',
tags='IO_MONIT', timeout=60 * 60 * 24 * 7,
timeout=60 * 60 * 24 * 7, max_queue=2000)
max_queue=2000)
pipe.attach(kp.io.daq.DAQProcessor) pipe.attach(kp.io.daq.DAQProcessor)
pipe.attach(CalibrateAHRS, det_id=det_id, plots_path=plots_path) pipe.attach(CalibrateAHRS, det_id=det_id, plots_path=plots_path)
pipe.drain() pipe.drain()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment