Mercurial > repos > jcb-mpl > eics_first_extraction
view src/mz_6_rescan_mz2.sci @ 0:245b2c2b3d75 draft
Uploaded
| author | jcb-mpl |
|---|---|
| date | Tue, 27 Apr 2021 14:13:47 +0000 |
| parents | |
| children |
line wrap: on
line source
function x_tr_mz2=mz_6_rescan_mz2(x_tr_mz,thresh) // 12juin19: cette fonction marche très bien!! // mais on essaie de l'améliorer avec mz_6_rescan3 // cette fonction réalise des boucles sur la matrice EIC, en regroupant les EIC qui se rapprochent // stop quand sur 3 boucles successives on n'a pas regroupé plus de 5 EICs chaque fois // stop aussi quand on ne regroupe aucune EIC dans une boucle // thresh: des valeurs testées, pour chercher la valeur optimale // ex: thresh=0.001 // normalement, cette fonction tourne rapidement, ~5 minutes 30jan20 if argn(2)<3 then coeff_thresh=1; end; flag=0; // verif qu'on a bien un div if size(x_tr_mz.d,1)~=size(x_tr_mz.i,1) | size(x_tr_mz.d,2)~=size(x_tr_mz.v,1) then error('not a div, mz_6_rescan_mz2') end; n_tr=size(x_tr_mz.i,1); // verif. que les m/z de x_tr_mz sont ordonnes x_tr_mz_v=strtod(x_tr_mz.v); diff_i=x_tr_mz_v(2:$)-x_tr_mz_v(1:$-1); // verif. que les m/z sont en ordre croissant index=find(diff_i<0); if max(size(index))>0 then // pas ordonné -> il faut le faire [nul,tri0]=gsort(x_tr_mz_v,'g','i'); x_tr_mz=x_tr_mz(:,tri0); x_tr_mz_v=x_tr_mz_v(tri0); end; while flag<2; // enleve inferieur 31jan20 clear x_tr_mz2; flag=2*flag; x_tr_mz_v=strtod(x_tr_mz.v); x_sum=sum(x_tr_mz.d,'r')'; n1=max(size(x_tr_mz.d,2)); //disp('index2') for i=2:n1; if x_tr_mz_v(i)-x_tr_mz_v(i-1)<thresh then // avant le 27mai 17h30: <=1.01 x_tr_mz_v(i-1)=x_tr_mz_v(i-1:i)'*x_sum(i-1:i) / (x_sum(i-1:i)'*ones(2,1)); // on repositionne la 1° valeur de m/z x_tr_mz_v(i)=0; // et on annule la 2° valeur de m/z x_tr_mz.d(:,i-1)=x_tr_mz.d(:,i-1)+x_tr_mz.d(:,i); // somme des signaux end; end; x_tr_mz.v=string(x_tr_mz_v); // on remet les nlles valeurs de m/z dans x_tr_mz //disp('index3') // tri tri=find(x_tr_mz_v~=0); // ligne suivante gardée: car elle ne prend que qq secondes avec x_tr_mz=3000x140000 30jan20 x_tr_mz2=x_tr_mz(:,tri); //disp('index4') // verification des dimensions div if size(x_tr_mz2.d,1)~=size(x_tr_mz2.i,1) | size(x_tr_mz2.d,2)~=size(x_tr_mz2.v,1) then disp('error in dimensions, mz_6_rescan_mz2') end; //disp('index5') n2=size(x_tr_mz2.d,2); x_tr_mz=x_tr_mz2; if flag <= 2 then // la boucle peut continuer if abs(n1-n2)<=5 then if n1==n2 then flag=2; // stop immédiat -> sortie de la fonction else flag=1; // pour bloquer à la boucle suivante end end end end endfunction
