##// END OF EJS Templates
SpectraIO.py :...
Victor Sarmiento -
r65:f3dce6e9ecb2
parent child
Show More
@@ -1,434 +1,433
1 '''
1 '''
2 File: SpectraIO.py
2 File: SpectraIO.py
3 Created on 20/02/2012
3 Created on 20/02/2012
4
4
5 @author $Author$
5 @author $Author$
6 @version $Id$
6 @version $Id$
7 '''
7 '''
8
8
9 import os, sys
9 import os, sys
10 import numpy
10 import numpy
11 import glob
11 import glob
12 import fnmatch
12 import fnmatch
13 import time, datetime
13 import time, datetime
14
14
15 path = os.path.split(os.getcwd())[0]
15 path = os.path.split(os.getcwd())[0]
16 sys.path.append(path)
16 sys.path.append(path)
17
17
18 from Model.JROHeader import *
18 from Model.JROHeader import *
19 from Model.Spectra import Spectra
19 from Model.Spectra import Spectra
20
20
21 from DataIO import JRODataReader
21 from DataIO import JRODataReader
22 from DataIO import JRODataWriter
22 from DataIO import JRODataWriter
23 from DataIO import isNumber
23 from DataIO import isNumber
24
24
25
25
26 class SpectraReader( JRODataReader ):
26 class SpectraReader( JRODataReader ):
27 """
27 """
28 Esta clase permite leer datos de espectros desde archivos procesados (.pdata). La lectura
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)
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.
30 son almacenados en tres buffer's para el Self Spectra, el Cross Spectra y el DC Channel.
31
31
32 pares * alturas * perfiles (Self Spectra)
32 paresCanalesIguales * alturas * perfiles (Self Spectra)
33 canales * alturas * perfiles (Cross Spectra)
33 paresCanalesDiferentes * alturas * perfiles (Cross Spectra)
34 canales * alturas (DC Channels)
34 canales * alturas (DC Channels)
35
35
36 Esta clase contiene instancias (objetos) de las clases BasicHeader, SystemHeader,
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
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
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".
39 datos desde el "buffer" cada vez que se ejecute el metodo "getData".
40
40
41 Example:
41 Example:
42 dpath = "/home/myuser/data"
42 dpath = "/home/myuser/data"
43
43
44 startTime = datetime.datetime(2010,1,20,0,0,0,0,0,0)
44 startTime = datetime.datetime(2010,1,20,0,0,0,0,0,0)
45
45
46 endTime = datetime.datetime(2010,1,21,23,59,59,0,0,0)
46 endTime = datetime.datetime(2010,1,21,23,59,59,0,0,0)
47
47
48 readerObj = SpectraReader()
48 readerObj = SpectraReader()
49
49
50 readerObj.setup(dpath, startTime, endTime)
50 readerObj.setup(dpath, startTime, endTime)
51
51
52 while(True):
52 while(True):
53
53
54 readerObj.getData()
54 readerObj.getData()
55
55
56 print readerObj.m_Spectra.data
56 print readerObj.m_Spectra.data
57
57
58 if readerObj.flagNoMoreFiles:
58 if readerObj.flagNoMoreFiles:
59 break
59 break
60
60
61 """
61 """
62 m_DataObj = None
62 m_DataObj = None
63
63
64 data_spc = None
64 data_spc = None
65 data_cspc = None
65 data_cspc = None
66 data_dc = None
66 data_dc = None
67
67
68 nPairsEqualChannels = 0
69
70 nPairsUnequalChannels = 0
71
72 pts2read_SelfSpectra = 0
68 pts2read_SelfSpectra = 0
73 pts2read_CrossSpectra = 0
69 pts2read_CrossSpectra = 0
74 pts2read_DCchannels = 0
70 pts2read_DCchannels = 0
75
71
72 nPairsEqualChannels = 0
73
74 nPairsUnequalChannels = 0
75
76 ext = ".pdata"
76 ext = ".pdata"
77
77
78 optchar = "P"
79
78
80
79 def __init__(self, m_Spectra=None):
81 def __init__(self, m_Spectra=None):
80 """
82 """
81 Inicializador de la clase SpectraReader para la lectura de datos de espectros.
83 Inicializador de la clase SpectraReader para la lectura de datos de espectros.
82
84
83 Inputs:
85 Inputs:
84 m_Spectra : Objeto de la clase Spectra. Este objeto sera utilizado para
86 m_Spectra : Objeto de la clase Spectra. Este objeto sera utilizado para
85 almacenar un perfil de datos cada vez que se haga un requerimiento
87 almacenar un perfil de datos cada vez que se haga un requerimiento
86 (getData). El perfil sera obtenido a partir del buffer de datos,
88 (getData). El perfil sera obtenido a partir del buffer de datos,
87 si el buffer esta vacio se hara un nuevo proceso de lectura de un
89 si el buffer esta vacio se hara un nuevo proceso de lectura de un
88 bloque de datos.
90 bloque de datos.
89 Si este parametro no es pasado se creara uno internamente.
91 Si este parametro no es pasado se creara uno internamente.
90
92
91 Affected:
93 Affected:
92 self.m_DataObj
94 self.m_DataObj
93
95
94 Return : None
96 Return : None
95 """
97 """
96 if m_Spectra == None:
98 if m_Spectra == None:
97 m_Spectra = Spectra()
99 m_Spectra = Spectra()
98
100
99 if not( isinstance(m_Spectra, Spectra) ):
101 if not( isinstance(m_Spectra, Spectra) ):
100 raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object"
102 raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object"
101
103
102 self.m_DataObj = m_Spectra
104 self.m_DataObj = m_Spectra
103
105
104
106
105 def __hasNotDataInBuffer(self):
107 def __hasNotDataInBuffer(self):
106 return 1
108 return 1
107
109
108
110
109 def getBlockDimension(self):
111 def getBlockDimension(self):
110 """
112 """
111 Obtiene la cantidad de puntos a leer por cada bloque de datos
113 Obtiene la cantidad de puntos a leer por cada bloque de datos
112
114
113 Affected:
115 Affected:
114 self.nPairsEqualChannels
116 self.nPairsEqualChannels
115 self.nPairsUnequalChannels
117 self.nPairsUnequalChannels
116 self.pts2read_SelfSpectra
118 self.pts2read_SelfSpectra
117 self.pts2read_CrossSpectra
119 self.pts2read_CrossSpectra
118 self.pts2read_DCchannels
120 self.pts2read_DCchannels
119 self.blocksize
121 self.blocksize
120 self.m_DataObj.nPairsEqualChannels
122 self.m_DataObj.nPairsEqualChannels
121 self.m_DataObj.nPairsUnequalChannels
123 self.m_DataObj.nPairsUnequalChannels
122
124
123 Return:
125 Return:
124 None
126 None
125 """
127 """
126 self.nPairsEqualChannels = 0
128 self.nPairsEqualChannels = 0
127 self.nPairsUnequalChannels = 0
129 self.nPairsUnequalChannels = 0
128
130
129 for i in range( 0, self.m_ProcessingHeader.totalSpectra*2, 2 ):
131 for i in range( 0, self.m_ProcessingHeader.totalSpectra*2, 2 ):
130 if self.m_ProcessingHeader.spectraComb[i] == self.m_ProcessingHeader.spectraComb[i+1]:
132 if self.m_ProcessingHeader.spectraComb[i] == self.m_ProcessingHeader.spectraComb[i+1]:
131 self.nPairsEqualChannels = self.nPairsEqualChannels + 1 #par de canales iguales
133 self.nPairsEqualChannels = self.nPairsEqualChannels + 1 #par de canales iguales
132 else:
134 else:
133 self.nPairsUnequalChannels = self.nPairsUnequalChannels + 1 #par de canales diferentes
135 self.nPairsUnequalChannels = self.nPairsUnequalChannels + 1 #par de canales diferentes
134
136
135 pts2read = self.m_ProcessingHeader.numHeights * self.m_ProcessingHeader.profilesPerBlock
137 pts2read = self.m_ProcessingHeader.numHeights * self.m_ProcessingHeader.profilesPerBlock
136
138
137 self.pts2read_SelfSpectra = int( self.nPairsEqualChannels * pts2read )
139 self.pts2read_SelfSpectra = int( self.nPairsEqualChannels * pts2read )
138 self.pts2read_CrossSpectra = int( self.nPairsUnequalChannels * pts2read )
140 self.pts2read_CrossSpectra = int( self.nPairsUnequalChannels * pts2read )
139 self.pts2read_DCchannels = int( self.m_SystemHeader.numChannels * self.m_ProcessingHeader.numHeights )
141 self.pts2read_DCchannels = int( self.m_SystemHeader.numChannels * self.m_ProcessingHeader.numHeights )
140
142
141 self.blocksize = self.pts2read_SelfSpectra + self.pts2read_CrossSpectra + self.pts2read_DCchannels
143 self.blocksize = self.pts2read_SelfSpectra + self.pts2read_CrossSpectra + self.pts2read_DCchannels
142
144
143 self.m_DataObj.nPairsEqualChannels = self.nPairsEqualChannels
145 self.m_DataObj.nPairsEqualChannels = self.nPairsEqualChannels
144 self.m_DataObj.nPairsUnequalChannels = self.nPairsUnequalChannels
146 self.m_DataObj.nPairsUnequalChannels = self.nPairsUnequalChannels
145
147
146
148
147 def readBlock(self):
149 def readBlock(self):
148 """
150 """
149 Lee el bloque de datos desde la posicion actual del puntero del archivo
151 Lee el bloque de datos desde la posicion actual del puntero del archivo
150 (self.fp) y actualiza todos los parametros relacionados al bloque de datos
152 (self.fp) y actualiza todos los parametros relacionados al bloque de datos
151 (metadata + data). La data leida es almacenada en el buffer y el contador del buffer
153 (metadata + data). La data leida es almacenada en el buffer y el contador del buffer
152 es seteado a 0
154 es seteado a 0
153
155
154 Return: None
156 Return: None
155
157
156 Variables afectadas:
158 Variables afectadas:
157 self.datablockIndex
159 self.datablockIndex
158 self.flagIsNewFile
160 self.flagIsNewFile
159 self.flagIsNewBlock
161 self.flagIsNewBlock
160 self.nReadBlocks
162 self.nReadBlocks
161 self.data_spc
163 self.data_spc
162 self.data_cspc
164 self.data_cspc
163 self.data_dc
165 self.data_dc
164
166
165 Exceptions:
167 Exceptions:
166 Si un bloque leido no es un bloque valido
168 Si un bloque leido no es un bloque valido
167 """
169 """
168 blockOk_flag = False
170 blockOk_flag = False
169 fpointer = self.fp.tell()
171 fpointer = self.fp.tell()
170
172
171 spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra )
173 spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra )
172 cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra )
174 cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra )
173 dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
175 dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
174
176
175 if self.online:
177 if self.online:
176 if (spc.size + cspc.size + dc.size) != self.blocksize:
178 if (spc.size + cspc.size + dc.size) != self.blocksize:
177 for nTries in range( self.nTries ):
179 for nTries in range( self.nTries ):
178 print "\tWaiting %0.2f sec for the next block, try %03d ..." % (self.delay, nTries+1)
180 print "\tWaiting %0.2f sec for the next block, try %03d ..." % (self.delay, nTries+1)
179 time.sleep( self.delay )
181 time.sleep( self.delay )
180 self.fp.seek( fpointer )
182 self.fp.seek( fpointer )
181 fpointer = self.fp.tell()
183 fpointer = self.fp.tell()
184
182 spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra )
185 spc = numpy.fromfile( self.fp, self.dataType[0], self.pts2read_SelfSpectra )
183 cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra )
186 cspc = numpy.fromfile( self.fp, self.dataType, self.pts2read_CrossSpectra )
184 dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
187 dc = numpy.fromfile( self.fp, self.dataType, self.pts2read_DCchannels ) #int(self.m_ProcessingHeader.numHeights*self.m_SystemHeader.numChannels) )
185
188
186 if (spc.size + cspc.size + dc.size) == self.blocksize:
189 if (spc.size + cspc.size + dc.size) == self.blocksize:
187 blockOk_flag = True
190 blockOk_flag = True
188 break
191 break
192
189 if not( blockOk_flag ):
193 if not( blockOk_flag ):
190 return 0
194 return 0
191
195
192 try:
196 try:
193 spc = spc.reshape( (self.nPairsEqualChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D
197 spc = spc.reshape( (self.nPairsEqualChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D
194 cspc = cspc.reshape( (self.nPairsUnequalChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D
198 cspc = cspc.reshape( (self.nPairsUnequalChannels, self.m_ProcessingHeader.numHeights, self.m_ProcessingHeader.profilesPerBlock) ) #transforma a un arreglo 3D
195 dc = dc.reshape( (self.m_SystemHeader.numChannels, self.m_ProcessingHeader.numHeights) ) #transforma a un arreglo 2D
199 dc = dc.reshape( (self.m_SystemHeader.numChannels, self.m_ProcessingHeader.numHeights) ) #transforma a un arreglo 2D
196 except:
200 except:
197 print "Data file %s is invalid" % self.filename
201 print "Data file %s is invalid" % self.filename
198 return 0
202 return 0
199
203
200 if not( self.m_ProcessingHeader.shif_fft ):
204 if not( self.m_ProcessingHeader.shif_fft ):
201 spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
205 spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
202 cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
206 cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
203
207
204 # spc = numpy.transpose( spc, (0,2,1) )
208 # spc = numpy.transpose( spc, (0,2,1) )
205 # cspc = numpy.transpose( cspc, (0,2,1) )
209 # cspc = numpy.transpose( cspc, (0,2,1) )
206 #dc = numpy.transpose(dc, (0,2,1))
210 #dc = numpy.transpose(dc, (0,2,1))
207
211
208 self.data_spc = spc
212 self.data_spc = spc
209 self.data_cspc = cspc['real'] + cspc['imag']*1j
213 self.data_cspc = cspc['real'] + cspc['imag']*1j
210 self.data_dc = dc['real'] + dc['imag']*1j
214 self.data_dc = dc['real'] + dc['imag']*1j
211
215
212 self.datablockIndex = 0
216 self.datablockIndex = 0
213 self.flagIsNewFile = 0
217 self.flagIsNewFile = 0
214 self.flagIsNewBlock = 1
218 self.flagIsNewBlock = 1
215
219
216 self.nReadBlocks += 1
220 self.nReadBlocks += 1
217 self.nBlocks += 1
221 self.nBlocks += 1
218
222
219 return 1
223 return 1
220
224
221
225
222 def getData(self):
226 def getData(self):
223 """
227 """
224 Copia el buffer de lectura a la clase "Spectra",
228 Copia el buffer de lectura a la clase "Spectra",
225 con todos los parametros asociados a este (metadata). cuando no hay datos en el buffer de
229 con todos los parametros asociados a este (metadata). cuando no hay datos en el buffer de
226 lectura es necesario hacer una nueva lectura de los bloques de datos usando "readNextBlock"
230 lectura es necesario hacer una nueva lectura de los bloques de datos usando "readNextBlock"
227
231
228 Return:
232 Return:
229 0 : Si no hay mas archivos disponibles
233 0 : Si no hay mas archivos disponibles
230 1 : Si hizo una buena copia del buffer
234 1 : Si hizo una buena copia del buffer
231
235
232 Affected:
236 Affected:
233 self.m_DataObj
237 self.m_DataObj
234 self.datablockIndex
238 self.datablockIndex
235 self.flagResetProcessing
239 self.flagResetProcessing
236 self.flagIsNewBlock
240 self.flagIsNewBlock
237 """
241 """
238
242
239 if self.flagNoMoreFiles: return 0
243 if self.flagNoMoreFiles: return 0
240
244
241 self.flagResetProcessing = 0
245 self.flagResetProcessing = 0
242 self.flagIsNewBlock = 0
246 self.flagIsNewBlock = 0
243
247
244 if self.__hasNotDataInBuffer():
248 if self.__hasNotDataInBuffer():
245
249
246 if not( self.readNextBlock() ):
250 if not( self.readNextBlock() ):
247 self.setNextFile()
251 self.setNextFile()
248 return 0
252 return 0
249
253
250 self.m_DataObj.m_BasicHeader = self.m_BasicHeader.copy()
254 self.m_DataObj.m_BasicHeader = self.m_BasicHeader.copy()
251 self.m_DataObj.m_ProcessingHeader = self.m_ProcessingHeader.copy()
255 self.m_DataObj.m_ProcessingHeader = self.m_ProcessingHeader.copy()
252 self.m_DataObj.m_RadarControllerHeader = self.m_RadarControllerHeader.copy()
256 self.m_DataObj.m_RadarControllerHeader = self.m_RadarControllerHeader.copy()
253 self.m_DataObj.m_SystemHeader = self.m_SystemHeader.copy()
257 self.m_DataObj.m_SystemHeader = self.m_SystemHeader.copy()
254 self.m_DataObj.heights = self.heights
258 self.m_DataObj.heights = self.heights
255 self.m_DataObj.dataType = self.dataType
259 self.m_DataObj.dataType = self.dataType
256
260
257 if self.flagNoMoreFiles == 1:
261 if self.flagNoMoreFiles == 1:
258 print 'Process finished'
262 print 'Process finished'
259 return 0
263 return 0
260
264
261 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
265 #data es un numpy array de 3 dmensiones (perfiles, alturas y canales)
262
266
263 if self.data_dc == None:
267 if self.data_dc == None:
264 self.m_DataObj.flagNoData = True
268 self.m_DataObj.flagNoData = True
265 return 0
269 return 0
266
270
267 self.m_DataObj.flagNoData = False
271 self.m_DataObj.flagNoData = False
268 self.m_DataObj.flagResetProcessing = self.flagResetProcessing
272 self.m_DataObj.flagResetProcessing = self.flagResetProcessing
269
273
270 self.m_DataObj.data_spc = self.data_spc
274 self.m_DataObj.data_spc = self.data_spc
271 self.m_DataObj.data_cspc = self.data_cspc
275 self.m_DataObj.data_cspc = self.data_cspc
272 self.m_DataObj.data_dc = self.data_dc
276 self.m_DataObj.data_dc = self.data_dc
273
274 #call setData - to Data Object
275 #self.datablockIndex += 1
276 #self.idProfile += 1
277
277
278 return 1
278 return 1
279
279
280
280
281 class SpectraWriter(JRODataWriter):
281 class SpectraWriter(JRODataWriter):
282
282
283 """
283 """
284 Esta clase permite escribir datos de espectros a archivos procesados (.pdata). La escritura
284 Esta clase permite escribir datos de espectros a archivos procesados (.pdata). La escritura
285 de los datos siempre se realiza por bloques.
285 de los datos siempre se realiza por bloques.
286 """
286 """
287
287
288 m_DataObj = None
288 m_DataObj = None
289
289
290 ext = ".pdata"
290 ext = ".pdata"
291
291
292 optchar = "P"
292 optchar = "P"
293
293
294 shape_spc_Buffer = None
294 shape_spc_Buffer = None
295 shape_cspc_Buffer = None
295 shape_cspc_Buffer = None
296 shape_dc_Buffer = None
296 shape_dc_Buffer = None
297
297
298
298
299 def __init__(self, m_Spectra=None):
299 def __init__(self, m_Spectra=None):
300 """
300 """
301 Inicializador de la clase SpectraWriter para la escritura de datos de espectros.
301 Inicializador de la clase SpectraWriter para la escritura de datos de espectros.
302
302
303 Affected:
303 Affected:
304 self.m_DataObj
304 self.m_DataObj
305 self.m_BasicHeader
305 self.m_BasicHeader
306 self.m_SystemHeader
306 self.m_SystemHeader
307 self.m_RadarControllerHeader
307 self.m_RadarControllerHeader
308 self.m_ProcessingHeader
308 self.m_ProcessingHeader
309
309
310 Return: None
310 Return: None
311 """
311 """
312 if m_Spectra == None:
312 if m_Spectra == None:
313 m_Spectra = Spectra()
313 m_Spectra = Spectra()
314
314
315 if not( isinstance(m_Spectra, Spectra) ):
315 if not( isinstance(m_Spectra, Spectra) ):
316 raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object"
316 raise ValueError, "in SpectraReader, m_Spectra must be an Spectra class object"
317
317
318 self.m_DataObj = m_Spectra
318 self.m_DataObj = m_Spectra
319
319
320
320
321 def hasAllDataInBuffer(self):
321 def hasAllDataInBuffer(self):
322 return 1
322 return 1
323
323
324
324
325 def setBlockDimension(self):
325 def setBlockDimension(self):
326 """
326 """
327 Obtiene las formas dimensionales del los subbloques de datos que componen un bloque
327 Obtiene las formas dimensionales del los subbloques de datos que componen un bloque
328
328
329 Affected:
329 Affected:
330 self.shape_spc_Buffer
330 self.shape_spc_Buffer
331 self.shape_cspc_Buffer
331 self.shape_cspc_Buffer
332 self.shape_dc_Buffer
332 self.shape_dc_Buffer
333
333
334 Return: None
334 Return: None
335 """
335 """
336 self.shape_spc_Buffer = (self.m_DataObj.nPairsEqualChannels,
336 self.shape_spc_Buffer = (self.m_DataObj.nPairsEqualChannels,
337 self.m_ProcessingHeader.numHeights,
337 self.m_ProcessingHeader.numHeights,
338 self.m_ProcessingHeader.profilesPerBlock)
338 self.m_ProcessingHeader.profilesPerBlock)
339
339
340 self.shape_cspc_Buffer = (self.m_DataObj.nPairsUnequalChannels,
340 self.shape_cspc_Buffer = (self.m_DataObj.nPairsUnequalChannels,
341 self.m_ProcessingHeader.numHeights,
341 self.m_ProcessingHeader.numHeights,
342 self.m_ProcessingHeader.profilesPerBlock)
342 self.m_ProcessingHeader.profilesPerBlock)
343
343
344 self.shape_dc_Buffer = (self.m_SystemHeader.numChannels,
344 self.shape_dc_Buffer = (self.m_SystemHeader.numChannels,
345 self.m_ProcessingHeader.numHeights)
345 self.m_ProcessingHeader.numHeights)
346
346
347
347
348 def writeBlock(self):
348 def writeBlock(self):
349 """
349 """
350 Escribe el buffer en el file designado
350 Escribe el buffer en el file designado
351
351
352 Affected:
352 Affected:
353 self.data_spc
353 self.data_spc
354 self.data_cspc
354 self.data_cspc
355 self.data_dc
355 self.data_dc
356 self.flagIsNewFile
356 self.flagIsNewFile
357 self.flagIsNewBlock
357 self.flagIsNewBlock
358 self.nWriteBlocks
358 self.nWriteBlocks
359 self.blocksCounter
359 self.blocksCounter
360
360
361 Return: None
361 Return: None
362 """
362 """
363 spc = self.data_spc
363 spc = self.data_spc
364 # spc = numpy.transpose( self.data_spc, (0,2,1) )
364 # spc = numpy.transpose( self.data_spc, (0,2,1) )
365 if not( self.m_ProcessingHeader.shif_fft ):
365 if not( self.m_ProcessingHeader.shif_fft ):
366 spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
366 spc = numpy.roll( spc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
367 data = spc.reshape((-1))
367 data = spc.reshape((-1))
368 data.tofile(self.fp)
368 data.tofile(self.fp)
369
369
370 data = numpy.zeros( self.shape_cspc_Buffer, self.dataType )
370 data = numpy.zeros( self.shape_cspc_Buffer, self.dataType )
371 cspc = self.data_cspc
371 cspc = self.data_cspc
372 # cspc = numpy.transpose( self.data_cspc, (0,2,1) )
372 # cspc = numpy.transpose( self.data_cspc, (0,2,1) )
373 if not( self.m_ProcessingHeader.shif_fft ):
373 if not( self.m_ProcessingHeader.shif_fft ):
374 cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
374 cspc = numpy.roll( cspc, self.m_ProcessingHeader.profilesPerBlock/2, axis=2 ) #desplaza a la derecha en el eje 2 determinadas posiciones
375 data['real'] = cspc.real
376 data['imag'] = cspc.imag
375 data['imag'] = cspc.imag
377 data = data.reshape((-1))
376 data = data.reshape((-1))
378 data.tofile(self.fp)
377 data.tofile(self.fp)
379
378
380 data = numpy.zeros( self.shape_dc_Buffer, self.dataType )
379 data = numpy.zeros( self.shape_dc_Buffer, self.dataType )
381 dc = self.data_dc
380 dc = self.data_dc
382 data['real'] = dc.real
381 data['real'] = dc.real
383 data['imag'] = dc.imag
382 data['imag'] = dc.imag
384 data = data.reshape((-1))
383 data = data.reshape((-1))
385 data.tofile(self.fp)
384 data.tofile(self.fp)
386
385
387 self.data_spc.fill(0)
386 self.data_spc.fill(0)
388 self.data_cspc.fill(0)
387 self.data_cspc.fill(0)
389 self.data_dc.fill(0)
388 self.data_dc.fill(0)
390
389
391 self.flagIsNewFile = 0
390 self.flagIsNewFile = 0
392 self.flagIsNewBlock = 1
391 self.flagIsNewBlock = 1
393 self.nWriteBlocks += 1
392 self.nWriteBlocks += 1
394 self.blocksCounter += 1
393 self.blocksCounter += 1
395
394
396
395
397 def putData(self):
396 def putData(self):
398 """
397 """
399 Setea un bloque de datos y luego los escribe en un file
398 Setea un bloque de datos y luego los escribe en un file
400
399
401 Affected:
400 Affected:
402 self.data_spc
401 self.data_spc
403 self.data_cspc
402 self.data_cspc
404 self.data_dc
403 self.data_dc
405
404
406 Return:
405 Return:
407 0 : Si no hay data o no hay mas files que puedan escribirse
406 0 : Si no hay data o no hay mas files que puedan escribirse
408 1 : Si se escribio la data de un bloque en un file
407 1 : Si se escribio la data de un bloque en un file
409 """
408 """
410 self.flagIsNewBlock = 0
409 self.flagIsNewBlock = 0
411
410
412 if self.m_DataObj.flagNoData:
411 if self.m_DataObj.flagNoData:
413 return 0
412 return 0
414
413
415 if self.m_DataObj.flagResetProcessing:
414 if self.m_DataObj.flagResetProcessing:
416 self.data_spc.fill(0)
415 self.data_spc.fill(0)
417 self.data_cspc.fill(0)
416 self.data_cspc.fill(0)
418 self.data_dc.fill(0)
417 self.data_dc.fill(0)
419 self.setNextFile()
418 self.setNextFile()
420
419
421 self.data_spc = self.m_DataObj.data_spc
420 self.data_spc = self.m_DataObj.data_spc
422 self.data_cspc = self.m_DataObj.data_cspc
421 self.data_cspc = self.m_DataObj.data_cspc
423 self.data_dc = self.m_DataObj.data_dc
422 self.data_dc = self.m_DataObj.data_dc
424
423
425 # #self.m_ProcessingHeader.dataBlocksPerFile)
424 # #self.m_ProcessingHeader.dataBlocksPerFile)
426 if True:
425 if True:
427 self.getHeader()
426 self.getHeader()
428 self.writeNextBlock()
427 self.writeNextBlock()
429
428
430 if self.flagNoMoreFiles:
429 if self.flagNoMoreFiles:
431 #print 'Process finished'
430 #print 'Process finished'
432 return 0
431 return 0
433
432
434 return 1 No newline at end of file
433 return 1
General Comments 0
You need to be logged in to leave comments. Login now