Buongiorno a tutti,
sono ancora alle prese con l'automazione delle funzioni e visto che mi sono inceppata, provo a chiedere aiuto.
Sto usando MATLAB per i miei esperimenti di elettrofisiologia dove registro attività neuronale, indotta da stimoli, tramite 16 canali di registrazione.
Il mio capo mi ha fornito il seguente script che permette di caricare i dati della piattaforma di registrazione. Il suo script permette di calcolare la variabile "Spikes" che è composta da 16 celle, una per ogni canale. In ogni cella c'è riportato il tempo in cui si verifica un evento di spike registrato.
%% Add your path to Matlab
path(path,'C:\Users\daian\Desktop\24aprile2020\2020-03-31_08-10-02-20200424T130037Z-001')
%% Select your folder
selpath = uigetdir;
cd(selpath)
Events=importdata('all_channels.events');
% Get sampling rate
Fs=Events{8};
Fs=strsplit(Fs,'header.sampleRate = '); Fs=Fs{2};
Fs=strsplit(Fs,';'); Fs=Fs{1};
Fs=str2double(Fs);
%% Read LFPs
% Number of ADC and electrode channels
N_ADC=10;
N_CH=16;
% Find continuous files
Files_tmp=dir;
Files=strings(1); m=1;
for n=1:length(Files_tmp)
F=Files_tmp(n);
if strfind(F.name,'continuous')>0
Files(m,1)=F.name;
k1=strfind(F.name,'_'); k2=strfind(F.name,'.continuous');
Files(m,2)=F.name(k1+1:k2-1);
m=m+1;
end
end
% Load and sort continuous data
X=load_open_ephys_data(char(Files(1,1)));
N=length(X); clear X;
ADC=zeros(N_ADC,N); CH=zeros(N_CH,N);
for n=1:N_ADC+N_CH
F=Files(n,1); Type=char(Files(n,2));
if sum(Type(1:3)=='ADC')==3
n_adc=str2num(Type(4:length(Type)));
ADC(n_adc+1,:)=load_open_ephys_data(char(F));
end
if sum(Type(1:2)=='CH')==2
n_ch=str2num(Type(3:length(Type)));
CH(n_ch+1,:)=load_open_ephys_data(char(F));
end
end
% Build time vector
Time=(0:1/Fs:(length(CH(1,:))-1)/Fs);
%% Read Spikes
% Find spikes data
Files=strings(1); m=1;
for n=1:length(Files_tmp)
F=Files_tmp(n);
if strfind(F.name,'spikes')>0
Files(m,1)=F.name;
k1=strfind(F.name,'n'); k2=strfind(F.name,'.spikes');
Files(m,2)=F.name(k1:k2-1);
m=m+1;
end
end
% Load and sort spikes data
N_spikes=length(Files);
Spikes=cell(N_spikes,1);
for n=1:N_spikes
F=Files(n,1); Type=char(Files(n,2));
n_sp=str2num(Type(2:length(Type)));
[data,S,info]=load_open_ephys_data(char(F));
Spikes{n_sp+1}=S;
L'obiettivo è quello di calcolare il numero di spikes in diversi intervalli di tempo in cui mando i diversi stimoli.
I tempi sono i seguenti.
Trep=0.5; % Period of pulses
Tpulse= 0.05; % Duration of pulses
Tdelay=1.5; % Delay before the first pulse and after the last pulse (to match experiments)
Ipotizzando di dare 10 stimoli (N_ADC=10) e definendo il tempo del primo stimolo come T0+Tdelay (dove T0 è il momento di inizio dell'esperimento) ho pensato di calcolare con la funzione "find" tutti i valori per ogni cella di "Spikes" che sono compresi nei vari intervalli di tempo che mi interessano. In questo modo ottengo la variabile "Spike_per_ADC" che presenta in ogni cella le posizioni dei valori compresi nei miei intervalli di tempo all'interno di Spikes{1,1} (che rappresenta i dati relativi al primo canale di registrazione).
t0=16;
T1=t0+Tdelay;
N_ADC=10;
Spike_per_ADC=cell(N_ADC,1);
for N_ADC=1:10 %10 is the number of ADC
findspike=find(Spikes{1,1}>(T1+(Trep*N_ADC-Trep)) & Spikes{1, 1}<((T1+Trep)+(Trep*N_ADC-Trep)));
Spike_per_ADC{N_ADC,1}=findspike %posizione dei valori che soddisfano le condizioni in spike(1,1)
end
Pensavo poi di usare la funzione "lenght" per calcolare il numero di valori all'interno di ogni cella "Spike_per_ADC" che corrisponde quindi al numero di Spikes per i diversi stimoli.
numerospike=lenght(Spike_per_ADC{1, 1});
Il problema è che visto che dovrei riuscire a fare un istogramma in cui riporto per ogni stimolo, il numero di spike per canale, ho bisogno di applicare i codici per "findspike" a tutte le celle di "Spikes" per generare una variabile "Spike_per_ADC{N_ADC,N_CH} in cui quindi per ogni canale trovo le posizioni nelle varie celle di "Spikes" dei valori che corrispondi ai miei intervalli di tempo. A questo punto vorrei riuscire a creare la matrice "numerospike"(di 10 righe e 16 colonne) con la funzione length che mi riporta il numero dei valori presenti in ogni cella di "Spike_per_ADC". Poi potrei fare il mio istogramma.
Visto che sono nuova su MATLAB, vi chiedere prima di tutto cosa pensate del ragionamento e in seconda battuta se potete spiegarmi come automatizzare le funzioni che vi ho scritto per lavorare su ogni cella delle variabili trattate.
Vi ringrazio infinitamente e mi scuso per il lunghissimo post.
Buona giornata a tutti!
Daiana