0
|
1 function x_peaks_final=mz_9_compares_peaks(peaks_list,peaks_detail,x836,diff_mz,k)
|
|
2
|
|
3 // peaks_list et peaks_detail: les pics obtenus avec: 2018_07_mz_eics_to_features_v2
|
|
4 // x836: les pics de référence ; un div avec 2 colonnes: mz puis RT
|
|
5 // k:identification des k plus proches voisins; par défaut: 1
|
|
6
|
|
7 // depuis le répertoire: tampon2020/projet_publi_eics/jan20
|
|
8
|
|
9
|
|
10 x836=div(x836);
|
|
11
|
|
12 if argn(2) <4 then
|
|
13 diff_mz=0.0050;
|
|
14 end
|
|
15
|
|
16 if argn(2)<5 then
|
|
17 k=1;
|
|
18 end
|
|
19
|
|
20 diff_mz2=diff_mz;
|
|
21
|
|
22
|
|
23 // tri selon m/z croissant annule le 11fev20
|
|
24 //[nul,index]=gsort(x836.d(:,1),'g','i');
|
|
25 //x836_mz=x836(index,:);
|
|
26 x836_mz=x836;
|
|
27
|
|
28 // bilan : ----------------
|
|
29 // peaks_list = 4434 x 5 TRmin /TRmax/TRmedian/mz/signal
|
|
30 // x836_mz: 836 x 2 mz/TR
|
|
31
|
|
32 // identification des proches voisins
|
|
33 //diff_mz2=0.0050;
|
|
34 n=size(x836_mz.d,1);
|
|
35 xout.d=[];
|
|
36
|
|
37 for i=1:n;
|
|
38 peaks_list3=peaks_list.d(:,4); // mz
|
|
39 diff_temp=abs(peaks_list3-x836_mz.d(i,1));
|
|
40 tri1=find(diff_temp<diff_mz2);
|
|
41 tri2=find(diff_temp>=diff_mz2);
|
|
42 //pause
|
|
43 peaks_list3(tri1)=0; // distance nulle
|
|
44 peaks_list3(tri2)=10; // forte distance
|
|
45 //pause
|
|
46 d=(peaks_list.d(:,3)-x836_mz.d(i,2))**2 + (peaks_list3)**2;
|
|
47 //pause
|
|
48 d2=[[1:size(peaks_list.d,1)]' d]; // rajout des indices
|
|
49 [d_trie,tri]=gsort(d,'g','i'); // choix des k premiers
|
|
50 tri2=tri(1:k);
|
|
51 d_trie2=sqrt(d_trie(1:k)); // distances
|
|
52 xout_d=[ones(k,1)*x836_mz.d(i,:) peaks_list.d(tri2,:)];
|
|
53 xout_d=[xout_d(:,[1 6 2 4 7]) tri2];
|
|
54 if xout.d==[] then
|
|
55 xout.d=xout_d;
|
|
56 else
|
|
57 xout.d=[xout.d; xout_d];
|
|
58 end
|
|
59 //disp(i,'i=')
|
|
60 end
|
|
61
|
|
62 // mise en forme + rajout des différences
|
|
63 xout2.d=[xout.d(:,1:2) abs(xout.d(:,1)-xout.d(:,2)) xout.d(:,3:4) abs(xout.d(:,3)-xout.d(:,4)) xout.d(:,5:6)];
|
|
64 xout2.d(:,1:3)=0.0001*round(10000*xout2.d(:,1:3));
|
|
65 xout2.d(:,4:6)=0.01*round(100*xout2.d(:,4:6));
|
|
66 xout2.v=['mz-ref';'mz-obs';'diff_mz';'RT-ref';'RT-obs';'diff_RT';'signal';'n° in peak_list'];
|
|
67
|
|
68 x_peaks_final=div(xout2);
|
|
69
|
|
70 // même pic associé à plusieurs mz ref?
|
|
71 nrepet=ones(k*n,1);
|
|
72 for i=1:k*n;
|
|
73 tri=find(xout2.d(:,8)==xout2.d(i,8));
|
|
74 ntri=max(size(tri));
|
|
75 nrepet(i)=ntri;
|
|
76 end
|
|
77
|
|
78 // sorties
|
|
79 label_temp=x836.i;
|
|
80 label_temp=repmat(label_temp,[1,k]);
|
|
81 label_temp=label_temp';
|
|
82 label_temp=matrix(label_temp,[k*n,1]);
|
|
83 x_peaks_final.d=[x_peaks_final.d nrepet]
|
|
84 x_peaks_final.v=[x_peaks_final.v;'nbr of identifications']
|
|
85 x_peaks_final.i=label_temp;
|
|
86 x_peaks_final=div(x_peaks_final);
|
|
87
|
|
88 // rajout des no ref
|
|
89 no_ref=[1:n]';
|
|
90 no_ref=no_ref*ones(1,k);
|
|
91 no_ref=no_ref';
|
|
92 no_ref=matrix(no_ref,[k*n,1]);
|
|
93
|
|
94 x_peaks_final.d=[no_ref x_peaks_final.d];
|
|
95 x_peaks_final.v=['no_ref';x_peaks_final.v];
|
|
96
|
|
97 // remise en ordre
|
|
98 x_peaks_final=x_peaks_final(:,[1,9,10,2:8]);
|
|
99
|
|
100
|
|
101 endfunction
|
|
102
|
|
103
|
|
104
|
|
105
|
|
106
|
|
107
|
|
108
|
|
109
|
|
110
|
|
111
|