0
|
1 function [res]= mz_1_read_txt(xfichier, pas )
|
|
2
|
|
3 // lecture d'un fichier texte, obtenu par exportation d'un fichier .mzML
|
|
4
|
|
5 // xfichier: le nom du fichier texte ex: xfichier -> '151123-vinrose_acet3%_T5h_cpl-pos.txt'
|
|
6 // pas: le pas d'acquisition des données: pas=10 -> 1/10, pas = 1 -> 1/1 = toutes
|
|
7 // pas est un multiple de 10
|
|
8 // res: une structure
|
|
9
|
|
10 // ex: res=mz_read_txt('151123-vinrose_acet3%_T5h_cpl-pos.txt',2);
|
|
11
|
|
12 // compatibilité version 5.5.2 et 6.0.0
|
|
13 version=getversion();
|
|
14 version=strsplit(version,'-');
|
|
15 version=version(2);
|
|
16 version=part(version,1);
|
|
17 version=strtod(version);
|
|
18 if version < 6 then
|
|
19 stacksize('max')
|
|
20 end
|
|
21
|
|
22 // pas par défaut: pas =1 / on garde toutes les données
|
|
23 if argn(2)==1 then
|
|
24 pas=1;
|
|
25 end
|
|
26
|
|
27 // ouverture du fichier:
|
|
28 id=mopen(xfichier,'rt');
|
|
29
|
|
30 // initialisation:
|
|
31 i=1;
|
|
32 x_out=list();
|
|
33 x_masses=[];
|
|
34 x_time=[];
|
|
35 end_file=0;
|
|
36 list_index=1;
|
|
37
|
|
38 // début de la boucle while, pour collecter les données de masse
|
|
39 while end_file==0;
|
|
40
|
|
41 line=mgetl(id,1);
|
|
42 line=stripblanks(line) //enlève les blancs de début et fin, pas les blancs intermédiaires
|
|
43
|
|
44 if meof(id)==0 & line~=[] then // on continue...
|
|
45
|
|
46 // temps départ de l'acquisition:
|
|
47 if regexp(line,'/scan start time/')~=[] then
|
|
48 [a]=strsplit(line,',');
|
|
49 time=strtod(a(2));
|
|
50 end
|
|
51
|
|
52 // arrêt de boucle à la fin des spectres de masse:
|
|
53 if (i<=10*pas) | (x_time($-1)<x_time($)) then // 10*pas pour avoir des valeurs dans x_time
|
|
54
|
|
55 // extraction des données:
|
|
56 if regexp(line,'/binary:/')~=[] then
|
|
57
|
|
58 a=strsplit(line,']');
|
|
59 xtemp=stripblanks(a(2)); // extrait les données (1 x 1) et enlève les blancs de début et de fin
|
|
60 xtemp=strsplit(xtemp,' '); // met xtemp sous forme d'un vecteur vectical de chaines de caractères
|
|
61 xtemp=strtod(xtemp); // mise en alpha-numérique
|
|
62
|
|
63 xtemp=xtemp(isnan(xtemp)==%F); // suppression des nan rajoutés accidentellement en fin de fichier xtemp, 16mars17
|
|
64
|
|
65 if x_masses==[] then
|
|
66 x_masses=xtemp;
|
|
67 else
|
|
68 if size(x_masses,1)==size(xtemp,1) then
|
|
69 x_masses=[x_masses xtemp];
|
|
70 else
|
|
71 disp('erreur de dimensions ligne 73 de mz_read_txt' )
|
|
72 disp(size(x_masses),'size(x_masses)=')
|
|
73 disp(size(xtemp),'size(x_temp)=')
|
|
74 pause
|
|
75 clear x_masses
|
|
76 end
|
|
77
|
|
78 end
|
|
79 end
|
|
80
|
|
81
|
|
82 // sélection d'un spectre de masse et d'une unité de temps par unité de pas:
|
|
83 if size(x_masses,2)==2 then
|
|
84 if floor(i/pas)==ceil(i/pas) then // on en garde 1/pas
|
|
85 if x_time==[] then
|
|
86 x_time=time;
|
|
87 else
|
|
88 x_time=[x_time;time];
|
|
89 end
|
|
90 x_out(list_index)=x_masses;
|
|
91 //disp(size(x_out(list_index)),'size(x_out(list_index))=')
|
|
92 list_index=list_index+1;
|
|
93 end
|
|
94 //disp(i,'i=')
|
|
95 //disp(list_index,'list_index=')
|
|
96 x_masses=[];
|
|
97 i=i+1;
|
|
98 end
|
|
99 else // ligne 53
|
|
100 end_file=1;
|
|
101 end // ligne 53
|
|
102
|
|
103 else // ligne 44
|
|
104 //end_file=meof(id) // on arrête la boucle while
|
|
105 end_file=1;
|
|
106 end // ligne 44
|
|
107
|
|
108 end // ligne 39
|
|
109
|
|
110 mclose(id)
|
|
111
|
|
112 res.time=x_time;
|
|
113 if size(res.time,1)==1 then
|
|
114 res.time=res.time';
|
|
115 end
|
|
116 res.mzdata=x_out;
|
|
117
|
|
118
|
|
119
|
|
120 endfunction
|