|
0
|
1 function [xout,calculs_stats_tr_mz]=mz_5_tr_matrix6bis(xbary,allmz,thresh,signal_thresh)
|
|
|
2
|
|
|
3 // entrées:------------
|
|
|
4
|
|
|
5 // xbary: une structure de type barycentrique avec les champs x.time et x.mzdata
|
|
|
6 // all_mz: les valeurs de m/z identifiées avec mz_scan_mz_raw2; une matrice de deux colonnes, m/z et signaux
|
|
|
7 // thresh: le seuil de regroupement, ex: 0,0024
|
|
|
8 // signal_thresh: un seuil mini de signal, ex: 30000
|
|
|
9
|
|
|
10 // xout: une matrice de type (TR x m/z)
|
|
|
11 // xout.d: une matrice contenant les TR en ligne et les valeurs m/z en colonne
|
|
|
12 // xout.i: les valeurs de TR
|
|
|
13 // xout.v: les valeurs de m/z
|
|
|
14 // calculs_stats_tr_mz: une matrice avec nbre lignes=nbre m/z et 7 colonnes contenant differents calculs, pour des statistiques ulterieures
|
|
|
15 // une matrice avec les m/z en ligne et 7 colonnes:
|
|
|
16 // nbre de TR / somme des TR / somme des TR**2 / somme des mz / somme des mz**2 / somme des mz*signal / somme des signaux
|
|
|
17
|
|
|
18
|
|
|
19 // application d'un filtre sur le niveau minimum de signal
|
|
|
20 tri=find(allmz(:,2)>signal_thresh);
|
|
|
21 all_mz=allmz(tri,1);
|
|
|
22
|
|
|
23
|
|
|
24 n=max(size(xbary.time)); // nombre de TR
|
|
|
25 n_mz=max(size(all_mz)); // nombre de m/z
|
|
|
26
|
|
|
27 // initialisation de xout:
|
|
|
28 xout=div(0);
|
|
|
29 xout.d=zeros(n,n_mz);
|
|
|
30 xout.i=string(xbary.time);
|
|
|
31 xout.v=string(all_mz);
|
|
|
32
|
|
|
33 // initialisation de calcul_stats_tr_mz:
|
|
|
34 calculs_stats_tr_mz=zeros(n_mz,7);
|
|
|
35
|
|
|
36 //calcul_stats_tr_mz contient: 1=n; 2=somme des tr; 3=somme des carres des tri; 4=somme des m/z; 5=somme des carrés des mzi;
|
|
|
37 // 6=somme des m/z*signaux; 7=somme des signaux
|
|
|
38
|
|
|
39
|
|
|
40 // remplissage de xout et de calculs_stats_tr_mz:
|
|
|
41 for i=1:n;
|
|
|
42 //xi=xbary.mzdata(i);
|
|
|
43 xbaryi=xbary.mzdata(i); //tous m/z remplacés par leurs barycentres avec mz_barycenter_adjust
|
|
|
44 n_xi=size(xbaryi,1); // nbre de m/z
|
|
|
45 for j=1:n_xi;
|
|
|
46 abs_differ=abs(all_mz-xbaryi(j,1));
|
|
|
47 if min(abs_differ)<thresh then // 18avril18 on ne remplit que si différence faible
|
|
|
48 indice=find(abs_differ==min(abs_differ));
|
|
|
49 imax=max(size(indice));
|
|
|
50 for k=1:imax; //9jan20 boucle rajoutee car il peut y avoir 2 solutions
|
|
|
51 // remplissage de xout:
|
|
|
52 xout.d(i,indice(k))=xout.d(i,indice(k))+ xbaryi(j,2); //26juil; possibilité de rajouter 2 valeurs dans 1 case
|
|
|
53 // remplissage de calculs_stats_tr_mz:
|
|
|
54 calculs_stats_tr_mz(indice(k),1)=calculs_stats_tr_mz(indice(k),1)+ 1; // rajout de +1
|
|
|
55 calculs_stats_tr_mz(indice(k),2)=calculs_stats_tr_mz(indice(k),2)+ xbary.time(i); // rajout de TR
|
|
|
56 calculs_stats_tr_mz(indice(k),3)=calculs_stats_tr_mz(indice(k),3)+ xbary.time(i)**2; // rajout de TR**2
|
|
|
57 calculs_stats_tr_mz(indice(k),4)=calculs_stats_tr_mz(indice(k),4)+ xbaryi(j,1); // somme des m/z
|
|
|
58 calculs_stats_tr_mz(indice(k),5)=calculs_stats_tr_mz(indice(k),5)+ xbaryi(j,1)**2; // somme des m/z**2
|
|
|
59 calculs_stats_tr_mz(indice(k),6)=calculs_stats_tr_mz(indice(k),6)+ xbaryi(j,1)*xbaryi(j,2); // somme des m/z * signal
|
|
|
60 calculs_stats_tr_mz(indice(k),7)=calculs_stats_tr_mz(indice(k),7)+ xbaryi(j,2); // somme des signaux
|
|
|
61 end
|
|
|
62 end
|
|
|
63 end
|
|
|
64
|
|
|
65 end
|
|
|
66
|
|
|
67 // ajustement des m/z 17mai18
|
|
|
68 stats_tr_mz_5= calculs_stats_tr_mz(:,6)./calculs_stats_tr_mz(:,7);
|
|
|
69 xout.v= string(stats_tr_mz_5);
|
|
|
70
|
|
|
71 // suppression des signaux trop faibles
|
|
|
72 tri=find(calculs_stats_tr_mz(:,7)>signal_thresh);
|
|
|
73 xout=xout(:,tri); // 31jan20 verif que ce tri marche 1000X+vite qu'enlever les colonnes
|
|
|
74 calculs_stats_tr_mz= calculs_stats_tr_mz(tri,:);
|
|
|
75
|
|
|
76
|
|
|
77
|
|
|
78 endfunction
|