@@ -5,26 +5,21 Created on 23/01/2012 | |||
|
5 | 5 | @version $Id$ |
|
6 | 6 | ''' |
|
7 | 7 | |
|
8 |
from DataIO import |
|
|
9 | from DataIO import DataWriter | |
|
8 | from JRODataIO import JRODataIO | |
|
10 | 9 | |
|
11 |
class CorrelationReader( |
|
|
10 | class CorrelationReader(JRODataIO): | |
|
12 | 11 | |
|
13 | 12 | def __init__(self): |
|
14 | 13 | |
|
15 | 14 | pass |
|
16 | 15 | |
|
17 |
class CorrelationWriter( |
|
|
16 | class CorrelationWriter(JRODataIO): | |
|
18 | 17 | |
|
19 | 18 | def __init__(self): |
|
20 | ||
|
21 | 19 | pass |
|
22 | 20 | |
|
23 | def puData(self): | |
|
21 | def putData(self): | |
|
24 | 22 | pass |
|
25 | 23 | |
|
26 | 24 | def writeBlock(self): |
|
27 |
pass |
|
|
28 | ||
|
29 | ||
|
30 | No newline at end of file | |
|
25 | pass No newline at end of file |
@@ -166,7 +166,7 def getlastFileFromPath(path, ext): | |||
|
166 | 166 | |
|
167 | 167 | return None |
|
168 | 168 | |
|
169 |
class JRODataIO |
|
|
169 | class JRODataIO: | |
|
170 | 170 | |
|
171 | 171 | #speed of light |
|
172 | 172 | c = 3E8 |
This diff has been collapsed as it changes many lines, (1075 lines changed) Show them Hide them | |||
@@ -1,536 +1,541 | |||
|
1 | ''' | |
|
2 | File: SpectraIO.py | |
|
3 | Created on 20/02/2012 | |
|
4 | ||
|
5 | @author $Author$ | |
|
6 | @version $Id$ | |
|
7 | ''' | |
|
8 | ||
|
9 | import os, sys | |
|
10 | import numpy | |
|
11 | import glob | |
|
12 | import fnmatch | |
|
13 | import time, datetime | |
|
14 | ||
|
15 | path = os.path.split(os.getcwd())[0] | |
|
16 | sys.path.append(path) | |
|
17 | ||
|
18 | from Model.JROHeader import * | |
|
19 | from Model.Spectra import Spectra | |
|
20 | ||
|
21 | from JRODataIO import JRODataReader | |
|
22 | from JRODataIO import JRODataWriter | |
|
23 | from JRODataIO import isNumber | |
|
24 | ||
|
25 | ||
|
26 |
class SpectraReader( |
|
|
27 | """ | |
|
28 | Esta clase permite leer datos de espectros desde archivos procesados (.pdata). La lectura | |
|
29 | de los datos siempre se realiza por bloques. Los datos leidos (array de 3 dimensiones) | |
|
30 | son almacenados en tres buffer's para el Self Spectra, el Cross Spectra y el DC Channel. | |
|
31 | ||
|
32 | paresCanalesIguales * alturas * perfiles (Self Spectra) | |
|
33 | paresCanalesDiferentes * alturas * perfiles (Cross Spectra) | |
|
34 | canales * alturas (DC Channels) | |
|
35 | ||
|
36 | Esta clase contiene instancias (objetos) de las clases BasicHeader, SystemHeader, | |
|
37 | RadarControllerHeader y Spectra. Los tres primeros se usan para almacenar informacion de la | |
|
38 | cabecera de datos (metadata), y el cuarto (Spectra) para obtener y almacenar un bloque de | |
|
39 | datos desde el "buffer" cada vez que se ejecute el metodo "getData". | |
|
40 | ||
|
41 | Example: | |
|
42 | dpath = "/home/myuser/data" | |
|
43 | ||
|
44 | startTime = datetime.datetime(2010,1,20,0,0,0,0,0,0) | |
|
45 | ||
|
46 | endTime = datetime.datetime(2010,1,21,23,59,59,0,0,0) | |
|
47 | ||
|
48 | readerObj = SpectraReader() | |
|
49 | ||
|
50 | readerObj.setup(dpath, startTime, endTime) | |
|
51 | ||
|
52 | while(True): | |
|
53 | ||
|
54 | readerObj.getData() | |
|
55 | ||
|
56 | print readerObj.m_Spectra.data | |
|
57 | ||
|
58 | if readerObj.flagNoMoreFiles: | |
|
59 | break | |
|
60 | ||
|
61 | """ | |
|
62 | m_DataObj = None | |
|
63 | ||
|
64 | data_spc = None | |
|
65 | data_cspc = None | |
|
66 | data_dc = None | |
|
67 | ||
|
68 | pts2read_SelfSpectra = 0 | |
|
69 | pts2read_CrossSpectra = 0 | |
|
70 | pts2read_DCchannels = 0 | |
|
71 | ||
|
72 | nChannels = 0 | |
|
73 | ||
|
74 | nPairs = 0 | |
|
75 | ||
|
76 | #pairList = None | |
|
77 | ||
|
78 | channelList = None | |
|
79 | ||
|
80 | def __init__(self, m_Spectra=None): | |
|
81 | """ | |
|
82 | Inicializador de la clase SpectraReader para la lectura de datos de espectros. | |
|
83 | ||
|
84 | Inputs: | |
|
85 | m_Spectra : Objeto de la clase Spectra. Este objeto sera utilizado para | |
|
86 | almacenar un perfil de datos cada vez que se haga un requerimiento | |
|
87 | (getData). El perfil sera obtenido a partir del buffer de datos, | |
|
88 | si el buffer esta vacio se hara un nuevo proceso de lectura de un | |
|
89 | bloque de datos. | |
|
90 | Si este parametro no es pasado se creara uno internamente. | |
|
91 | ||
|
92 | Affected: | |
|
93 | self.m_DataObj | |
|
94 | ||
|
95 | Return : None | |
|
96 | """ | |
|
97 | if m_Spectra == None: | |
|
98 | m_Spectra = Spectra() | |
|
99 | ||
|
100 | if not( isinstance(m_Spectra, Spectra) ): | |
|
101 | raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object" | |
|
102 | ||
|
103 | self.m_DataObj = m_Spectra | |
|
104 | ||
|
105 | self.data_spc = None | |
|
106 | self.data_cspc = None | |
|
107 | self.data_dc = None | |
|
108 | ||
|
109 | self.pts2read_SelfSpectra = 0 | |
|
110 | self.pts2read_CrossSpectra = 0 | |
|
111 | self.pts2read_DCs = 0 | |
|
112 | ||
|
113 | self.nChannels = 0 | |
|
114 | ||
|
115 | self.nPairs = 0 | |
|
116 | ||
|
117 | self.ext = ".pdata" | |
|
118 | ||
|
119 | self.optchar = "P" | |
|
120 | ||
|
121 | ###################### | |
|
122 | ||
|
123 | self.m_BasicHeader = BasicHeader() | |
|
124 | ||
|
125 | self.m_SystemHeader = SystemHeader() | |
|
126 | ||
|
127 | self.m_RadarControllerHeader = RadarControllerHeader() | |
|
128 | ||
|
129 | self.m_ProcessingHeader = ProcessingHeader() | |
|
130 | ||
|
131 | self.online = 0 | |
|
132 | ||
|
133 | self.fp = None | |
|
134 | ||
|
135 | self.fileSizeByHeader = None | |
|
136 | ||
|
137 | self.filenameList = [] | |
|
138 | ||
|
139 | self.filename = None | |
|
140 | ||
|
141 | self.fileSize = None | |
|
142 | ||
|
143 | self.firstHeaderSize = 0 | |
|
144 | ||
|
145 | self.basicHeaderSize = 24 | |
|
146 | ||
|
147 | self.dataType = None | |
|
148 | ||
|
149 | self.maxTimeStep = 30 | |
|
150 | ||
|
151 | self.flagNoMoreFiles = 0 | |
|
152 | ||
|
153 | self.set = 0 | |
|
154 | ||
|
155 | self.path = None | |
|
156 | ||
|
157 | self.delay = 3 #seconds | |
|
158 | ||
|
159 | self.nTries = 3 #quantity tries | |
|
160 | ||
|
161 | self.nFiles = 3 #number of files for searching | |
|
162 | ||
|
163 | self.nReadBlocks = 0 | |
|
164 | ||
|
165 | self.flagIsNewFile = 1 | |
|
166 | ||
|
167 | self.ippSeconds = 0 | |
|
168 | ||
|
169 | self.flagResetProcessing = 0 | |
|
170 | ||
|
171 | self.flagIsNewBlock = 0 | |
|
172 | ||
|
173 | self.nTotalBlocks = 0 | |
|
174 | ||
|
175 | self.blocksize = 0 | |
|
176 | ||
|
177 | #pairList = None | |
|
178 | ||
|
179 | channelList = None | |
|
180 | ||
|
181 | ||
|
182 | def __hasNotDataInBuffer(self): | |
|
183 | return 1 | |
|
184 | ||
|
185 | ||
|
186 | def getBlockDimension(self): | |
|
187 | """ | |
|
188 | Obtiene la cantidad de puntos a leer por cada bloque de datos | |
|
189 | ||
|
190 | Affected: | |
|
191 | self.nChannels | |
|
192 | self.nPairs | |
|
193 | self.pts2read_SelfSpectra | |
|
194 | self.pts2read_CrossSpectra | |
|
195 | self.pts2read_DCchannels | |
|
196 | self.blocksize | |
|
197 | self.m_DataObj.nChannels | |
|
198 | self.m_DataObj.nPairs | |
|
199 | ||
|
200 | Return: | |
|
201 | None | |
|
202 | """ | |
|
203 | self.nChannels = 0 | |
|
204 | self.nPairs = 0 | |
|
205 | self.pairList = [] | |
|
206 | ||
|
207 | for i in range( 0, self.m_ProcessingHeader.totalSpectra*2, 2 ): | |
|
208 | if self.m_ProcessingHeader.spectraComb[i] == self.m_ProcessingHeader.spectraComb[i+1]: | |
|
209 | self.nChannels = self.nChannels + 1 #par de canales iguales | |
|
210 | else: | |
|
211 | self.nPairs = self.nPairs + 1 #par de canales diferentes | |
|
212 | self.pairList.append( (self.m_ProcessingHeader.spectraComb[i], self.m_ProcessingHeader.spectraComb[i+1]) ) | |
|
213 | ||
|
214 | pts2read = self.m_ProcessingHeader.numHeights * self.m_ProcessingHeader.profilesPerBlock | |
|
215 | ||
|
216 | self.pts2read_SelfSpectra = int( self.nChannels * pts2read ) | |
|
217 | self.pts2read_CrossSpectra = int( self.nPairs * pts2read ) | |
|
218 | self.pts2read_DCchannels = int( self.m_SystemHeader.numChannels * self.m_ProcessingHeader.numHeights ) | |
|
219 | ||
|
220 | self.blocksize = self.pts2read_SelfSpectra + self.pts2read_CrossSpectra + self.pts2read_DCchannels | |
|
221 | ||
|
222 | self.channelList = numpy.arange( self.nChannels ) | |
|
223 | ||
|
224 | ||
|
225 | def readBlock(self): | |
|
226 | """ | |
|
227 | Lee el bloque de datos desde la posicion actual del puntero del archivo | |
|
228 | (self.fp) y actualiza todos los parametros relacionados al bloque de datos | |
|
229 | (metadata + data). La data leida es almacenada en el buffer y el contador del buffer | |
|
230 | es seteado a 0 | |
|
231 | ||
|
232 | Return: None | |
|
233 | ||
|
234 | Variables afectadas: | |
|
235 | self.datablockIndex | |
|
236 | self.flagIsNewFile | |
|
237 | self.flagIsNewBlock | |
|
238 | self.nTotalBlocks | |
|
239 | self.data_spc | |
|
240 | self.data_cspc | |
|
241 | self.data_dc | |
|
242 | ||
|
243 | Exceptions: | |
|
244 | Si un bloque leido no es un bloque valido | |
|
245 | """ | |
|
246 | blockOk_flag = False | |
|
247 | fpointer = self.fp.tell() | |
|
248 | ||
|
249 | spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra ) | |
|
250 | cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra ) | |
|
251 | dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) ) | |
|
252 | ||
|
253 | try: | |
|
254 | spc = spc.reshape( (self.nChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D | |
|
255 | if self.nPairs != 0: | |
|
256 | cspc = cspc.reshape( (self.nPairs, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D | |
|
257 | else: | |
|
258 | cspc = None | |
|
259 | dc = dc.reshape( (self.m_SystemHeader.numChannels, self.m_ProcessingHeader.numHeights) ) #transforma a un arreglo 2D | |
|
260 | except: | |
|
261 | print "Data file %s is invalid" % self.filename | |
|
262 | return 0 | |
|
263 | ||
|
264 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
265 | spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
266 |
|
|
|
267 | cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
268 | ||
|
269 | spc = numpy.transpose( spc, (0,2,1) ) | |
|
270 |
|
|
|
271 | ||
|
272 | self.data_spc = spc | |
|
273 | if cspc != None: | |
|
274 | self.data_cspc = cspc['real'] + cspc['imag']*1j | |
|
275 |
|
|
|
276 |
|
|
|
277 |
self.data_ |
|
|
278 | ||
|
279 |
self.data |
|
|
280 | self.flagIsNewFile = 0 | |
|
281 |
self. |
|
|
282 | ||
|
283 | self.nTotalBlocks += 1 | |
|
284 |
self. |
|
|
285 | ||
|
286 | return 1 | |
|
287 | ||
|
288 | ||
|
289 | def getData(self): | |
|
290 | """ | |
|
291 | Copia el buffer de lectura a la clase "Spectra", | |
|
292 | con todos los parametros asociados a este (metadata). cuando no hay datos en el buffer de | |
|
293 | lectura es necesario hacer una nueva lectura de los bloques de datos usando "readNextBlock" | |
|
294 | ||
|
295 |
|
|
|
296 | 0 : Si no hay mas archivos disponibles | |
|
297 | 1 : Si hizo una buena copia del buffer | |
|
298 | ||
|
299 |
|
|
|
300 | self.m_DataObj | |
|
301 | self.datablockIndex | |
|
302 | self.flagResetProcessing | |
|
303 | self.flagIsNewBlock | |
|
304 | """ | |
|
305 | ||
|
306 | if self.flagNoMoreFiles: return 0 | |
|
307 | ||
|
308 | self.flagResetProcessing = 0 | |
|
309 | self.flagIsNewBlock = 0 | |
|
310 | ||
|
311 | if self.__hasNotDataInBuffer(): | |
|
312 | ||
|
313 | if not( self.readNextBlock() ): | |
|
314 | return 0 | |
|
315 |
|
|
|
316 | self.updateDataHeader() | |
|
317 | ||
|
318 | if self.flagNoMoreFiles == 1: | |
|
319 | print 'Process finished' | |
|
320 |
|
|
|
321 | ||
|
322 | #data es un numpy array de 3 dmensiones (perfiles, alturas y canales) | |
|
323 | ||
|
324 | if self.data_dc == None: | |
|
325 | self.m_DataObj.flagNoData = True | |
|
326 | return 0 | |
|
327 | ||
|
328 | self.m_DataObj.flagNoData = False | |
|
329 | self.m_DataObj.flagResetProcessing = self.flagResetProcessing | |
|
330 | ||
|
331 | self.m_DataObj.data_spc = self.data_spc | |
|
332 | self.m_DataObj.data_cspc = self.data_cspc | |
|
333 |
self.m_DataObj. |
|
|
334 | ||
|
335 |
|
|
|
336 | ||
|
337 | ||
|
338 | class SpectraWriter(JRODataWriter): | |
|
339 | ||
|
340 | """ | |
|
341 | Esta clase permite escribir datos de espectros a archivos procesados (.pdata). La escritura | |
|
342 | de los datos siempre se realiza por bloques. | |
|
343 | """ | |
|
344 |
|
|
|
345 | m_DataObj = None | |
|
346 | ||
|
347 | shape_spc_Buffer = None | |
|
348 | shape_cspc_Buffer = None | |
|
349 | shape_dc_Buffer = None | |
|
350 | ||
|
351 | data_spc = None | |
|
352 |
|
|
|
353 |
|
|
|
354 | ||
|
355 | ||
|
356 | def __init__(self, m_Spectra=None): | |
|
357 | """ | |
|
358 | Inicializador de la clase SpectraWriter para la escritura de datos de espectros. | |
|
359 | ||
|
360 | Affected: | |
|
361 | self.m_DataObj | |
|
362 | self.m_BasicHeader | |
|
363 | self.m_SystemHeader | |
|
364 | self.m_RadarControllerHeader | |
|
365 | self.m_ProcessingHeader | |
|
366 | ||
|
367 | Return: None | |
|
368 | """ | |
|
369 | if m_Spectra == None: | |
|
370 | m_Spectra = Spectra() | |
|
371 | ||
|
372 | if not( isinstance(m_Spectra, Spectra) ): | |
|
373 | raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object" | |
|
374 | ||
|
375 | self.m_DataObj = m_Spectra | |
|
376 | ||
|
377 | self.ext = ".pdata" | |
|
378 | ||
|
379 | self.optchar = "P" | |
|
380 | ||
|
381 | self.shape_spc_Buffer = None | |
|
382 | self.shape_cspc_Buffer = None | |
|
383 | self.shape_dc_Buffer = None | |
|
384 | ||
|
385 | self.data_spc = None | |
|
386 |
self. |
|
|
387 |
self. |
|
|
388 | ||
|
389 | #################################### | |
|
390 | ||
|
391 |
self. |
|
|
392 | ||
|
393 | self.nWriteBlocks = 0 | |
|
394 | ||
|
395 | self.flagIsNewFile = 1 | |
|
396 | ||
|
397 | self.nTotalBlocks = 0 | |
|
398 | ||
|
399 | self.flagIsNewBlock = 0 | |
|
400 | ||
|
401 | self.flagNoMoreFiles = 0 | |
|
402 | ||
|
403 | self.setFile = None | |
|
404 | ||
|
405 | self.dataType = None | |
|
406 | ||
|
407 | self.path = None | |
|
408 | ||
|
409 | self.noMoreFiles = 0 | |
|
410 | ||
|
411 | self.filename = None | |
|
412 | ||
|
413 | self.m_BasicHeader= BasicHeader() | |
|
414 | ||
|
415 | self.m_SystemHeader = SystemHeader() | |
|
416 | ||
|
417 | self.m_RadarControllerHeader = RadarControllerHeader() | |
|
418 | ||
|
419 | self.m_ProcessingHeader = ProcessingHeader() | |
|
420 | ||
|
421 |
|
|
|
422 | def hasAllDataInBuffer(self): | |
|
423 | return 1 | |
|
424 | ||
|
425 | ||
|
426 | def setBlockDimension(self): | |
|
427 | """ | |
|
428 | Obtiene las formas dimensionales del los subbloques de datos que componen un bloque | |
|
429 | ||
|
430 | Affected: | |
|
431 | self.shape_spc_Buffer | |
|
432 | self.shape_cspc_Buffer | |
|
433 | self.shape_dc_Buffer | |
|
434 | ||
|
435 | Return: None | |
|
436 | """ | |
|
437 |
self.shape_spc_Buffer |
|
|
438 | self.m_ProcessingHeader.numHeights, | |
|
439 | self.m_ProcessingHeader.profilesPerBlock) | |
|
440 | ||
|
441 | self.shape_cspc_Buffer = (self.m_DataObj.nPairs, | |
|
442 | self.m_ProcessingHeader.numHeights, | |
|
443 |
|
|
|
444 | ||
|
445 | self.shape_dc_Buffer = (self.m_SystemHeader.numChannels, | |
|
446 | self.m_ProcessingHeader.numHeights) | |
|
447 | ||
|
448 | ||
|
449 | def writeBlock(self): | |
|
450 | """ | |
|
451 | Escribe el buffer en el file designado | |
|
452 | ||
|
453 | Affected: | |
|
454 | self.data_spc | |
|
455 | self.data_cspc | |
|
456 | self.data_dc | |
|
457 | self.flagIsNewFile | |
|
458 | self.flagIsNewBlock | |
|
459 |
self. |
|
|
460 |
self. |
|
|
461 | ||
|
462 | Return: None | |
|
463 | """ | |
|
464 | ||
|
465 | spc = numpy.transpose( self.data_spc, (0,2,1) ) | |
|
466 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
467 | spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
468 | data = spc.reshape((-1)) | |
|
469 | data.tofile(self.fp) | |
|
470 | ||
|
471 | if self.data_cspc != None: | |
|
472 | data = numpy.zeros( self.shape_cspc_Buffer, self.dataType ) | |
|
473 | cspc = numpy.transpose( self.data_cspc, (0,2,1) ) | |
|
474 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
475 | cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
476 | data['real'] = cspc.real | |
|
477 | data['imag'] = cspc.imag | |
|
478 | data = data.reshape((-1)) | |
|
479 | data.tofile(self.fp) | |
|
480 | ||
|
481 | data = numpy.zeros( self.shape_dc_Buffer, self.dataType ) | |
|
482 | dc = self.data_dc | |
|
483 | data['real'] = dc.real | |
|
484 | data['imag'] = dc.imag | |
|
485 | data = data.reshape((-1)) | |
|
486 | data.tofile(self.fp) | |
|
487 | ||
|
488 | self.data_spc.fill(0) | |
|
489 | self.data_dc.fill(0) | |
|
490 | if self.data_cspc != None: | |
|
491 | self.data_cspc.fill(0) | |
|
492 | ||
|
493 | self.flagIsNewFile = 0 | |
|
494 | self.flagIsNewBlock = 1 | |
|
495 |
self. |
|
|
496 | self.nWriteBlocks += 1 | |
|
497 | ||
|
498 | ||
|
499 | def putData(self): | |
|
500 | """ | |
|
501 | Setea un bloque de datos y luego los escribe en un file | |
|
502 |
|
|
|
503 |
|
|
|
504 | self.data_spc | |
|
505 | self.data_cspc | |
|
506 | self.data_dc | |
|
507 | ||
|
508 |
|
|
|
509 | 0 : Si no hay data o no hay mas files que puedan escribirse | |
|
510 | 1 : Si se escribio la data de un bloque en un file | |
|
511 | """ | |
|
512 | self.flagIsNewBlock = 0 | |
|
513 | ||
|
514 | if self.m_DataObj.flagNoData: | |
|
515 | return 0 | |
|
516 |
|
|
|
517 | if self.m_DataObj.flagResetProcessing: | |
|
518 | self.data_spc.fill(0) | |
|
519 | self.data_cspc.fill(0) | |
|
520 | self.data_dc.fill(0) | |
|
521 | self.setNextFile() | |
|
522 | ||
|
523 | self.data_spc = self.m_DataObj.data_spc | |
|
524 | self.data_cspc = self.m_DataObj.data_cspc | |
|
525 | self.data_dc = self.m_DataObj.data_dc | |
|
526 | ||
|
527 | # #self.m_ProcessingHeader.dataBlocksPerFile) | |
|
528 | if self.hasAllDataInBuffer(): | |
|
529 | self.getDataHeader() | |
|
530 | self.writeNextBlock() | |
|
531 | ||
|
532 | if self.flagNoMoreFiles: | |
|
533 | #print 'Process finished' | |
|
534 | return 0 | |
|
535 | ||
|
1 | ''' | |
|
2 | File: SpectraIO.py | |
|
3 | Created on 20/02/2012 | |
|
4 | ||
|
5 | @author $Author$ | |
|
6 | @version $Id$ | |
|
7 | ''' | |
|
8 | ||
|
9 | import os, sys | |
|
10 | import numpy | |
|
11 | import glob | |
|
12 | import fnmatch | |
|
13 | import time, datetime | |
|
14 | ||
|
15 | path = os.path.split(os.getcwd())[0] | |
|
16 | sys.path.append(path) | |
|
17 | ||
|
18 | from Model.JROHeader import * | |
|
19 | from Model.Spectra import Spectra | |
|
20 | ||
|
21 | from JRODataIO import JRODataReader | |
|
22 | from JRODataIO import JRODataWriter | |
|
23 | from JRODataIO import isNumber | |
|
24 | ||
|
25 | ||
|
26 | class SpectraReader(JRODataReader): | |
|
27 | """ | |
|
28 | Esta clase permite leer datos de espectros desde archivos procesados (.pdata). La lectura | |
|
29 | de los datos siempre se realiza por bloques. Los datos leidos (array de 3 dimensiones) | |
|
30 | son almacenados en tres buffer's para el Self Spectra, el Cross Spectra y el DC Channel. | |
|
31 | ||
|
32 | paresCanalesIguales * alturas * perfiles (Self Spectra) | |
|
33 | paresCanalesDiferentes * alturas * perfiles (Cross Spectra) | |
|
34 | canales * alturas (DC Channels) | |
|
35 | ||
|
36 | Esta clase contiene instancias (objetos) de las clases BasicHeader, SystemHeader, | |
|
37 | RadarControllerHeader y Spectra. Los tres primeros se usan para almacenar informacion de la | |
|
38 | cabecera de datos (metadata), y el cuarto (Spectra) para obtener y almacenar un bloque de | |
|
39 | datos desde el "buffer" cada vez que se ejecute el metodo "getData". | |
|
40 | ||
|
41 | Example: | |
|
42 | dpath = "/home/myuser/data" | |
|
43 | ||
|
44 | startTime = datetime.datetime(2010,1,20,0,0,0,0,0,0) | |
|
45 | ||
|
46 | endTime = datetime.datetime(2010,1,21,23,59,59,0,0,0) | |
|
47 | ||
|
48 | readerObj = SpectraReader() | |
|
49 | ||
|
50 | readerObj.setup(dpath, startTime, endTime) | |
|
51 | ||
|
52 | while(True): | |
|
53 | ||
|
54 | readerObj.getData() | |
|
55 | ||
|
56 | print readerObj.m_Spectra.data | |
|
57 | ||
|
58 | if readerObj.flagNoMoreFiles: | |
|
59 | break | |
|
60 | ||
|
61 | """ | |
|
62 | m_DataObj = None | |
|
63 | ||
|
64 | data_spc = None | |
|
65 | data_cspc = None | |
|
66 | data_dc = None | |
|
67 | ||
|
68 | pts2read_SelfSpectra = 0 | |
|
69 | pts2read_CrossSpectra = 0 | |
|
70 | pts2read_DCchannels = 0 | |
|
71 | ||
|
72 | nChannels = 0 | |
|
73 | ||
|
74 | nPairs = 0 | |
|
75 | ||
|
76 | #pairList = None | |
|
77 | ||
|
78 | channelList = None | |
|
79 | ||
|
80 | def __init__(self, m_Spectra=None): | |
|
81 | """ | |
|
82 | Inicializador de la clase SpectraReader para la lectura de datos de espectros. | |
|
83 | ||
|
84 | Inputs: | |
|
85 | m_Spectra : Objeto de la clase Spectra. Este objeto sera utilizado para | |
|
86 | almacenar un perfil de datos cada vez que se haga un requerimiento | |
|
87 | (getData). El perfil sera obtenido a partir del buffer de datos, | |
|
88 | si el buffer esta vacio se hara un nuevo proceso de lectura de un | |
|
89 | bloque de datos. | |
|
90 | Si este parametro no es pasado se creara uno internamente. | |
|
91 | ||
|
92 | Affected: | |
|
93 | self.m_DataObj | |
|
94 | ||
|
95 | Return : None | |
|
96 | """ | |
|
97 | if m_Spectra == None: | |
|
98 | m_Spectra = Spectra() | |
|
99 | ||
|
100 | if not( isinstance(m_Spectra, Spectra) ): | |
|
101 | raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object" | |
|
102 | ||
|
103 | self.m_DataObj = m_Spectra | |
|
104 | ||
|
105 | self.data_spc = None | |
|
106 | self.data_cspc = None | |
|
107 | self.data_dc = None | |
|
108 | ||
|
109 | self.pts2read_SelfSpectra = 0 | |
|
110 | self.pts2read_CrossSpectra = 0 | |
|
111 | self.pts2read_DCs = 0 | |
|
112 | ||
|
113 | self.nChannels = 0 | |
|
114 | ||
|
115 | self.nPairs = 0 | |
|
116 | ||
|
117 | self.ext = ".pdata" | |
|
118 | ||
|
119 | self.optchar = "P" | |
|
120 | ||
|
121 | ###################### | |
|
122 | ||
|
123 | self.m_BasicHeader = BasicHeader() | |
|
124 | ||
|
125 | self.m_SystemHeader = SystemHeader() | |
|
126 | ||
|
127 | self.m_RadarControllerHeader = RadarControllerHeader() | |
|
128 | ||
|
129 | self.m_ProcessingHeader = ProcessingHeader() | |
|
130 | ||
|
131 | self.online = 0 | |
|
132 | ||
|
133 | self.fp = None | |
|
134 | ||
|
135 | self.fileSizeByHeader = None | |
|
136 | ||
|
137 | self.filenameList = [] | |
|
138 | ||
|
139 | self.filename = None | |
|
140 | ||
|
141 | self.fileSize = None | |
|
142 | ||
|
143 | self.firstHeaderSize = 0 | |
|
144 | ||
|
145 | self.basicHeaderSize = 24 | |
|
146 | ||
|
147 | self.dataType = None | |
|
148 | ||
|
149 | self.maxTimeStep = 30 | |
|
150 | ||
|
151 | self.flagNoMoreFiles = 0 | |
|
152 | ||
|
153 | self.set = 0 | |
|
154 | ||
|
155 | self.path = None | |
|
156 | ||
|
157 | self.delay = 3 #seconds | |
|
158 | ||
|
159 | self.nTries = 3 #quantity tries | |
|
160 | ||
|
161 | self.nFiles = 3 #number of files for searching | |
|
162 | ||
|
163 | self.nReadBlocks = 0 | |
|
164 | ||
|
165 | self.flagIsNewFile = 1 | |
|
166 | ||
|
167 | self.ippSeconds = 0 | |
|
168 | ||
|
169 | self.flagResetProcessing = 0 | |
|
170 | ||
|
171 | self.flagIsNewBlock = 0 | |
|
172 | ||
|
173 | self.nTotalBlocks = 0 | |
|
174 | ||
|
175 | self.blocksize = 0 | |
|
176 | ||
|
177 | #pairList = None | |
|
178 | ||
|
179 | channelList = None | |
|
180 | ||
|
181 | ||
|
182 | def __hasNotDataInBuffer(self): | |
|
183 | return 1 | |
|
184 | ||
|
185 | ||
|
186 | def getBlockDimension(self): | |
|
187 | """ | |
|
188 | Obtiene la cantidad de puntos a leer por cada bloque de datos | |
|
189 | ||
|
190 | Affected: | |
|
191 | self.nChannels | |
|
192 | self.nPairs | |
|
193 | self.pts2read_SelfSpectra | |
|
194 | self.pts2read_CrossSpectra | |
|
195 | self.pts2read_DCchannels | |
|
196 | self.blocksize | |
|
197 | self.m_DataObj.nChannels | |
|
198 | self.m_DataObj.nPairs | |
|
199 | ||
|
200 | Return: | |
|
201 | None | |
|
202 | """ | |
|
203 | self.nChannels = 0 | |
|
204 | self.nPairs = 0 | |
|
205 | self.pairList = [] | |
|
206 | ||
|
207 | for i in range( 0, self.m_ProcessingHeader.totalSpectra*2, 2 ): | |
|
208 | if self.m_ProcessingHeader.spectraComb[i] == self.m_ProcessingHeader.spectraComb[i+1]: | |
|
209 | self.nChannels = self.nChannels + 1 #par de canales iguales | |
|
210 | else: | |
|
211 | self.nPairs = self.nPairs + 1 #par de canales diferentes | |
|
212 | self.pairList.append( (self.m_ProcessingHeader.spectraComb[i], self.m_ProcessingHeader.spectraComb[i+1]) ) | |
|
213 | ||
|
214 | pts2read = self.m_ProcessingHeader.numHeights * self.m_ProcessingHeader.profilesPerBlock | |
|
215 | ||
|
216 | self.pts2read_SelfSpectra = int( self.nChannels * pts2read ) | |
|
217 | self.pts2read_CrossSpectra = int( self.nPairs * pts2read ) | |
|
218 | self.pts2read_DCchannels = int( self.m_SystemHeader.numChannels * self.m_ProcessingHeader.numHeights ) | |
|
219 | ||
|
220 | self.blocksize = self.pts2read_SelfSpectra + self.pts2read_CrossSpectra + self.pts2read_DCchannels | |
|
221 | ||
|
222 | self.channelList = numpy.arange( self.nChannels ) | |
|
223 | ||
|
224 | ||
|
225 | def readBlock(self): | |
|
226 | """ | |
|
227 | Lee el bloque de datos desde la posicion actual del puntero del archivo | |
|
228 | (self.fp) y actualiza todos los parametros relacionados al bloque de datos | |
|
229 | (metadata + data). La data leida es almacenada en el buffer y el contador del buffer | |
|
230 | es seteado a 0 | |
|
231 | ||
|
232 | Return: None | |
|
233 | ||
|
234 | Variables afectadas: | |
|
235 | self.datablockIndex | |
|
236 | self.flagIsNewFile | |
|
237 | self.flagIsNewBlock | |
|
238 | self.nTotalBlocks | |
|
239 | self.data_spc | |
|
240 | self.data_cspc | |
|
241 | self.data_dc | |
|
242 | ||
|
243 | Exceptions: | |
|
244 | Si un bloque leido no es un bloque valido | |
|
245 | """ | |
|
246 | blockOk_flag = False | |
|
247 | fpointer = self.fp.tell() | |
|
248 | ||
|
249 | spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra ) | |
|
250 | cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra ) | |
|
251 | dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) ) | |
|
252 | ||
|
253 | try: | |
|
254 | spc = spc.reshape( (self.nChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D | |
|
255 | if self.nPairs != 0: | |
|
256 | cspc = cspc.reshape( (self.nPairs, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D | |
|
257 | else: | |
|
258 | cspc = None | |
|
259 | dc = dc.reshape( (self.m_SystemHeader.numChannels, self.m_ProcessingHeader.numHeights) ) #transforma a un arreglo 2D | |
|
260 | except: | |
|
261 | print "Data file %s is invalid" % self.filename | |
|
262 | return 0 | |
|
263 | ||
|
264 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
265 | spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
266 | ||
|
267 | if cspc != None: | |
|
268 | cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
269 | ||
|
270 | spc = numpy.transpose( spc, (0,2,1) ) | |
|
271 | ||
|
272 | if cspc != None: | |
|
273 | cspc = numpy.transpose( cspc, (0,2,1) ) | |
|
274 | ||
|
275 | ||
|
276 | if cspc != None: | |
|
277 | self.data_cspc = cspc['real'] + cspc['imag']*1j | |
|
278 | else: | |
|
279 | self.data_cspc = None | |
|
280 | ||
|
281 | self.data_spc = spc | |
|
282 | self.data_dc = dc['real'] + dc['imag']*1j | |
|
283 | ||
|
284 | self.datablockIndex = 0 | |
|
285 | self.flagIsNewFile = 0 | |
|
286 | self.flagIsNewBlock = 1 | |
|
287 | ||
|
288 | self.nTotalBlocks += 1 | |
|
289 | self.nReadBlocks += 1 | |
|
290 | ||
|
291 | return 1 | |
|
292 | ||
|
293 | ||
|
294 | def getData(self): | |
|
295 | """ | |
|
296 | Copia el buffer de lectura a la clase "Spectra", | |
|
297 | con todos los parametros asociados a este (metadata). cuando no hay datos en el buffer de | |
|
298 | lectura es necesario hacer una nueva lectura de los bloques de datos usando "readNextBlock" | |
|
299 | ||
|
300 | Return: | |
|
301 | 0 : Si no hay mas archivos disponibles | |
|
302 | 1 : Si hizo una buena copia del buffer | |
|
303 | ||
|
304 | Affected: | |
|
305 | self.m_DataObj | |
|
306 | self.datablockIndex | |
|
307 | self.flagResetProcessing | |
|
308 | self.flagIsNewBlock | |
|
309 | """ | |
|
310 | ||
|
311 | if self.flagNoMoreFiles: return 0 | |
|
312 | ||
|
313 | self.flagResetProcessing = 0 | |
|
314 | self.flagIsNewBlock = 0 | |
|
315 | ||
|
316 | if self.__hasNotDataInBuffer(): | |
|
317 | ||
|
318 | if not( self.readNextBlock() ): | |
|
319 | return 0 | |
|
320 | ||
|
321 | self.updateDataHeader() | |
|
322 | ||
|
323 | if self.flagNoMoreFiles == 1: | |
|
324 | print 'Process finished' | |
|
325 | return 0 | |
|
326 | ||
|
327 | #data es un numpy array de 3 dmensiones (perfiles, alturas y canales) | |
|
328 | ||
|
329 | if self.data_dc == None: | |
|
330 | self.m_DataObj.flagNoData = True | |
|
331 | return 0 | |
|
332 | ||
|
333 | self.m_DataObj.flagNoData = False | |
|
334 | self.m_DataObj.flagResetProcessing = self.flagResetProcessing | |
|
335 | ||
|
336 | self.m_DataObj.data_spc = self.data_spc | |
|
337 | self.m_DataObj.data_cspc = self.data_cspc | |
|
338 | self.m_DataObj.data_dc = self.data_dc | |
|
339 | ||
|
340 | return 1 | |
|
341 | ||
|
342 | ||
|
343 | class SpectraWriter(JRODataWriter): | |
|
344 | ||
|
345 | """ | |
|
346 | Esta clase permite escribir datos de espectros a archivos procesados (.pdata). La escritura | |
|
347 | de los datos siempre se realiza por bloques. | |
|
348 | """ | |
|
349 | ||
|
350 | m_DataObj = None | |
|
351 | ||
|
352 | shape_spc_Buffer = None | |
|
353 | shape_cspc_Buffer = None | |
|
354 | shape_dc_Buffer = None | |
|
355 | ||
|
356 | data_spc = None | |
|
357 | data_cspc = None | |
|
358 | data_dc = None | |
|
359 | ||
|
360 | ||
|
361 | def __init__(self, m_Spectra=None): | |
|
362 | """ | |
|
363 | Inicializador de la clase SpectraWriter para la escritura de datos de espectros. | |
|
364 | ||
|
365 | Affected: | |
|
366 | self.m_DataObj | |
|
367 | self.m_BasicHeader | |
|
368 | self.m_SystemHeader | |
|
369 | self.m_RadarControllerHeader | |
|
370 | self.m_ProcessingHeader | |
|
371 | ||
|
372 | Return: None | |
|
373 | """ | |
|
374 | if m_Spectra == None: | |
|
375 | m_Spectra = Spectra() | |
|
376 | ||
|
377 | if not( isinstance(m_Spectra, Spectra) ): | |
|
378 | raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object" | |
|
379 | ||
|
380 | self.m_DataObj = m_Spectra | |
|
381 | ||
|
382 | self.ext = ".pdata" | |
|
383 | ||
|
384 | self.optchar = "P" | |
|
385 | ||
|
386 | self.shape_spc_Buffer = None | |
|
387 | self.shape_cspc_Buffer = None | |
|
388 | self.shape_dc_Buffer = None | |
|
389 | ||
|
390 | self.data_spc = None | |
|
391 | self.data_cspc = None | |
|
392 | self.data_dc = None | |
|
393 | ||
|
394 | #################################### | |
|
395 | ||
|
396 | self.fp = None | |
|
397 | ||
|
398 | self.nWriteBlocks = 0 | |
|
399 | ||
|
400 | self.flagIsNewFile = 1 | |
|
401 | ||
|
402 | self.nTotalBlocks = 0 | |
|
403 | ||
|
404 | self.flagIsNewBlock = 0 | |
|
405 | ||
|
406 | self.flagNoMoreFiles = 0 | |
|
407 | ||
|
408 | self.setFile = None | |
|
409 | ||
|
410 | self.dataType = None | |
|
411 | ||
|
412 | self.path = None | |
|
413 | ||
|
414 | self.noMoreFiles = 0 | |
|
415 | ||
|
416 | self.filename = None | |
|
417 | ||
|
418 | self.m_BasicHeader= BasicHeader() | |
|
419 | ||
|
420 | self.m_SystemHeader = SystemHeader() | |
|
421 | ||
|
422 | self.m_RadarControllerHeader = RadarControllerHeader() | |
|
423 | ||
|
424 | self.m_ProcessingHeader = ProcessingHeader() | |
|
425 | ||
|
426 | ||
|
427 | def hasAllDataInBuffer(self): | |
|
428 | return 1 | |
|
429 | ||
|
430 | ||
|
431 | def setBlockDimension(self): | |
|
432 | """ | |
|
433 | Obtiene las formas dimensionales del los subbloques de datos que componen un bloque | |
|
434 | ||
|
435 | Affected: | |
|
436 | self.shape_spc_Buffer | |
|
437 | self.shape_cspc_Buffer | |
|
438 | self.shape_dc_Buffer | |
|
439 | ||
|
440 | Return: None | |
|
441 | """ | |
|
442 | self.shape_spc_Buffer = (self.m_DataObj.nChannels, | |
|
443 | self.m_ProcessingHeader.numHeights, | |
|
444 | self.m_ProcessingHeader.profilesPerBlock) | |
|
445 | ||
|
446 | self.shape_cspc_Buffer = (self.m_DataObj.nPairs, | |
|
447 | self.m_ProcessingHeader.numHeights, | |
|
448 | self.m_ProcessingHeader.profilesPerBlock) | |
|
449 | ||
|
450 | self.shape_dc_Buffer = (self.m_SystemHeader.numChannels, | |
|
451 | self.m_ProcessingHeader.numHeights) | |
|
452 | ||
|
453 | ||
|
454 | def writeBlock(self): | |
|
455 | """ | |
|
456 | Escribe el buffer en el file designado | |
|
457 | ||
|
458 | Affected: | |
|
459 | self.data_spc | |
|
460 | self.data_cspc | |
|
461 | self.data_dc | |
|
462 | self.flagIsNewFile | |
|
463 | self.flagIsNewBlock | |
|
464 | self.nTotalBlocks | |
|
465 | self.nWriteBlocks | |
|
466 | ||
|
467 | Return: None | |
|
468 | """ | |
|
469 | ||
|
470 | spc = numpy.transpose( self.data_spc, (0,2,1) ) | |
|
471 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
472 | spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
473 | data = spc.reshape((-1)) | |
|
474 | data.tofile(self.fp) | |
|
475 | ||
|
476 | if self.data_cspc != None: | |
|
477 | data = numpy.zeros( self.shape_cspc_Buffer, self.dataType ) | |
|
478 | cspc = numpy.transpose( self.data_cspc, (0,2,1) ) | |
|
479 | if not( self.m_ProcessingHeader.shif_fft ): | |
|
480 | cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones | |
|
481 | data['real'] = cspc.real | |
|
482 | data['imag'] = cspc.imag | |
|
483 | data = data.reshape((-1)) | |
|
484 | data.tofile(self.fp) | |
|
485 | ||
|
486 | data = numpy.zeros( self.shape_dc_Buffer, self.dataType ) | |
|
487 | dc = self.data_dc | |
|
488 | data['real'] = dc.real | |
|
489 | data['imag'] = dc.imag | |
|
490 | data = data.reshape((-1)) | |
|
491 | data.tofile(self.fp) | |
|
492 | ||
|
493 | self.data_spc.fill(0) | |
|
494 | self.data_dc.fill(0) | |
|
495 | if self.data_cspc != None: | |
|
496 | self.data_cspc.fill(0) | |
|
497 | ||
|
498 | self.flagIsNewFile = 0 | |
|
499 | self.flagIsNewBlock = 1 | |
|
500 | self.nTotalBlocks += 1 | |
|
501 | self.nWriteBlocks += 1 | |
|
502 | ||
|
503 | ||
|
504 | def putData(self): | |
|
505 | """ | |
|
506 | Setea un bloque de datos y luego los escribe en un file | |
|
507 | ||
|
508 | Affected: | |
|
509 | self.data_spc | |
|
510 | self.data_cspc | |
|
511 | self.data_dc | |
|
512 | ||
|
513 | Return: | |
|
514 | 0 : Si no hay data o no hay mas files que puedan escribirse | |
|
515 | 1 : Si se escribio la data de un bloque en un file | |
|
516 | """ | |
|
517 | self.flagIsNewBlock = 0 | |
|
518 | ||
|
519 | if self.m_DataObj.flagNoData: | |
|
520 | return 0 | |
|
521 | ||
|
522 | if self.m_DataObj.flagResetProcessing: | |
|
523 | self.data_spc.fill(0) | |
|
524 | self.data_cspc.fill(0) | |
|
525 | self.data_dc.fill(0) | |
|
526 | self.setNextFile() | |
|
527 | ||
|
528 | self.data_spc = self.m_DataObj.data_spc | |
|
529 | self.data_cspc = self.m_DataObj.data_cspc | |
|
530 | self.data_dc = self.m_DataObj.data_dc | |
|
531 | ||
|
532 | # #self.m_ProcessingHeader.dataBlocksPerFile) | |
|
533 | if self.hasAllDataInBuffer(): | |
|
534 | self.getDataHeader() | |
|
535 | self.writeNextBlock() | |
|
536 | ||
|
537 | if self.flagNoMoreFiles: | |
|
538 | #print 'Process finished' | |
|
539 | return 0 | |
|
540 | ||
|
536 | 541 | return 1 No newline at end of file |
@@ -1,57 +1,57 | |||
|
1 | ''' | |
|
2 | Created on 23/01/2012 | |
|
3 | ||
|
4 | @author $Author$ | |
|
5 | @version $Id$ | |
|
6 | ''' | |
|
7 | import os | |
|
8 | import sys | |
|
9 | import datetime | |
|
10 | import time | |
|
11 | ||
|
12 |
class TestIO |
|
|
13 | ||
|
14 | def __init__(self): | |
|
15 | self.setValues() | |
|
16 | self.createVoltageObjects() | |
|
17 | self.testReadVoltage() | |
|
18 | pass | |
|
19 | ||
|
20 | def setValues(self): | |
|
21 | ||
|
22 | ||
|
23 | self.path = '/Users/danielangelsuarezmunoz/Documents/Projects/testWR' | |
|
24 | self.startDateTime = datetime.datetime(2007,5,1,17,49,0) | |
|
25 | self.endDateTime = datetime.datetime(2007,5,1,18,15,0) | |
|
26 | ||
|
27 | def createVoltageObjects(self): | |
|
28 | path = os.path.split(os.getcwd())[0] | |
|
29 | sys.path.append(path) | |
|
30 | ||
|
31 | from IO.VoltageIO import VoltageReader | |
|
32 | from IO.VoltageIO import VoltageWriter | |
|
33 | from Model.Voltage import Voltage | |
|
34 | ||
|
35 | self.voltageModelObj = Voltage() | |
|
36 | self.voltageReaderObj = VoltageReader(self.voltageModelObj) | |
|
37 | self.voltageReaderObj.setup(self.path, self.startDateTime, self.endDateTime) | |
|
38 | ||
|
39 | # self.voltageWriterObj = VoltageWriter(self.voltageModelObj) | |
|
40 | # self.voltageWriterObj.setup('/Users/danielangelsuarezmunoz/Documents/Projects/testWR') | |
|
41 | ||
|
42 | ||
|
43 | def testReadVoltage(self): | |
|
44 | while(not(self.voltageReaderObj.noMoreFiles)): | |
|
45 | ||
|
46 | self.voltageReaderObj.getData() | |
|
47 | if self.voltageReaderObj.flagResetProcessing: | |
|
48 | print 'jump' | |
|
49 | ||
|
50 | if self.voltageReaderObj.flagIsNewBlock: | |
|
51 | print 'Block No %04d, Time: %s'%(self.voltageReaderObj.nTotalBlocks, | |
|
52 | datetime.datetime.fromtimestamp(self.voltageReaderObj.m_BasicHeader.utc)) | |
|
53 | ||
|
54 | # self.voltageWriterObj.putData() | |
|
55 | ||
|
56 | if __name__ == '__main__': | |
|
1 | ''' | |
|
2 | Created on 23/01/2012 | |
|
3 | ||
|
4 | @author $Author$ | |
|
5 | @version $Id$ | |
|
6 | ''' | |
|
7 | import os | |
|
8 | import sys | |
|
9 | import datetime | |
|
10 | import time | |
|
11 | ||
|
12 | class TestIO: | |
|
13 | ||
|
14 | def __init__(self): | |
|
15 | self.setValues() | |
|
16 | self.createVoltageObjects() | |
|
17 | self.testReadVoltage() | |
|
18 | pass | |
|
19 | ||
|
20 | def setValues(self): | |
|
21 | ||
|
22 | ||
|
23 | self.path = '/Users/danielangelsuarezmunoz/Documents/Projects/testWR' | |
|
24 | self.startDateTime = datetime.datetime(2007,5,1,17,49,0) | |
|
25 | self.endDateTime = datetime.datetime(2007,5,1,18,15,0) | |
|
26 | ||
|
27 | def createVoltageObjects(self): | |
|
28 | path = os.path.split(os.getcwd())[0] | |
|
29 | sys.path.append(path) | |
|
30 | ||
|
31 | from IO.VoltageIO import VoltageReader | |
|
32 | from IO.VoltageIO import VoltageWriter | |
|
33 | from Model.Voltage import Voltage | |
|
34 | ||
|
35 | self.voltageModelObj = Voltage() | |
|
36 | self.voltageReaderObj = VoltageReader(self.voltageModelObj) | |
|
37 | self.voltageReaderObj.setup(self.path, self.startDateTime, self.endDateTime) | |
|
38 | ||
|
39 | # self.voltageWriterObj = VoltageWriter(self.voltageModelObj) | |
|
40 | # self.voltageWriterObj.setup('/Users/danielangelsuarezmunoz/Documents/Projects/testWR') | |
|
41 | ||
|
42 | ||
|
43 | def testReadVoltage(self): | |
|
44 | while(not(self.voltageReaderObj.noMoreFiles)): | |
|
45 | ||
|
46 | self.voltageReaderObj.getData() | |
|
47 | if self.voltageReaderObj.flagResetProcessing: | |
|
48 | print 'jump' | |
|
49 | ||
|
50 | if self.voltageReaderObj.flagIsNewBlock: | |
|
51 | print 'Block No %04d, Time: %s'%(self.voltageReaderObj.nTotalBlocks, | |
|
52 | datetime.datetime.fromtimestamp(self.voltageReaderObj.m_BasicHeader.utc)) | |
|
53 | ||
|
54 | # self.voltageWriterObj.putData() | |
|
55 | ||
|
56 | if __name__ == '__main__': | |
|
57 | 57 | TestIO() No newline at end of file |
@@ -297,7 +297,7 class VoltageReader(JRODataReader): | |||
|
297 | 297 | return 1 #self.m_DataObj.data |
|
298 | 298 | |
|
299 | 299 | |
|
300 |
class VoltageWriter( |
|
|
300 | class VoltageWriter(JRODataWriter): | |
|
301 | 301 | """ |
|
302 | 302 | Esta clase permite escribir datos de voltajes a archivos procesados (.r). La escritura |
|
303 | 303 | de los datos siempre se realiza por bloques. |
General Comments 0
You need to be logged in to leave comments.
Login now