Skip to content
Snippets Groups Projects

Add acoustics monitoring

Merged Carlo Guidi requested to merge cguidi/km3mon:undefined into master
Compare and Show latest version
1 file
+ 54
87
Compare changes
  • Side-by-side
  • Inline
+ 54
87
@@ -8,46 +8,42 @@ Usage:
acoustics.py (-h | --help)
Options:
-d DET_ID Detector ID
-d DET_ID Detector ID
-n N_DUS Number of DUs
-o PLOT_DIR The directory to save the plot
-h --help Show this screen.
"""
import numpy as np
import matplotlib.pyplot as plt
import argparse
import time
import os
import matplotlib
from matplotlib import colors
from datetime import datetime
from docopt import docopt
import km3pipe as kp
parser = argparse.ArgumentParser(description='Online_monitoring')
parser.add_argument('-d', dest='det_id', type=str, nargs=1, required=True,
help='The detector ID (e.g. D_ORCA005)')
parser.add_argument('-o', dest='plot_dir', type=str, nargs=1, required=True,
help='Directory in which the plot is saved')
args = parser.parse_args()
detid = args.det_id[0]
directory = args.plot_dir[0]
def diff(first, second):
second = set(second)
return [item for item in first if item not in second]
db = kp.db.DBManager()
sds = kp.db.StreamDS()
table=db.run_table(detid)
args = docopt(__doc__)
detid = args['-d']
directory = args['-o']
N_DUS = args['-n']
N_DUS = int(N_DUS)
db = kp.db.DBManager()
sds = kp.db.StreamDS()
ACOUSTIC_BEACONS = [12, 14, 16]
N_DOMS = 18
N_ABS=3
DOMS = range(N_DOMS + 1)
N_DUS = 5
DUS = range(1, N_DUS + 1)
TIT = 600 # Time Interval between Trains of acoustic pulses)
@@ -56,13 +52,14 @@ SSW = 160 # Signal Security Window (Window size with signal)
check = True
while check:
table = db.run_table(detid)
minrun = table["RUN"][len(table["RUN"]) - 1]
ind, = np.where((table["RUN"] == minrun))
mintime1 = table['UNIXSTARTTIME'][ind]
mintime = mintime1.values
maxrun = table["RUN"][len(table["RUN"]) - 1]
now = time.time()
if (now-mintime/1000) < TIT:
if (now - mintime/1000) < TIT:
minrun = table["RUN"][len(table["RUN"]) - 1] - 1
print(now)
@@ -73,7 +70,7 @@ while check:
for dom in DOMS:
try:
domID = db.doms.via_omkey((du, dom), detid).dom_id
toas_all = sds.toashort(detid=detid, minrun=minrun, maxrun=maxrun, domid=domID, emitterid=ab)
toas_all = sds.toashort(detid = detid, minrun = minrun, maxrun = maxrun, domid = domID, emitterid = ab)
QF_abdom = toas_all["QUALITYFACTOR"]
UTB_abdom = toas_all["UNIXTIMEBASE"]
@@ -124,7 +121,7 @@ while check:
if len(QF_second) > 11:
QF_second = np.array(QF_second)
QF_third = [k for k in QF_second if (np.where(QF_second == k)[0][0]<11)]
QF_third = [k for k in QF_second if (np.where(QF_second == k)[0][0] < 11)]
else:
QF_third = QF_second
@@ -139,11 +136,11 @@ while check:
Q.append(np.where(SIGNAL_OLD == QF_fourth[q])[0][0])
UTB_fourth = np.array(UTB_SIGNAL.tolist())[Q]
UTB_fourth_l = UTB_fourth.tolist()
D=[]
D = []
for g in np.arange(len(UTB_fourth_l)):
if ((np.mod((UTB_fourth_l[g] - UTB_fourth_l[0]), 5) > 0.5 and np.mod((UTB_fourth_l[g] - UTB_fourth_l[0]), 5) < 4.5) or (np.mod((UTB_fourth_l[g] - UTB_fourth_l[0]), 5)>5)):
D.append(g)
for d in sorted(D, reverse=True):
for d in sorted(D, reverse = True):
del QF_fourth[d]
QF_fifth = QF_fourth
QF_OK = QF_fifth
@@ -165,98 +162,68 @@ while check:
N_Pulses_Indicator.append(N_Pulses_Indicator_DU)
fig = plt.figure()
ax = fig.add_subplot(111)
N_doms = 18
doms = range(N_doms + 1)
L = len(doms)
du1AB1 = 0.9*np.ones(L)
du1AB2 = 1*np.ones(L)
du1AB3 = 1.1*np.ones(L)
du2AB1 = 1.9*np.ones(L)
du2AB2 = 2*np.ones(L)
du2AB3 = 2.1*np.ones(L)
du3AB1 = 2.9*np.ones(L)
du3AB2 = 3*np.ones(L)
du3AB3 = 3.1*np.ones(L)
du4AB1 = 3.9*np.ones(L)
du4AB2 = 4*np.ones(L)
du4AB3 = 4.1*np.ones(L)
du5AB1 = 4.9*np.ones(L)
du5AB2 = 5*np.ones(L)
du5AB3 = 5.1*np.ones(L)
DU1 = np.array(N_Pulses_Indicator[0])
DU2 = np.array(N_Pulses_Indicator[1])
DU3 = np.array(N_Pulses_Indicator[2])
DU4 = np.array(N_Pulses_Indicator[3])
DU5 = np.array(N_Pulses_Indicator[4])
ind = np.where(DU2 < 1000)
duab = []
DUs = []
for du in range(N_DUS):
duabdu = []
duab1 = (du+0.9)*np.ones(L)
duab2 = (du+1)*np.ones(L)
duab3 = (du+1.1)*np.ones(L)
duabdu.append(duab1)
duabdu.append(duab2)
duabdu.append(duab3)
duab.append(duabdu)
DUs.append(np.array(N_Pulses_Indicator[du]))
ind = np.where(DUs[1] < 1000)
iAB1 = np.where(ind[0] < L)
iAB2_up = np.where(ind[0] > (L - 1))
iAB2_down = np.where(ind[0] < 2*L)
iAB2 = np.intersect1d(iAB2_up, iAB2_down)
iAB3 = np.where(ind[0] > (2*L - 1))
colorsList = [(0, 0, 0),(1, 0.3, 0),(1, 1, 0),(0.2, 0.9, 0)]
colorsList = [(0, 0, 0), (1, 0.3, 0), (1, 1, 0), (0.2, 0.9, 0)]
CustomCmap = matplotlib.colors.ListedColormap(colorsList)
bounds=[-2, -1, 0, 1, 2]
bounds = [-2, -1, 0, 1, 2]
norma = colors.BoundaryNorm(bounds, CustomCmap.N)
color = ax.scatter(du1AB1, doms, s = 20, c = DU1[iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du1AB2, doms, s = 20, c = DU1[iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du1AB3, doms, s = 20, c = DU1[iAB3], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du2AB1, doms, s = 20, c = DU2[iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du2AB2, doms, s = 20, c = DU2[iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du2AB3, doms, s = 20, c = DU2[iAB3], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du3AB1, doms, s = 20, c = DU3[iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du3AB2, doms, s = 20, c = DU3[iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du3AB3, doms, s = 20, c = DU3[iAB3], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du4AB1, doms, s = 20, c = DU4[iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du4AB2, doms, s = 20, c = DU4[iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du4AB3, doms, s = 20, c = DU4[iAB3], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du5AB1, doms, s = 20, c = DU5[iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du5AB2, doms, s = 20, c = DU5[iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(du5AB3, doms, s = 20, c = DU5[iAB3], norm=norma, marker = 's', cmap = CustomCmap);
for du in range(N_DUS):
for ab in range(N_ABS):
color = ax.scatter(duab[du][ab], doms, s = 20, c = DUs[du][iAB1], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(duab[du][ab], doms, s = 20, c = DUs[du][iAB2], norm=norma, marker = 's', cmap = CustomCmap);
color = ax.scatter(duab[du][ab], doms, s = 20, c = DUs[du][iAB3], norm=norma, marker = 's', cmap = CustomCmap);
cbar = plt.colorbar(color)
cbar.ax.get_yaxis().set_ticks([])
for j, lab in enumerate(['$0. pings$', '$1-3 pings$', '$4-7 pings$', '$>7. pings$']):
cbar.ax.text(3.5, (2 * j + 1)/8.0, lab, ha='center', va='center')
cbar.ax.text(3.5, (2*j + 1)/8.0, lab, ha = 'center', va = 'center')
cbar.ax.get_yaxis().labelpad = 18
matplotlib.pyplot.xticks(np.arange(1, 6, step=1))
matplotlib.pyplot.yticks(np.arange(0, 19, step=1))
matplotlib.pyplot.grid(color='k', linestyle='-', linewidth=0.2)
ax.set_xlabel('DUs', fontsize=18)
ax.set_ylabel('Floors', fontsize=18)
ts = now+3600
matplotlib.pyplot.xticks(np.arange(1, N_DUS + 1, step = 1))
matplotlib.pyplot.yticks(np.arange(0, 19, step = 1))
matplotlib.pyplot.grid(color = 'k', linestyle = '-', linewidth = 0.2)
ax.set_xlabel('DUs', fontsize = 18)
ax.set_ylabel('Floors', fontsize = 18)
ts = now + 3600
DATE = datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
ax.set_title(r' %.16s Detection of the pings emitted by autonomous beacons' %DATE, fontsize=10)
# plt.show()
ax.set_title(r' %.16s Detection of the pings emitted by autonomous beacons' %DATE, fontsize = 10)
my_path = os.path.abspath(directory)
my_file = 'Online_Acoustic_Monitoring.png'
fig.savefig(os.path.join(my_path, my_file))
print(time.time())
check = False
check_time=time.time() - now
check_time = time.time() - now
print(check_time)
time.sleep(abs(TIT - check_time))
check = True
check = True
Loading