This commit is contained in:
weygoldt 2023-01-25 20:48:15 +01:00
commit 6b4f3a42cc
6 changed files with 207 additions and 43 deletions

View File

@ -253,7 +253,7 @@ def main(datapath: str):
ps.set_boxplot_color(bplot2, colors1)
ax2.scatter(size_diffs, size_chirps_diffs, color='r')
ax2.set_xlabel('Size difference [mm]')
ax2.set_ylabel('Chirps difference [n]')
ax2.set_ylabel('Chirps [n]')
ax3.scatter(freq_diffs, size_chirps_diffs, color='r')
# ax3.scatter(freq_diffs, freq_chirps_diffs, color='r')

View File

@ -4,6 +4,7 @@ import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr, spearmanr
from thunderfish.powerspectrum import decibel
from IPython import embed
@ -12,6 +13,7 @@ from modules.logger import makeLogger
from modules.plotstyle import PlotStyle
from modules.behaviour_handling import Behavior, correct_chasing_events
ps = PlotStyle()
logger = makeLogger(__name__)
@ -50,6 +52,7 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df):
folder_row = order_meta_df[order_meta_df['recording'] == foldername]
fish1 = folder_row['fish1'].values[0].astype(int)
fish2 = folder_row['fish2'].values[0].astype(int)
winner = folder_row['winner'].values[0].astype(int)
groub = folder_row['group'].values[0].astype(int)
size_fish1_row = id_meta_df[(id_meta_df['group'] == groub) & (
@ -59,32 +62,57 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df):
size_winners = [size_fish1_row[col].values[0]
for col in ['l1', 'l2', 'l3']]
mean_size_winner = np.nanmean(size_winners)
size_fish1 = np.nanmean(size_winners)
size_losers = [size_fish2_row[col].values[0] for col in ['l1', 'l2', 'l3']]
mean_size_loser = np.nanmean(size_losers)
size_fish2 = np.nanmean(size_losers)
if winner == fish1:
if size_fish1 > size_fish2:
size_diff_bigger = size_fish1 - size_fish2
size_diff_smaller = size_fish2 - size_fish1
elif size_fish1 < size_fish2:
size_diff_bigger = size_fish1 - size_fish2
size_diff_smaller = size_fish2 - size_fish1
else:
size_diff_bigger = np.nan
size_diff_smaller = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
if mean_size_winner > mean_size_loser:
size_diff_bigger = mean_size_winner - mean_size_loser
size_diff_smaller = mean_size_loser - mean_size_winner
winner_fish_id = folder_row['rec_id1'].values[0]
loser_fish_id = folder_row['rec_id2'].values[0]
elif mean_size_winner < mean_size_loser:
size_diff_bigger = mean_size_loser - mean_size_winner
size_diff_smaller = mean_size_winner - mean_size_loser
elif winner == fish2:
if size_fish2 > size_fish1:
size_diff_bigger = size_fish2 - size_fish1
size_diff_smaller = size_fish1 - size_fish2
elif size_fish2 < size_fish1:
size_diff_bigger = size_fish2 - size_fish1
size_diff_smaller = size_fish1 - size_fish2
else:
size_diff_bigger = np.nan
size_diff_smaller = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
winner_fish_id = folder_row['rec_id2'].values[0]
loser_fish_id = folder_row['rec_id1'].values[0]
else:
size_diff = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
size_diff_bigger = np.nan
size_diff_smaller = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id
chirp_winner = len(
Behavior.chirps[Behavior.chirps_ids == winner_fish_id])
chirp_loser = len(
Behavior.chirps[Behavior.chirps_ids == loser_fish_id])
return size_diff_bigger, chirp_winner, size_diff_smaller, chirp_loser
@ -92,27 +120,62 @@ def get_chirp_freq(folder_name, Behavior, order_meta_df):
foldername = folder_name.split('/')[-2]
folder_row = order_meta_df[order_meta_df['recording'] == foldername]
fish1 = folder_row['rec_id1'].values[0].astype(int)
fish2 = folder_row['rec_id2'].values[0].astype(int)
fish1 = folder_row['fish1'].values[0].astype(int)
fish2 = folder_row['fish2'].values[0].astype(int)
fish1_freq = folder_row['rec_id1'].values[0].astype(int)
fish2_freq = folder_row['rec_id2'].values[0].astype(int)
winner = folder_row['winner'].values[0].astype(int)
chirp_freq_fish1 = np.nanmedian(
Behavior.freq[Behavior.ident == fish1])
Behavior.freq[Behavior.ident == fish1_freq])
chirp_freq_fish2 = np.nanmedian(
Behavior.freq[Behavior.ident == fish2])
Behavior.freq[Behavior.ident == fish2_freq])
if winner == fish1:
if chirp_freq_fish1 > chirp_freq_fish2:
freq_diff_higher = chirp_freq_fish1 - chirp_freq_fish2
freq_diff_lower = chirp_freq_fish2 - chirp_freq_fish1
elif chirp_freq_fish1 < chirp_freq_fish2:
freq_diff_higher = chirp_freq_fish1 - chirp_freq_fish2
freq_diff_lower = chirp_freq_fish2 - chirp_freq_fish1
else:
freq_diff_higher = np.nan
freq_diff_lower = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
if chirp_freq_fish1 > chirp_freq_fish2:
freq_diff = chirp_freq_fish1 - chirp_freq_fish2
winner_fish_id = folder_row['rec_id1'].values[0]
loser_fish_id = folder_row['rec_id2'].values[0]
elif chirp_freq_fish1 < chirp_freq_fish2:
freq_diff = chirp_freq_fish2 - chirp_freq_fish1
elif winner == fish2:
if chirp_freq_fish2 > chirp_freq_fish1:
freq_diff_higher = chirp_freq_fish2 - chirp_freq_fish1
freq_diff_lower = chirp_freq_fish1 - chirp_freq_fish2
elif chirp_freq_fish2 < chirp_freq_fish1:
freq_diff_higher = chirp_freq_fish2 - chirp_freq_fish1
freq_diff_lower = chirp_freq_fish1 - chirp_freq_fish2
else:
freq_diff_higher = np.nan
freq_diff_lower = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
winner_fish_id = folder_row['rec_id2'].values[0]
loser_fish_id = folder_row['rec_id1'].values[0]
else:
freq_diff_higher = np.nan
freq_diff_lower = np.nan
winner_fish_id = np.nan
loser_fish_id = np.nan
chirp_diff = len(Behavior.chirps[Behavior.chirps_ids == winner_fish_id]) - len(
chirp_winner = len(
Behavior.chirps[Behavior.chirps_ids == winner_fish_id])
chirp_loser = len(
Behavior.chirps[Behavior.chirps_ids == loser_fish_id])
return freq_diff, chirp_diff
return freq_diff_higher, chirp_winner, freq_diff_lower, chirp_loser
def main(datapath: str):
@ -128,8 +191,17 @@ def main(datapath: str):
id_meta_df = read_csv(path_id_meta)
chirps_winner = []
size_diffs = []
size_chirps_diffs = []
size_diffs_winner = []
size_diffs_loser = []
size_chirps_winner = []
size_chirps_loser = []
freq_diffs_higher = []
freq_diffs_lower = []
freq_chirps_winner = []
freq_chirps_loser = []
chirps_loser = []
freq_diffs = []
freq_chirps_diffs = []
@ -151,17 +223,32 @@ def main(datapath: str):
foldername, bh, order_meta_df)
chirps_winner.append(winner_chirp)
chirps_loser.append(loser_chirp)
size_diff, chirp_diff = get_chirp_size(
size_diff_bigger, chirp_winner, size_diff_smaller, chirp_loser = get_chirp_size(
foldername, bh, order_meta_df, id_meta_df)
size_diffs.append(size_diff)
size_chirps_diffs.append(chirp_diff)
freq_diff, freq_chirps_diff = get_chirp_freq(
freq_diff_higher, chirp_freq_winner, freq_diff_lower, chirp_freq_loser = get_chirp_freq(
foldername, bh, order_meta_df)
freq_diffs.append(freq_diff)
freq_chirps_diffs.append(freq_chirps_diff)
freq_diffs_higher.append(freq_diff_higher)
freq_diffs_lower.append(freq_diff_lower)
freq_chirps_winner.append(chirp_freq_winner)
freq_chirps_loser.append(chirp_freq_loser)
if np.isnan(size_diff_bigger):
continue
size_diffs_winner.append(size_diff_bigger)
size_diffs_loser.append(size_diff_smaller)
size_chirps_winner.append(chirp_winner)
size_chirps_loser.append(chirp_loser)
embed()
size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner )
size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser )
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1,1])
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(
22*ps.cm, 12*ps.cm), sharey=True)
plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343)
scatterwinner = 1.15
scatterloser = 1.85
@ -173,9 +260,9 @@ def main(datapath: str):
bplot2 = ax1.boxplot(chirps_loser, positions=[
2], showfliers=False, patch_artist=True)
ax1.scatter(np.ones(len(chirps_winner)) *
scatterwinner, chirps_winner, color='r')
scatterwinner, chirps_winner, color=ps.red)
ax1.scatter(np.ones(len(chirps_loser)) *
scatterloser, chirps_loser, color='r')
scatterloser, chirps_loser, color=ps.orange)
ax1.set_xticklabels(['winner', 'loser'])
ax1.text(0.1, 0.9, f'n = {len(chirps_winner)}',
transform=ax1.transAxes, color=ps.white)
@ -189,17 +276,13 @@ def main(datapath: str):
ps.set_boxplot_color(bplot1, colors1)
colors1 = ps.orange
ps.set_boxplot_color(bplot2, colors1)
ax2.scatter(size_diffs, size_chirps_diffs, color='r')
ax2.set_xlabel('Size difference [mm]')
ax2.set_ylabel('Chirps difference [n]')
ax2.scatter(size_diffs_winner, size_chirps_winner, color=ps.red)
ax2.scatter(size_diffs_loser, size_chirps_loser, color=ps.orange)
#ax3.scatter(freq_diffs, size_chirps_diffs, color='r')
# ax3.scatter(freq_diffs, freq_chirps_diffs, color='r')
ax3.set_xlabel('Frequency difference [Hz]')
ax3.set_yticklabels([])
ax3.set
ax2.set_xlabel('Size difference [cm]')
#plt.savefig('../poster/figs/chirps_winner_loser.pdf')
# pearson r
plt.savefig('../poster/figs/chirps_winner_loser.pdf')
plt.show()

View File

@ -0,0 +1,81 @@
import numpy as np
import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr, spearmanr
from thunderfish.powerspectrum import decibel
from IPython import embed
from pandas import read_csv
from modules.logger import makeLogger
from modules.plotstyle import PlotStyle
from modules.behaviour_handling import Behavior, correct_chasing_events
from modules.datahandling import flatten
ps = PlotStyle()
logger = makeLogger(__name__)
def main(datapath: str):
foldernames = [
datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)]
time_precents = []
chirps_percents = []
for foldername in foldernames:
# behabvior is pandas dataframe with all the data
if foldername == '../data/mount_data/2020-05-12-10_00/':
continue
bh = Behavior(foldername)
category = bh.behavior
timestamps = bh.start_s
# Correct for doubles in chasing on- and offsets to get the right on-/offset pairs
# Get rid of tracking faults (two onsets or two offsets after another)
category, timestamps = correct_chasing_events(category, timestamps)
chasing_onset = timestamps[category == 0]
chasing_offset = timestamps[category == 1]
if len(chasing_onset) != len(chasing_offset):
embed()
chirps_in_chasings = []
for onset, offset in zip(chasing_onset, chasing_offset):
chirps_in_chasing = [c for c in bh.chirps if (c > onset) & (c < offset)]
chirps_in_chasings.append(chirps_in_chasing)
try:
time_chasing = np.sum(chasing_offset[chasing_offset<3*60*60] - chasing_onset[chasing_onset<3*60*60])
except:
time_chasing = np.sum(chasing_offset[chasing_offset<3*60*60] - chasing_onset[chasing_onset<3*60*60][:-1])
time_chasing_percent = (time_chasing/(3*60*60))*100
chirps_chasing = np.asarray(flatten(chirps_in_chasings))
chirps_chasing_new = chirps_chasing[chirps_chasing<3*60*60]
chirps_percent = (len(chirps_chasing_new)/len(bh.chirps))*100
time_precents.append(time_chasing_percent)
chirps_percents.append(chirps_percent)
fig, ax = plt.subplots(1, 1, figsize=(14*ps.cm, 10*ps.cm))
ax.boxplot([time_precents, chirps_percents])
ax.set_xticklabels(['Time Chasing', 'Chirps in Chasing'])
ax.set_ylabel('Percent')
ax.scatter(np.ones(len(time_precents))*1.25, time_precents, color=ps.white)
ax.scatter(np.ones(len(chirps_percents))*1.75, chirps_percents, color=ps.white)
plt.savefig('../poster/figs/chirps_in_chasing.pdf')
plt.show()
if __name__ == '__main__':
# Path to the data
datapath = '../data/mount_data/'
main(datapath)

Binary file not shown.

Binary file not shown.

Binary file not shown.