Mercurial > repos > jcb-mpl > features_extract
diff src/mz_8_peakpicking_dw.sci @ 0:c0a2e5e78725 draft
Uploaded
author | jcb-mpl |
---|---|
date | Tue, 27 Apr 2021 14:48:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/mz_8_peakpicking_dw.sci Tue Apr 27 14:48:05 2021 +0000 @@ -0,0 +1,140 @@ +function [peaks_list,peaks_detail,no_eic]=mz_8_peakpicking_dw(x_tr_mz3_trouves,list_mz,plage_tr,plage_min_tr,dw_max,signal_min,option_plot) + + // x_tr_mz3_trouves: un div (n x p) + // list_mz: les n° des m/z à traiter; valeurs entre 1 et p + // plage tr: une valeur; par defaut: +/- 0,2 minutes + // plage_min_tr: une valeur; par defaut: 0,05 + // dw_max: une valeur entre 0 et 2; par défaut: 0.5 + // signal_min: une valeur; par défaut: 100000 + // option_plot: 1=figures; 0= non (par défaut) + + if argn(2)<7 then + option_plot=0; + end + + if argn(2)<6 then + signal_min=100000; + end + + if argn(2)<5 then + dw_max=0.5; + end + + if argn(2)<4 then + plage_min_tr=0.05; + end + + if argn(2)<3 then + plage_tr=0.2; + end + + + no_eic=[]; + + n_mz=size(x_tr_mz3_trouves.d,2); + list_mz_possible=[1:n_mz]'; + list_mz=list_mz_possible(list_mz); // pour accepter le $ + + n=max(size(list_mz)); + + peaks_list.d=[]; + peaks_list.i=[]; + peaks_list.v=['TRmin';'TRmax';'TRmedian';'m/z';'signal']; + + peaks_detail=list(); + index_peaks_detail=1; + + // transformation de plage_tr (des valeurs de temps) en n_tr (un nbre de TR) + ntemp=100; // pour ne pas commencer au début + n_tr=0; + val_tr=0; + + while val_tr<=plage_tr; + n_tr=n_tr+1; + val_tr=strtod(x_tr_mz3_trouves.i(ntemp+n_tr))-strtod(x_tr_mz3_trouves.i(ntemp)); + end + + nbr_total_tr=size(x_tr_mz3_trouves.i,1); + + for i=1:n; + xi=x_tr_mz3_trouves(:,list_mz(i)); + + signal_max=max(xi.d) // 1 seule colonne + + index_selected=0*strtod((xi.i)); // un vecteur de 0 de même taille que xi.i + + while signal_max > signal_min; + // identification de la plage du pic + index=find(xi.d==signal_max & index_selected==0); + index_min=max(1,index-n_tr); + index_max=min(nbr_total_tr,index+n_tr); + //ajustement du min pour ne pas retomber sur une zone deja selectionnee + index_selected_min=index_selected(index_min); + while index_selected_min>0; + index_min=index_min+1; + index_selected_min=index_selected(index_min); + end + //ajustement du max pour ne pas retomber sur une zone deja selectionnee + index_selected_max=index_selected(index_max); + while index_selected_max>0; + index_max=index_max-1; + index_selected_max=index_selected(index_max); + end + + // options de tri: DW et plage_min_tr + xi_sel=xi(index_min:index_max,:); + + if (strtod(xi.i(index_max))-strtod(xi.i(index_min)))> plage_min_tr then + + dw=mz_6bis_durbin_watson(detrending(xi_sel')'); // car si ldb élevée et régulière: DW= faible + + if dw<dw_max then + + // calcul du signal de la plage + vect_tr=[index_min:index_max] + signal=sum(xi.d(vect_tr)); + + // enregistrement du resultat + if peaks_list.d==[] then + peaks_list.d=[strtod(xi.i(index_min)) strtod(xi.i(index_max)) strtod(xi.i(index)) strtod(xi.v) signal]; + peaks_list.i=i; + else + peaks_list.d=[peaks_list.d; [strtod(xi.i(index_min)) strtod(xi.i(index_max)) strtod(xi.i(index)) strtod(xi.v) signal]]; + peaks_list.i=[peaks_list.i;i]; + end + + peaks_detail(index_peaks_detail)=xi([index_min:index_max],:); + index_peaks_detail=index_peaks_detail+1; + + // edition de figure (selon option) + if option_plot==1 then + figure; + curves(xi([index_min:index_max],:)); + end + + // rajout des n° d'EICs de x_tr_mz3_trouves ou x_tr_mz4 + if no_eic==[] then + no_eic=i; + else + no_eic=[no_eic;i]; + end + end + + end + // neutralisation de la plage precedente + index_selected(index_min:index_max)=1; // on supprime + xi.d(index_min:index_max)=0; + + signal_max=max(xi.d); + end + + end + + + // préparation des sorties + peaks_list=div(peaks_list); + + + + +endfunction