diff --git a/scripts/acoustics.py b/scripts/acoustics.py index b3b4ab5cec189773f9acd7aa7a91adb3bb6c837d..0a52b7efb631a0e75b433b138e2c2e6933e6f648 100644 --- a/scripts/acoustics.py +++ b/scripts/acoustics.py @@ -8,7 +8,8 @@ Usage: acoustics.py (-h | --help) Options: - -d DET_ID Detector ID + -d DET_ID Detector ID + -ndu N_DUS Number of DUs -o PLOT_DIR The directory to save the plot -h --help Show this screen. @@ -24,30 +25,33 @@ from datetime import datetime import km3pipe as kp + +def diff(first, second): + second = set(second) + return [item for item in first if item not in second] + + 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('-ndu', dest = 'n_dus', type = int, nargs = 1, required = True, + help = 'Number of DUs (e.g. 5)') 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] +N_DUS = args.n_dus[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) - - 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,6 +60,7 @@ 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] @@ -165,40 +170,27 @@ 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) @@ -209,22 +201,11 @@ while check: CustomCmap = matplotlib.colors.ListedColormap(colorsList) 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([]) @@ -232,30 +213,25 @@ while check: 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.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 print(check_time) - - + time.sleep(abs(TIT - check_time)) check = True