153 lines
7.2 KiB
Python
153 lines
7.2 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.dates as mdates
|
|
from IPython import embed
|
|
import helper_functions as hf
|
|
import os
|
|
import datetime
|
|
import time
|
|
import pandas as pd
|
|
|
|
if __name__ == '__main__':
|
|
|
|
###################################################################################################################
|
|
# load data
|
|
###################################################################################################################
|
|
# load all the data of one day
|
|
start = time.time()
|
|
|
|
filename = sorted(os.listdir('../../../data/'))[6]
|
|
|
|
ident = np.load('../../../data/'+filename+'/all_ident_v.npy', allow_pickle=True)
|
|
power = np.load('../../../data/'+filename+'/all_sign_v.npy', allow_pickle=True)
|
|
freq = np.load('../../../data/'+filename+'/all_fund_v.npy', allow_pickle=True)
|
|
timeidx = np.load('../../../data/'+filename+'/all_idx_v.npy', allow_pickle=True)
|
|
realtime = np.load('../../../data/'+filename+'/all_times.npy', allow_pickle=True)
|
|
temp = pd.read_csv('../../../data/' + filename + '/temperatures.csv', sep=';')
|
|
temp_l = np.array(temp.values.tolist())
|
|
|
|
aifl = np.load('../data/'+filename+'/aifl2.npy', allow_pickle=True)
|
|
end = time.time()
|
|
print(end - start)
|
|
###################################################################################################################
|
|
# parameter and variables
|
|
###################################################################################################################
|
|
# lists
|
|
fish_in_aifl = list(np.unique(np.where(~np.isnan(aifl[:, :, 0]))[1]))
|
|
|
|
# variables and empty lists
|
|
sampling_rate = 1 / np.diff(realtime)[0] # in sec
|
|
# ipp
|
|
power_means = []
|
|
all_ipp = []
|
|
all_xtickses = []
|
|
all_run_mean = []
|
|
all_run_std = []
|
|
all_Ctime_gesamt = []
|
|
all_max_ch = []
|
|
all_hms = []
|
|
thresholds = np.full(3, np.nan)
|
|
|
|
###################################################################################################################
|
|
# analysis
|
|
###################################################################################################################
|
|
|
|
for fish_number in fish_in_aifl:
|
|
|
|
###############################################################################################################
|
|
# power cube: 1 dim: different channel for different traces
|
|
# 2 dim: time dimension
|
|
# 3 dim: again channel but in this direction the power of the traces of one channel are written into
|
|
power_cube = np.full([16, len(realtime), 16], np.nan)
|
|
|
|
for channel in range(16):
|
|
fish_IDs = aifl[channel, fish_number, ~np.isnan(aifl[channel, fish_number])]
|
|
for len_idx1 in range(len(fish_IDs)):
|
|
ID = fish_IDs[len_idx1]
|
|
t = timeidx[channel][ident[channel] == ID]
|
|
p = power[channel][ident[channel] == ID]
|
|
power_cube[channel, t] = p
|
|
|
|
###############################################################################################################
|
|
# interpolated power pancake = ipp, heatmap of the trajectory of the fish over the time (2 dimension) and
|
|
# channels (1. dimension)
|
|
power_pancake = np.nanmax(power_cube, axis=0)
|
|
Ctime = realtime[~np.isnan(power_pancake[:, 0])]
|
|
all_Ctime = realtime[int(np.where(realtime == Ctime[0])[0]):int(np.where(realtime == Ctime[-1])[0] + 1)]
|
|
Cpancake = power_pancake[~np.isnan(power_pancake[:, 0])]
|
|
|
|
try:
|
|
ipp = np.array(list(map(lambda x: np.interp(all_Ctime, Ctime, x), Cpancake.T))).T
|
|
except:
|
|
continue
|
|
all_ipp.append(ipp)
|
|
all_Ctime_gesamt.append(all_Ctime)
|
|
|
|
###############################################################################################################
|
|
# trajectories (channel) of the fish over time by using the maximum power on each time point
|
|
max_ch = np.argmax(ipp, axis=1)
|
|
all_max_ch.append(max_ch)
|
|
|
|
###############################################################################################################
|
|
# power means of each fish
|
|
power_means.append(np.mean(ipp[range(len(max_ch)), max_ch]))
|
|
|
|
###############################################################################################################
|
|
# all x ticks of the fish in datetime format
|
|
datetime_v = []
|
|
# hour minutes seconds vector
|
|
hms = []
|
|
dt = datetime.datetime.strptime(filename[-5:], '%H_%M')
|
|
for i in list(np.arange(int(np.where(realtime == Ctime[0])[0]), int(np.where(realtime == Ctime[-1])[0] + 1))):
|
|
current_time = dt + datetime.timedelta(seconds=realtime[i]) # converts the time point in datetime points
|
|
datetime_v.append(current_time)
|
|
hms.append(current_time.hour * 60 * 60 + current_time.minute * 60 + current_time.second +
|
|
float('0.' + str(current_time.microsecond))) # converts the time points into a second format
|
|
|
|
x_tickses = mdates.date2num(datetime_v)
|
|
all_xtickses.append(x_tickses)
|
|
all_hms.append(np.array(hms))
|
|
|
|
###############################################################################################################
|
|
# running mean and std
|
|
# run_mean, run_std = hf.running_3binsizes(ipp, sampling_rate)
|
|
# TODO: not absolute max, instead average of the three strongest channel
|
|
# bin_size = int(np.floor((Ctime[-1]-Ctime[0])/50))
|
|
#
|
|
# max_ch_mean = np.full([len(max_ch)], np.nan)
|
|
# for i in range(int(len(max_ch)-np.floor(bin_size))):
|
|
# max_ch_mean[int(i + np.floor(bin_size / 2))] = np.mean(max_ch[i:bin_size + i])
|
|
|
|
# all_run_mean.append(run_mean)
|
|
# all_run_std.append(run_std)
|
|
|
|
###############################################################################################################
|
|
# threshold for the activity -- OUT DATED!!!!!!
|
|
# rs = np.array(all_run_std)
|
|
#
|
|
# for idx in range(3):
|
|
# rs1 = np.hstack(rs[:, idx])
|
|
# rs1 = rs1[~np.isnan(rs1)]
|
|
# rs1 = rs1[rs1>0]
|
|
# print(np.percentile(rs1, [5, 95, 50]))
|
|
# thresholds[idx] = np.percentile(rs1, 50)
|
|
###################################################################################################################
|
|
# save
|
|
###################################################################################################################
|
|
if filename not in os.listdir('../data/'):
|
|
os.mkdir('../data/'+filename)
|
|
|
|
np.save('../data/' + filename + '/all_Ctime_v.npy', all_Ctime_gesamt)
|
|
np.save('../data/' + filename + '/all_max_ch.npy', all_max_ch)
|
|
# np.save('../data/' + filename + '/all_run_mean.npy', all_run_mean)
|
|
# np.save('../data/' + filename + '/all_run_std.npy', all_run_std)
|
|
# np.save('../data/' + filename + '/thresholds.npy', thresholds)
|
|
np.save('../data/' + filename + '/all_xtickses.npy', all_xtickses)
|
|
np.save('../data/' + filename + '/all_ipp.npy', all_ipp)
|
|
np.save('../data/' + filename + '/power_means.npy', power_means)
|
|
np.save('../data/' + filename + '/all_hms.npy', all_hms)
|
|
|
|
|
|
embed()
|
|
quit()
|