0
|
1 function resbary_out=mz_1_merge_by_k(resbary_in,k)
|
|
2
|
|
3 // regroupe les TR par k et ajoute les signaux si m/z égaux
|
|
4
|
|
5 if ~isfield(resbary_in,'time') | ~isfield(resbary_in,'mzdata') then
|
|
6 error('fields time and/or mzdata are missing in resbary_in')
|
|
7 end
|
|
8
|
|
9 n=max(size(resbary_in.time));
|
|
10 n2=max(size(resbary_in.mzdata));
|
|
11 if n~=n2 then
|
|
12 disp('n time ~= n mzdata');
|
|
13 end
|
|
14
|
|
15 resbary_out.time=[];
|
|
16 resbary_out.mzdata=list();
|
|
17
|
|
18 index=1;
|
|
19 i=1;
|
|
20 while index <=n-k+1;
|
|
21 resbary_out.time(i)=mean(resbary_in.time(index:index+k-1));
|
|
22 // regroupement des k mzdata
|
|
23 resbary_out.mzdata(i)=resbary_in.mzdata(index);
|
|
24 for j=1:k-1;
|
|
25 resbary_out.mzdata(i)=[resbary_out.mzdata(i);resbary_in.mzdata(index+j)]
|
|
26 end;
|
|
27 [nul,tri]=gsort(resbary_out.mzdata(i)(:,1),'g','i');
|
|
28 resbary_out.mzdata(i)=resbary_out.mzdata(i)(tri,:); // tri par m/z croissants
|
|
29 resbary_out.mzdata(i)(:,1)=0.0001*round(10000*resbary_out.mzdata(i)(:,1)); // arrondi à 0.0001 // 1fev20
|
|
30
|
|
31 // sommes des signaux pour m/z identiques
|
|
32 resbary_mz=resbary_out.mzdata(i)(:,1);
|
|
33 resbary_mz=unique(resbary_mz);
|
|
34 n_i=max(size(resbary_mz));
|
|
35 resbary_signal=zeros(n_i,1);
|
|
36 for j=1:n_i;
|
|
37 tri_temp=find(resbary_out.mzdata(i)(:,1)==resbary_mz(j));
|
|
38 resbary_signal(j)= sum(resbary_out.mzdata(i)(tri_temp,2)); // somme des signaux de même m/z
|
|
39 end;
|
|
40 resbary_out.mzdata(i)=[resbary_mz resbary_signal];
|
|
41
|
|
42 // suite de la boucle
|
|
43 index=index+k;
|
|
44 i=i+1;
|
|
45 end;
|
|
46
|
|
47
|
|
48 endfunction
|