##// END OF EJS Templates
Ultima version de jrIO_hf.py
Alexander Valdez -
r547:342b251d184b
parent child
Show More
@@ -1,506 +1,708
1 '''
1 '''
2 Created on Jul 3, 2014
2 Created on Jul 3, 2014
3
3
4 @author: roj-com0419
4 @author: roj-com0419
5 '''
5 '''
6
6
7 import os,sys
7 import os,sys
8 import time,datetime
8 import time,datetime
9 import h5py
9 import h5py
10 import numpy
10 import numpy
11 import re
11 import re
12 import stuffr
12 import stuffr
13
13
14 from model.data.jroheaderIO import RadarControllerHeader, SystemHeader
14 from model.data.jroheaderIO import RadarControllerHeader, SystemHeader
15 from model.data.jrodata import Voltage
15 from model.data.jrodata import Voltage
16 from model.proc.jroproc_base import ProcessingUnit, Operation
16 from model.proc.jroproc_base import ProcessingUnit, Operation
17
17
18
19 def isNumber(str):
20 """
21 Chequea si el conjunto de caracteres que componen un string puede ser convertidos a un numero.
22
23 Excepciones:
24 Si un determinado string no puede ser convertido a numero
25 Input:
26 str, string al cual se le analiza para determinar si convertible a un numero o no
27
28 Return:
29 True : si el string es uno numerico
30 False : no es un string numerico
31 """
32 try:
33 float( str )
34 return True
35 except:
36 return False
37
38 def getFileFromSet(path, ext, set):
39 validFilelist = []
40 fileList = os.listdir(path)
41
42 # 0 1234 567 89A BCDE
43 # H YYYY DDD SSS .ext
44
45 for thisFile in fileList:
46 try:
47 number= int(thisFile[4:10])
48
49 # year = int(thisFile[1:5])
50 # doy = int(thisFile[5:8])
51 except:
52 continue
53
54 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
55 continue
56
57 validFilelist.append(thisFile)
58 myfile = fnmatch.filter(validFilelist,'*%6.6d*'%(number))
59 #myfile = fnmatch.filter(validFilelist,'*%4.4d%3.3d%3.3d*'%(year,doy,set))
60
61 if len(myfile)!= 0:
62 return myfile[0]
63 else:
64 filename = '*%6.6d%s'%(number,ext.lower())
65 print 'the filename %s does not exist'%filename
66 print '...going to the last file: '
67
68 if validFilelist:
69 validFilelist = sorted( validFilelist, key=str.lower )
70 return validFilelist[-1]
71
72 return None
73
74 def getlastFileFromPath(path, ext):
75 """
76 Depura el fileList dejando solo los que cumplan el formato de "res-xxxxxx.ext"
77 al final de la depuracion devuelve el ultimo file de la lista que quedo.
78
79 Input:
80 fileList : lista conteniendo todos los files (sin path) que componen una determinada carpeta
81 ext : extension de los files contenidos en una carpeta
82
83 Return:
84 El ultimo file de una determinada carpeta, no se considera el path.
85 """
86 validFilelist = []
87 fileList = os.listdir(path)
88
89 # 0 1234 567 89A BCDE
90 # H YYYY DDD SSS .ext
91
92 for thisFile in fileList:
93
94 try:
95 number= int(thisFile[4:10])
96 except:
97 print "There is a file or folder with different format"
98 if not isNumber(number):
99 continue
100
101 # year = thisFile[1:5]
102 # if not isNumber(year):
103 # continue
104
105 # doy = thisFile[5:8]
106 # if not isNumber(doy):
107 # continue
108
109 number= int(number)
110 # year = int(year)
111 # doy = int(doy)
112
113 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
114 continue
115
116
117 validFilelist.append(thisFile)
118
119
120 if validFilelist:
121 validFilelist = sorted( validFilelist, key=str.lower )
122 return validFilelist[-1]
123
124 return None
125
126
127
18 class HFReader(ProcessingUnit):
128 class HFReader(ProcessingUnit):
19 '''
129 '''
20 classdocs
130 classdocs
21 '''
131 '''
22 path = None
132 path = None
23 startDate= None
133 startDate= None
24 endDate = None
134 endDate = None
25 startTime= None
135 startTime= None
26 endTime = None
136 endTime = None
27 walk = None
137 walk = None
28 isConfig = False
138 isConfig = False
29 dataOut=None
139 dataOut=None
140 nTries = 3
30 ext = ".hdf5"
141 ext = ".hdf5"
31
142
32 def __init__(self):
143 def __init__(self):
33 '''
144 '''
34 Constructor
145 Constructor
35 '''
146 '''
36 ProcessingUnit.__init__(self)
147 ProcessingUnit.__init__(self)
37
148
38 self.isConfig =False
149 self.isConfig =False
39
150
40 self.datablock = None
151 self.datablock = None
41
152
42 self.utc = 0
153 self.utc = 0
43
154
44 self.ext='.hdf5'
155 self.ext='.hdf5'
45
156
46 self.flagIsNewFile = 1
157 self.flagIsNewFile = 1
47
158
48 #-------------------------------------------------
159 #-------------------------------------------------
49 self.fileIndex=None
160 self.fileIndex=None
50
161
51 self.profileIndex_offset=None
162 self.profileIndex_offset=None
52
163
53 self.filenameList=[]
164 self.filenameList=[]
54
165
55 self.hfFilePointer= None
166 self.hfFilePointer= None
56
167
57 self.__filename_online = None
168 self.filename_online = None
58
169
59 self.status=True
170 self.status=True
60
171
61 self.flagNoMoreFiles= False
172 self.flagNoMoreFiles= False
62
173
174 self.__waitForNewFile = 20
175
176
63 #--------------------------------------------------
177 #--------------------------------------------------
64
178
65 self.dataOut = self.createObjByDefault()
179 self.dataOut = self.createObjByDefault()
66
180
67
181
68 def createObjByDefault(self):
182 def createObjByDefault(self):
69
183
70 dataObj = Voltage()
184 dataObj = Voltage()
71
185
72 return dataObj
186 return dataObj
73
187
74 def setObjProperties(self):
188 def setObjProperties(self):
75
189
76 pass
190 pass
77
191
78 def getBlockDimension(self):
192 def getBlockDimension(self):
79 """
193 """
80 Obtiene la cantidad de puntos a leer por cada bloque de datos
194 Obtiene la cantidad de puntos a leer por cada bloque de datos
81
195
82 Affected:
196 Affected:
83 self.blocksize
197 self.blocksize
84
198
85 Return:
199 Return:
86 None
200 None
87 """
201 """
88 pts2read =self.nChannels*self.nHeights*self.nProfiles
202 pts2read =self.nChannels*self.nHeights*self.nProfiles
89 self.blocksize = pts2read
203 self.blocksize = pts2read
90
204
91 def __readHeader(self):
205 def __readHeader(self):
92
206
93 self.nProfiles = 100
207 self.nProfiles = 100
94 self.nHeights = 1000
208 self.nHeights = 1000
95 self.nChannels = 2
209 self.nChannels = 2
96 self.__firstHeigth=0
210 self.__firstHeigth=0
97 self.__nSamples=1000
211 self.__nSamples=1000
98 self.__deltaHeigth=1.5
212 self.__deltaHeigth=1.5
99 self.__sample_rate=1e5
213 self.__sample_rate=1e5
100 #self.__frequency=2.72e6
214 self.__frequency=2.72e6
101 self.__frequency=3.64e6
215 #self.__frequency=3.64e6
102 self.__online = False
216 self.__online = False
103
217
218 #print "Frequency of Operation:", self.__frequency
219
104
220
105 def __setParameters(self,path='', startDate='',endDate='',startTime='', endTime='', walk=''):
221 def __setParameters(self,path='', startDate='',endDate='',startTime='', endTime='', walk=''):
106 self.path = path
222 self.path = path
107 self.startDate = startDate
223 self.startDate = startDate
108 self.endDate = endDate
224 self.endDate = endDate
109 self.startTime = startTime
225 self.startTime = startTime
110 self.endTime = endTime
226 self.endTime = endTime
111 self.walk = walk
227 self.walk = walk
112
228
113 def __checkPath(self):
229 def __checkPath(self):
114 if os.path.exists(self.path):
230 if os.path.exists(self.path):
115 self.status=1
231 self.status=1
116 else:
232 else:
117 self.status=0
233 self.status=0
118 print 'Path %s does not exits'%self.path
234 print 'Path %s does not exits'%self.path
119 return
235 return
120
236
121 def __selDates(self, hf_dirname_format):
237 def __selDates(self, hf_dirname_format):
122 try:
238 try:
123 dir_hf_filename= self.path+"/"+hf_dirname_format
239 dir_hf_filename= self.path+"/"+hf_dirname_format
124 fp= h5py.File(dir_hf_filename,'r')
240 fp= h5py.File(dir_hf_filename,'r')
125 hipoc=fp['t'].value
241 hipoc=fp['t'].value
126 fp.close()
242 fp.close()
127 date_time=stuffr.unix2datestr(hipoc)
243 date_time=stuffr.unix2datestr(hipoc)
128 year =int(date_time[0:4])
244 year =int(date_time[0:4])
129 month=int(date_time[5:7])
245 month=int(date_time[5:7])
130 dom =int(date_time[8:10])
246 dom =int(date_time[8:10])
131 thisDate= datetime.date(year,month,dom)
247 thisDate= datetime.date(year,month,dom)
132 if (thisDate>=self.startDate and thisDate <= self.endDate):
248 if (thisDate>=self.startDate and thisDate <= self.endDate):
133 return hf_dirname_format
249 return hf_dirname_format
134 except:
250 except:
135 return None
251 return None
136
252
137 def __findDataForDates(self,online=False):
253 def __findDataForDates(self,online=False):
138 if not(self.status):
254 if not(self.status):
139 return None
255 return None
140
256
141 pat = '\d+.\d+'
257 pat = '\d+.\d+'
142 dirnameList = [re.search(pat,x) for x in os.listdir(self.path)]
258 dirnameList = [re.search(pat,x) for x in os.listdir(self.path)]
143 dirnameList = filter(lambda x:x!=None,dirnameList)
259 dirnameList = filter(lambda x:x!=None,dirnameList)
144 dirnameList = [x.string for x in dirnameList]
260 dirnameList = [x.string for x in dirnameList]
145 if not(online):
261 if not(online):
262
146 dirnameList = [self.__selDates(x) for x in dirnameList]
263 dirnameList = [self.__selDates(x) for x in dirnameList]
147 dirnameList = filter(lambda x:x!=None,dirnameList)
264 dirnameList = filter(lambda x:x!=None,dirnameList)
265
148 if len(dirnameList)>0:
266 if len(dirnameList)>0:
149 self.status = 1
267 self.status = 1
150 self.dirnameList = dirnameList
268 self.dirnameList = dirnameList
151 self.dirnameList.sort()
269 self.dirnameList.sort()
270
152 else:
271 else:
153 self.status = 0
272 self.status = 0
154 return None
273 return None
155
274
156 def __getTimeFromData(self):
275 def __getTimeFromData(self):
157 startDateTime_Reader = datetime.datetime.combine(self.startDate,self.startTime)
276 startDateTime_Reader = datetime.datetime.combine(self.startDate,self.startTime)
158 endDateTime_Reader = datetime.datetime.combine(self.endDate,self.endTime)
277 endDateTime_Reader = datetime.datetime.combine(self.endDate,self.endTime)
159 print 'Filtering Files from %s to %s'%(startDateTime_Reader, endDateTime_Reader)
278 print 'Filtering Files from %s to %s'%(startDateTime_Reader, endDateTime_Reader)
160 print '........................................'
279 print '........................................'
161 filter_filenameList=[]
280 filter_filenameList=[]
162 self.filenameList.sort()
281 self.filenameList.sort()
163 for i in range(len(self.filenameList)-1):
282 for i in range(len(self.filenameList)-1):
164 filename=self.filenameList[i]
283 filename=self.filenameList[i]
165 dir_hf_filename= filename
284 dir_hf_filename= filename
166 fp= h5py.File(dir_hf_filename,'r')
285 fp= h5py.File(dir_hf_filename,'r')
167 hipoc=fp['t'].value
286 hipoc=fp['t'].value
287 hipoc=hipoc+self.timezone
168 date_time=stuffr.unix2datestr(hipoc)
288 date_time=stuffr.unix2datestr(hipoc)
169 fp.close()
289 fp.close()
170 year =int(date_time[0:4])
290 year =int(date_time[0:4])
171 month=int(date_time[5:7])
291 month=int(date_time[5:7])
172 dom =int(date_time[8:10])
292 dom =int(date_time[8:10])
173 hour =int(date_time[11:13])
293 hour =int(date_time[11:13])
174 min =int(date_time[14:16])
294 min =int(date_time[14:16])
175 sec =int(date_time[17:19])
295 sec =int(date_time[17:19])
176 this_time=datetime.datetime(year,month,dom,hour,min,sec)
296 this_time=datetime.datetime(year,month,dom,hour,min,sec)
177 if (this_time>=startDateTime_Reader and this_time <= endDateTime_Reader):
297 if (this_time>=startDateTime_Reader and this_time <= endDateTime_Reader):
178 filter_filenameList.append(filename)
298 filter_filenameList.append(filename)
179 filter_filenameList.sort()
299 filter_filenameList.sort()
180 self.filenameList = filter_filenameList
300 self.filenameList = filter_filenameList
181 return 1
301 return 1
182
302
183 def __getFilenameList(self):
303 def __getFilenameList(self):
304 #print "hola"
305 #print self.dirnameList
184 dirList = [os.path.join(self.path,x) for x in self.dirnameList]
306 dirList = [os.path.join(self.path,x) for x in self.dirnameList]
185 self.filenameList= dirList
307 self.filenameList= dirList
186
308
187 def __selectDataForTimes(self, online=False):
309 def __selectDataForTimes(self, online=False):
188
310
189 if not(self.status):
311 if not(self.status):
190 return None
312 return None
191 self.__getFilenameList()
313 self.__getFilenameList()
192 if not(online):
314 if not(online):
193 if not(self.all):
315 if not(self.all):
194 self.__getTimeFromData()
316 self.__getTimeFromData()
195 if len(self.filenameList)>0:
317 if len(self.filenameList)>0:
196 self.status=1
318 self.status=1
197 self.filenameList.sort()
319 self.filenameList.sort()
198 else:
320 else:
199 self.status=0
321 self.status=0
200 return None
322 return None
201 else:
323 else:
202 self.filenameList=[self.filenameList[-2]]
324 #if self.set== None:
325 self.filenameList=[self.filenameList[-1]]
326 #else:
327 # try:
328 # filename=getFileFromSet(self.path,self.ext,self.set)
329 # self.filenameList=self.path+"/"+filename
330 # except:
331 # self.filenameList=[self.filenameList[-1]]
332
203
333
204 def __searchFilesOffline(self,
334 def __searchFilesOffline(self,
205 path,
335 path,
206 startDate,
336 startDate,
207 endDate,
337 endDate,
208 ext,
338 ext,
209 startTime=datetime.time(0,0,0),
339 startTime=datetime.time(0,0,0),
210 endTime=datetime.time(23,59,59),
340 endTime=datetime.time(23,59,59),
211 walk=True):
341 walk=True):
212
342
213 self.__setParameters(path, startDate, endDate, startTime, endTime, walk)
343 self.__setParameters(path, startDate, endDate, startTime, endTime, walk)
214
344
215 self.__checkPath()
345 self.__checkPath()
216
346
217 self.__findDataForDates()
347 self.__findDataForDates()
348 #print self.dirnameList
218
349
219 self.__selectDataForTimes()
350 self.__selectDataForTimes()
220
351
221 for i in range(len(self.filenameList)):
352 for i in range(len(self.filenameList)):
222 print "%s"% (self.filenameList[i])
353 print "%s"% (self.filenameList[i])
223
354
224 return
355 return
225
356
226 def __searchFilesOnline(self,
357 def __searchFilesOnline(self,
227 path,
358 path,
228 walk=True):
359 expLabel= "",
229 startDate= datetime.datetime.utcnow().date
360 ext=None,
230 endDate= datetime.datetime.utcnow().date()
361 startDate=None,
362 endDate=None,
363 walk=True,
364 set=None):
365
366
367
231 self.__setParameters(path=path,startDate=startDate,endDate=endDate,walk=walk)
368 self.__setParameters(path=path,startDate=startDate,endDate=endDate,walk=walk)
369
232 self.__checkPath()
370 self.__checkPath()
371
372 fullpath=path
373
374 print "%s folder was found: " %(fullpath )
375
376 if set == None:
377 filename =getlastFileFromPath(fullpath,ext)
378 startDate= datetime.datetime.utcnow().date
379 endDate= datetime.datetime.utcnow().date()
380
381 else:
382 filename= getFileFromSet(fullpath,ext,set)
383 startDate=None
384 endDate=None
385
386 if not (filename):
387 return None,None,None,None,None
388 print "%s file was found" %(filename)
389
390 dir_hf_filename= self.path+"/"+filename
391 fp= h5py.File(dir_hf_filename,'r')
392 hipoc=fp['t'].value
393 fp.close()
394 date_time=stuffr.unix2datestr(hipoc)
395
396 year =int(date_time[0:4])
397 month=int(date_time[5:7])
398 dom =int(date_time[8:10])
399 set= int(filename[4:10])
400 self.set=set-1
401 #self.dirnameList=[filename]
233 self.__findDataForDates(online=True)
402 self.__findDataForDates(online=True)
234 self.dirnameList= [self.dirnameList[-1]]
403 #print self.dirnameList
235 self.__selectDataForTimes(online=True)
404 self.__selectDataForTimes(online=True)
236 return
405 return fullpath,filename,year,month,dom,set
237
406
238 def __setNextFile(self,online=False):
407 def __setNextFile(self,online=False):
239 """
408 """
240 """
409 """
241 if not(online):
410 if not(online):
242 newFile = self.__setNextFileOffline()
411 newFile = self.__setNextFileOffline()
243 else:
412 else:
244 newFile = self.__setNextFileOnline()
413 newFile = self.__setNextFileOnline()
245
414
246 if not(newFile):
415 if not(newFile):
247 return 0
416 return 0
248 return 1
417 return 1
249
418
250 def __setNextFileOffline(self):
419 def __setNextFileOffline(self):
251 """
420 """
252 """
421 """
253 idFile= self.fileIndex
422 idFile= self.fileIndex
254 while(True):
423 while(True):
255 idFile += 1
424 idFile += 1
256 if not (idFile < len(self.filenameList)):
425 if not (idFile < len(self.filenameList)):
257 self.flagNoMoreFiles = 1
426 self.flagNoMoreFiles = 1
258 print "No more Files"
427 print "No more Files"
259 return 0
428 return 0
260 filename = self.filenameList[idFile]
429 filename = self.filenameList[idFile]
261 hfFilePointer =h5py.File(filename,'r')
430 hfFilePointer =h5py.File(filename,'r')
262
431
263 epoc=hfFilePointer['t'].value
432 epoc=hfFilePointer['t'].value
264 #this_time=datetime.datetime(year,month,dom,hour,min,sec)
433 #this_time=datetime.datetime(year,month,dom,hour,min,sec)
265 break
434 break
266
435
267 self.flagIsNewFile = 1
436 self.flagIsNewFile = 1
268 self.fileIndex = idFile
437 self.fileIndex = idFile
269 self.filename = filename
438 self.filename = filename
270
439
271 self.hfFilePointer = hfFilePointer
440 self.hfFilePointer = hfFilePointer
272 hfFilePointer.close()
441 hfFilePointer.close()
273 self.__t0=epoc
442 self.__t0=epoc
274
275
276 print "Setting the file: %s"%self.filename
443 print "Setting the file: %s"%self.filename
277
444
278
279
280 return 1
445 return 1
281
446
282 def __setNextFileOnline(self):
447 def __setNextFileOnline(self):
283 """
448 """
284 """
449 """
450
451 self.set +=1
452 if self.set>8638:
453 print "There is no file with %s "%self.set
454 return
455
456
285 filename = self.filenameList[0]
457 filename = self.filenameList[0]
286 if self.__filename_online != None:
458 if self.filename_online != None:
287 self.__selecDataForTimes(online=True)
459 self.__selectDataForTimes(online=True)
288 filename = self.filenameList[0]
460 filename = self.filenameList[0]
289 while self.__filename_online == filename:
461 while self.filename_online == filename:
290 print 'waiting %d seconds to get a new file...'%(self.__waitForNewFile)
462 print 'waiting %d seconds to get a new file...'%(self.__waitForNewFile)
291 time.sleep(self.__waitForNewFile)
463 time.sleep(self.__waitForNewFile)
464 self.__findDataForDates(True)
292 self.__selectDataForTimes(online=True)
465 self.__selectDataForTimes(online=True)
293 filename = self.filenameList[0]
466 filename = self.filenameList[0]
467 print filename
468
469 hfFilePointer=h5py.File(filename,'r')
470 self.filename_online=filename
471 epoc=hfFilePointer['t'].value
472
473 self.hfFilePointer=hfFilePointer
474 hfFilePointer.close()
475 self.__t0=epoc
476
294
477
295 self.__filename_online=filename
296 self.hfFilePointer=h5py.File(filename,'r')
297 self.flagIsNewFile = 1
478 self.flagIsNewFile = 1
298 self.filename = filename
479 self.filename = filename
299
480
300 print "Setting the file: %s"%self.filename
481 print "Setting the file: %s"%self.filename
301 return 1
482 return 1
302
483
303 def __getExpParameters(self):
484 def __getExpParameters(self):
304 if not(self.status):
485 if not(self.status):
305 return None
486 return None
306
487
307 def setup(self, path = None,
488 def setup(self,
489 path = None,
308 startDate = None,
490 startDate = None,
309 endDate = None,
491 endDate = None,
310 startTime = datetime.time(0,0,0),
492 startTime = datetime.time(0,0,0),
311 endTime = datetime.time(23,59,59),
493 endTime = datetime.time(23,59,59),
312 set = None,
494 set = None,
313 expLabel = "",
495 expLabel = "",
314 ext = None,
496 ext = None,
315 all=0,
497 all=0,
316 timezone=0,
498 timezone=0,
317 online = False,
499 online = False,
318 delay = 60,
500 delay = 60,
319 walk = True):
501 walk = True):
320 '''
502 '''
321 In this method we should set all initial parameters.
503 In this method we should set all initial parameters.
322
504
323 '''
505 '''
506 if path==None:
507 raise ValueError,"The path is not valid"
508
509 if ext==None:
510 ext = self.ext
511
324 self.timezone= timezone
512 self.timezone= timezone
325 self.online= online
513 self.online= online
326 self.all=all
514 self.all=all
327 if ext==None:
515
328 ext = self.ext
329
516
330 if not(online):
517 if not(online):
518 print "Searching files in offline mode..."
519
331 self.__searchFilesOffline(path, startDate, endDate, ext, startTime, endTime, walk)
520 self.__searchFilesOffline(path, startDate, endDate, ext, startTime, endTime, walk)
332 else:
521 else:
333 self.__searchFilesOnline(path,walk)
522 print "Searching files in online mode..."
523
524 for nTries in range(self.nTries):
525
526 fullpath,file,year,month,day,set = self.__searchFilesOnline(path=path,expLabel=expLabel,ext=ext, walk=walk,set=set)
527
528 if fullpath:
529 break
530 print '\tWaiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1)
531 time.sleep(self.delay)
532 if not(fullpath):
533 print "There ins't valid files in %s" % path
534 return None
535
334
536
335 if not(self.filenameList):
537 if not(self.filenameList):
336 print "There is no files into the folder: %s"%(path)
538 print "There is no files into the folder: %s"%(path)
337 sys.exit(-1)
539 sys.exit(-1)
338
540
339 self.__getExpParameters()
541 self.__getExpParameters()
340
542
341 self.fileIndex = -1
543 self.fileIndex = -1
342
544
343 self.__setNextFile(online)
545 self.__setNextFile(online)
344
546
345 self.__readMetadata()
547 self.__readMetadata()
346
548
347 self.__setLocalVariables()
549 self.__setLocalVariables()
348
550
349 self.__setHeaderDO()
551 self.__setHeaderDO()
350 #self.profileIndex_offset= 0
552 #self.profileIndex_offset= 0
351
553
352 #self.profileIndex = self.profileIndex_offset
554 #self.profileIndex = self.profileIndex_offset
353
555
354 self.isConfig = True
556 self.isConfig = True
355
557
356 def __readMetadata(self):
558 def __readMetadata(self):
357 self.__readHeader()
559 self.__readHeader()
358
560
359
561
360 def __setLocalVariables(self):
562 def __setLocalVariables(self):
361
563
362 self.datablock = numpy.zeros((self.nChannels, self.nHeights,self.nProfiles), dtype = numpy.complex)
564 self.datablock = numpy.zeros((self.nChannels, self.nHeights,self.nProfiles), dtype = numpy.complex)
363 #
565 #
364
566
365
567
366
568
367 self.profileIndex = 9999
569 self.profileIndex = 9999
368
570
369
571
370 def __setHeaderDO(self):
572 def __setHeaderDO(self):
371
573
372
574
373 self.dataOut.radarControllerHeaderObj = RadarControllerHeader()
575 self.dataOut.radarControllerHeaderObj = RadarControllerHeader()
374
576
375 self.dataOut.systemHeaderObj = SystemHeader()
577 self.dataOut.systemHeaderObj = SystemHeader()
376
578
377 self.dataOut.type = "Voltage"
579 self.dataOut.type = "Voltage"
378
580
379 self.dataOut.data = None
581 self.dataOut.data = None
380
582
381 self.dataOut.dtype = numpy.dtype([('real','<i8'),('imag','<i8')])
583 self.dataOut.dtype = numpy.dtype([('real','<i8'),('imag','<i8')])
382
584
383 self.dataOut.nProfiles = 1
585 self.dataOut.nProfiles = 1
384
586
385 self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth
587 self.dataOut.heightList = self.__firstHeigth + numpy.arange(self.__nSamples, dtype = numpy.float)*self.__deltaHeigth
386
588
387 self.dataOut.channelList = range(self.nChannels)
589 self.dataOut.channelList = range(self.nChannels)
388
590
389 #self.dataOut.channelIndexList = None
591 #self.dataOut.channelIndexList = None
390
592
391 self.dataOut.flagNoData = True
593 self.dataOut.flagNoData = True
392
594
393 #Set to TRUE if the data is discontinuous
595 #Set to TRUE if the data is discontinuous
394 self.dataOut.flagDiscontinuousBlock = False
596 self.dataOut.flagDiscontinuousBlock = False
395
597
396 self.dataOut.utctime = None
598 self.dataOut.utctime = None
397
599
398 self.dataOut.timeZone = 0
600 self.dataOut.timeZone = 0
399
601
400 self.dataOut.dstFlag = 0
602 self.dataOut.dstFlag = 0
401
603
402 self.dataOut.errorCount = 0
604 self.dataOut.errorCount = 0
403
605
404 self.dataOut.nCohInt = 1
606 self.dataOut.nCohInt = 1
405
607
406 self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights()
608 self.dataOut.blocksize = self.dataOut.getNChannels() * self.dataOut.getNHeights()
407
609
408 self.dataOut.flagDecodeData = False #asumo que la data esta decodificada
610 self.dataOut.flagDecodeData = False #asumo que la data esta decodificada
409
611
410 self.dataOut.flagDeflipData = False #asumo que la data esta sin flip
612 self.dataOut.flagDeflipData = False #asumo que la data esta sin flip
411
613
412 self.dataOut.flagShiftFFT = False
614 self.dataOut.flagShiftFFT = False
413
615
414 self.dataOut.ippSeconds = 1.0*self.__nSamples/self.__sample_rate
616 self.dataOut.ippSeconds = 1.0*self.__nSamples/self.__sample_rate
415
617
416 #Time interval between profiles
618 #Time interval between profiles
417 #self.dataOut.timeInterval =self.dataOut.ippSeconds * self.dataOut.nCohInt
619 #self.dataOut.timeInterval =self.dataOut.ippSeconds * self.dataOut.nCohInt
418
620
419
621
420 self.dataOut.frequency = self.__frequency
622 self.dataOut.frequency = self.__frequency
421
623
422 self.dataOut.realtime = self.__online
624 self.dataOut.realtime = self.__online
423
625
424 def __hasNotDataInBuffer(self):
626 def __hasNotDataInBuffer(self):
425
627
426 if self.profileIndex >= self.nProfiles:
628 if self.profileIndex >= self.nProfiles:
427 return 1
629 return 1
428
630
429 return 0
631 return 0
430
632
431 def readNextBlock(self):
633 def readNextBlock(self):
432 if not(self.__setNewBlock()):
634 if not(self.__setNewBlock()):
433 return 0
635 return 0
434
636
435 if not(self.readBlock()):
637 if not(self.readBlock()):
436 return 0
638 return 0
437
639
438 return 1
640 return 1
439
641
440 def __setNewBlock(self):
642 def __setNewBlock(self):
441
643
442 if self.hfFilePointer==None:
644 if self.hfFilePointer==None:
443 return 0
645 return 0
444
646
445 if self.flagIsNewFile:
647 if self.flagIsNewFile:
446 return 1
648 return 1
447
649
448 if self.profileIndex < self.nProfiles:
650 if self.profileIndex < self.nProfiles:
449 return 1
651 return 1
450
652
451 self.__setNextFile(self.online)
653 self.__setNextFile(self.online)
452
654
453 return 1
655 return 1
454
656
455
657
456
658
457 def readBlock(self):
659 def readBlock(self):
458 fp=h5py.File(self.filename,'r')
660 fp=h5py.File(self.filename,'r')
459 #Puntero que apunta al archivo hdf5
661 #Puntero que apunta al archivo hdf5
460 ch0=(fp['ch0']).value #Primer canal (100,1000)--(perfiles,alturas)
662 ch0=(fp['ch0']).value #Primer canal (100,1000)--(perfiles,alturas)
461 ch1=(fp['ch1']).value #Segundo canal (100,1000)--(perfiles,alturas)
663 ch1=(fp['ch1']).value #Segundo canal (100,1000)--(perfiles,alturas)
462 fp.close()
664 fp.close()
463 ch0= ch0.swapaxes(0,1) #Primer canal (100,1000)--(alturas,perfiles)
665 ch0= ch0.swapaxes(0,1) #Primer canal (100,1000)--(alturas,perfiles)
464 ch1= ch1.swapaxes(0,1) #Segundo canal (100,1000)--(alturas,perfiles)
666 ch1= ch1.swapaxes(0,1) #Segundo canal (100,1000)--(alturas,perfiles)
465 self.datablock = numpy.array([ch0,ch1])
667 self.datablock = numpy.array([ch0,ch1])
466 self.flagIsNewFile=0
668 self.flagIsNewFile=0
467
669
468 self.profileIndex=0
670 self.profileIndex=0
469
671
470 return 1
672 return 1
471
673
472 def getData(self):
674 def getData(self):
473 if self.flagNoMoreFiles:
675 if self.flagNoMoreFiles:
474 self.dataOut.flagNoData = True
676 self.dataOut.flagNoData = True
475 print 'Process finished'
677 print 'Process finished'
476 return 0
678 return 0
477
679
478 if self.__hasNotDataInBuffer():
680 if self.__hasNotDataInBuffer():
479 if not(self.readNextBlock()):
681 if not(self.readNextBlock()):
480 self.dataOut.flagNodata=True
682 self.dataOut.flagNodata=True
481 return 0
683 return 0
482
684
483 ##############################
685 ##############################
484 ##############################
686 ##############################
485 self.dataOut.data = self.datablock[:,:,self.profileIndex]
687 self.dataOut.data = self.datablock[:,:,self.profileIndex]
486 self.dataOut.utctime= self.__t0 + self.dataOut.ippSeconds*self.profileIndex+self.timezone
688 self.dataOut.utctime= self.__t0 + self.dataOut.ippSeconds*self.profileIndex+self.timezone
487 self.dataOut.profileIndex= self.profileIndex
689 self.dataOut.profileIndex= self.profileIndex
488 self.dataOut.flagNoData=False
690 self.dataOut.flagNoData=False
489 self.profileIndex +=1
691 self.profileIndex +=1
490
692
491 return self.dataOut.data
693 return self.dataOut.data
492
694
493
695
494 def run(self, **kwargs):
696 def run(self, **kwargs):
495 '''
697 '''
496 This method will be called many times so here you should put all your code
698 This method will be called many times so here you should put all your code
497 '''
699 '''
498
700
499 if not self.isConfig:
701 if not self.isConfig:
500 self.setup(**kwargs)
702 self.setup(**kwargs)
501 self.isConfig = True
703 self.isConfig = True
502 self.getData()
704 self.getData()
503
705
504
706
505
707
506 No newline at end of file
708
General Comments 0
You need to be logged in to leave comments. Login now