comparison src/mz_1_read_txt.sci @ 0:03c9a3b59377 draft

Uploaded
author jcb-mpl
date Mon, 26 Apr 2021 16:28:21 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:03c9a3b59377
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