0
|
1 function x_mz=mz_hdf5tosci(file_in,max_scans)
|
|
2
|
|
3 // entrees: -------------------------
|
|
4 // file_in: un fichier au format HDF5
|
|
5 // max_scans: valeur introduite pour accelerer la fonction de test
|
|
6
|
|
7 // sorties: ---------------------------
|
|
8 // x_mz: une variable avec deux champs:
|
|
9 // x_mz.time
|
|
10 // x_mz.mzdata une liste dont chaque élément est un vecteur de 2 colonnes: m/z et intensités de signal
|
|
11
|
|
12 // JCB 2 aout18
|
|
13
|
|
14 h5close()
|
|
15
|
|
16 // lecture du fichier HDF5 ----------------------------------
|
|
17 a=h5open(file_in,'r','stdio'); // que lecture 6jan20:stdio
|
|
18 //pause
|
|
19 spectrum_chromatogram_index=h5read(a.root.ChromatogramIndex);
|
|
20 spectrum_chromatogram_index=spectrum_chromatogram_index(1); // une valeur
|
|
21 spectrum_time=h5read(a.root.ChomatogramTime);
|
|
22 spectrum_intensity=h5read(a.root.SpectrumIntensity);
|
|
23 spectrum_mz=h5read(a.root.SpectrumMZ);
|
|
24 spectrum_index=h5read(a.root.SpectrumIndex);
|
|
25 //spectrum_index=spectrum_index(1:spectrum_chromatogram_index);
|
|
26 h5close(a)
|
|
27
|
|
28 // reconstruction du spectre -----------------
|
|
29 if argn(2)<2 then
|
|
30 nbr_scans=max(size(spectrum_index));
|
|
31 else
|
|
32 nbr_scans=max_scans;
|
|
33 end
|
|
34
|
|
35
|
|
36 // 1- extraction du temps
|
|
37 //25juin20
|
|
38 time=spectrum_time;
|
|
39 if size(time,1)==1 then
|
|
40 time=time';
|
|
41 end
|
|
42 //pas=(spectrum_time($)-spectrum_time(1))/(nbr_scans-1);
|
|
43 //time=[spectrum_time(1):pas:spectrum_time($)+pas]; // rajout de 1 par securite pour être sur d'arriver a nbr_scans
|
|
44 //time=time(1:nbr_scans); // nbr exact de RT
|
|
45
|
|
46 mzdata=list();
|
|
47
|
|
48 //disp(nbr_scans,'nbr_scans=')
|
|
49
|
|
50 for i=1:nbr_scans;
|
|
51 if i==1 then
|
|
52 plage_i=[1,double(spectrum_index(i))];
|
|
53 else
|
|
54 plage_i=[double(spectrum_index(i-1))+1,double(spectrum_index(i))];
|
|
55 end
|
|
56 //disp(plage_i,'plage_i=')
|
|
57 // 2- extraction et reconstruction des m/z
|
|
58 // dans le fichier HDF5, ne sont enregistrées que les différences de m/z entre 2 mesures
|
|
59 mz_i=spectrum_mz(plage_i(1):plage_i(2));
|
|
60
|
|
61 n=size(mz_i,2);
|
|
62 mz_i2=zeros(1,n);
|
|
63
|
|
64 mz_i2(1)=mz_i(1);
|
|
65 for j=2:n;
|
|
66 mz_i2(j)=mz_i2(j-1)+mz_i(j);
|
|
67 end
|
|
68
|
|
69 // 3- extraction des signaux
|
|
70 sig_i=spectrum_intensity(plage_i(1):plage_i(2));
|
|
71
|
|
72 // regroupement des m/z et signaux
|
|
73 sp_i=[mz_i2;sig_i];
|
|
74
|
|
75 mzdata(i)=sp_i';
|
|
76
|
|
77
|
|
78 end
|
|
79
|
|
80 // verif. que time est un vecteur colonne
|
|
81 if size(time,2)>1 then
|
|
82 time=time';
|
|
83 end
|
|
84
|
|
85
|
|
86 // amelioration de la coherence des donnees
|
|
87 index=time(2:$)-time(1:$-1);
|
|
88 index2=find(index<0);
|
|
89 if index2 ~=[] then
|
|
90 index3=min(index2);
|
|
91 else;
|
|
92 index3=max(size(time));
|
|
93 end
|
|
94
|
|
95 x_mz.time=time(1:index3);
|
|
96 mzdata2=list();
|
|
97 for i=1:min(index3,size(mzdata));
|
|
98 mzdata2(i)=mzdata(i);
|
|
99 end
|
|
100 x_mz.mzdata=mzdata2;
|
|
101
|
|
102
|
|
103 endfunction
|