Validation_motion.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. database_path = '/media/andrey/My Passport/GIN_new/Anesthesia_CA1/meta_data/meta_recordings - anesthesia.xlsx'
  4. # ### Select the range of recordings for the analysis (see "Number" row in the meta data file)
  5. # In[4]:
  6. rec = [x for x in range(0,188)]
  7. # In[1]:
  8. import numpy as np
  9. import numpy.ma as ma
  10. import matplotlib.pyplot as plt
  11. import matplotlib.ticker as ticker
  12. import pandas as pd
  13. import seaborn as sns
  14. import pickle
  15. import os
  16. sns.set()
  17. sns.set_style("whitegrid")
  18. from scipy.signal import medfilt
  19. from scipy.stats import skew, kurtosis, zscore
  20. from scipy import signal
  21. from sklearn.linear_model import LinearRegression, TheilSenRegressor
  22. plt.rcParams['figure.figsize'] = [8, 8]
  23. # In[2]:
  24. from capipeline import *
  25. motion_index = np.zeros((len(rec),100000),dtype='float')
  26. recording_length = np.zeros((len(rec)),dtype='int')
  27. number_of_quiet_periods = 6
  28. start_quiet_period = np.zeros((len(rec),number_of_quiet_periods),dtype='int')
  29. stop_quiet_period = np.zeros((len(rec),number_of_quiet_periods),dtype='int')
  30. n_quiet_periods_in_recording = np.zeros((len(rec)),dtype='int')
  31. for i, r in enumerate(rec):
  32. print("Reconrding # ", r)
  33. animal = get_animal_from_recording(r, database_path)
  34. #condition = get_condition(r, database_path)
  35. #print("#" + str(r) + " " + str(animal) + " " + str(condition) + " ")
  36. meta_data = pd.read_excel(database_path)
  37. path_excel_rec = str(meta_data['Folder'][r]) + str(meta_data['Subfolder'][r]) + str(meta_data['Recording idx'][r]) + '/suite2p/'
  38. stat = np.load(path_excel_rec+ '/plane0/ops.npy', allow_pickle=True)
  39. #plt.plot(stat.item(0)['yoff'],alpha=0.5)
  40. #plt.plot(stat.item(0)['xoff'],alpha=0.5)
  41. motion_index[i,:len(stat.item(0)['yoff'])] = np.sqrt(stat.item(0)['yoff']**2 + stat.item(0)['xoff']**2)
  42. print("Min motion index:", min(motion_index[i,:]))
  43. print("Max motion index:", max(motion_index[i,:]))
  44. recording_length[i] = len(stat.item(0)['yoff'])
  45. print("Recording length:", recording_length[i])
  46. if (type(meta_data['Quiet periods'][r]) == type('str')):
  47. print("Quiet periods: ", meta_data['Quiet periods'][r].split(','))
  48. n_quiet_periods_in_recording[i] = int(len(meta_data['Quiet periods'][r].split(','))/2)
  49. for k in range(n_quiet_periods_in_recording[i]):
  50. start_quiet_period[i,k] = int(meta_data['Quiet periods'][r].split(',')[k*2])
  51. stop_quiet_period[i,k] = int(meta_data['Quiet periods'][r].split(',')[k*2+1])
  52. print(start_quiet_period[i,k])
  53. print(stop_quiet_period[i,k] )
  54. else:
  55. print("Nan for recording:", r)
  56. start_quiet_period[i,0] = 0
  57. stop_quiet_period[i,0] = recording_length[i]
  58. #np.save("./xy-motion.npy",motion_index)
  59. #mi = motion_index
  60. mi = np.load("./xy-motion.npy")
  61. print(np.max(mi))
  62. print(np.min(mi))
  63. mi_av = np.mean(mi[:,:18000].reshape(mi.shape[0],60,300), axis=2)
  64. plt.rcParams["axes.grid"] = False
  65. plt.figure(figsize = (10,15))
  66. pos = plt.imshow(mi_av,cmap='Purples',vmin = 0, vmax = 10) #,aspect='equal'
  67. plt.colorbar(pos)
  68. for i in range(len(rec)):
  69. for k in range(int(n_quiet_periods_in_recording[i])):
  70. line = plt.scatter(start_quiet_period[i,k]/300,i,marker='>',color='k',s = 10,label='start of quiet period')
  71. line.set_clip_on(False)
  72. line = plt.scatter(stop_quiet_period[i,k]/300,i,marker='<',color='k',s = 10, label='end of quiet period')
  73. line.set_clip_on(False)
  74. line = plt.scatter(recording_length[0:len(rec)]/300, np.arange(len(rec)) ,marker='|',color='k', s = 10, label='end of the recording')
  75. line.set_clip_on(False)
  76. #plt.legend(loc='upper right')
  77. plt.xlabel('x 300 frames')
  78. plt.ylabel('recording')
  79. plt.title('Anesthesia dataset motion validation')
  80. #plt.gcf().set_facecolor("white")
  81. plt.xlim([0,60])
  82. line.set_clip_on(False)
  83. plt.savefig("Validation_motion.png")
  84. plt.savefig("Validation_motion.svg")
  85. plt.show()