@@ -0,0 +1,4 | |||
|
1 | { | |
|
2 | "python.linting.pylintEnabled": true, | |
|
3 | "git.ignoreLimitWarning": true | |
|
4 | } No newline at end of file |
@@ -0,0 +1,88 | |||
|
1 | import argparse | |
|
2 | ||
|
3 | from schainpy.controller import Project, multiSchain | |
|
4 | ||
|
5 | desc = "HF_EXAMPLE" | |
|
6 | ||
|
7 | controllerObj = Project() | |
|
8 | ||
|
9 | controllerObj.setup(id='191', name='test01', description=desc) | |
|
10 | ||
|
11 | readUnitConfObj = controllerObj.addReadUnit(datatype='SpectraReader', | |
|
12 | path='/home/nanosat/data/sp1_f0', | |
|
13 | startDate="2017/01/26", | |
|
14 | endDate="2017/01/26", | |
|
15 | startTime="00:00:00", | |
|
16 | endTime="23:59:59", | |
|
17 | online=0, | |
|
18 | #set=1426485881, | |
|
19 | walk=1, | |
|
20 | verbose=1 | |
|
21 | #timezone=-5*3600 | |
|
22 | ) | |
|
23 | ||
|
24 | # #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock') | |
|
25 | # | |
|
26 | # procUnitConfObj2 = controllerObj.addProcUnit(datatype='Spectra', inputId=readUnitConfObj.getId()) | |
|
27 | # procUnitConfObj2.addParameter(name='nipp', value='5', format='int') | |
|
28 | ||
|
29 | procUnitConfObj3 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=readUnitConfObj.getId()) | |
|
30 | opObj11 = procUnitConfObj3.addOperation(name='SpectralMoments', optype='other') | |
|
31 | ||
|
32 | # | |
|
33 | # opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other') | |
|
34 | # opObj11.addParameter(name='id', value='1000', format='int') | |
|
35 | # opObj11.addParameter(name='wintitle', value='HF_Jicamarca_Spc', format='str') | |
|
36 | # opObj11.addParameter(name='channelList', value='0', format='intlist') | |
|
37 | # opObj11.addParameter(name='zmin', value='-120', format='float') | |
|
38 | # opObj11.addParameter(name='zmax', value='-70', format='float') | |
|
39 | # opObj11.addParameter(name='save', value='1', format='int') | |
|
40 | # opObj11.addParameter(name='figpath', value=figpath, format='str') | |
|
41 | ||
|
42 | opObj11 = procUnitConfObj3.addOperation(name='Parameters1Plot', optype='other') | |
|
43 | # opObj11.addParameter(name='channelList', value='0', format='intList') | |
|
44 | ||
|
45 | opObj11.addParameter(name='id', value='2000', format='int') | |
|
46 | # # opObj11.addParameter(name='colormap', value='0', format='bool') | |
|
47 | opObj11.addParameter(name='onlySNR', value='1', format='bool') | |
|
48 | opObj11.addParameter(name='DOP', value='0', format='bool') | |
|
49 | opObj11.addParameter(name='SNR', value='1', format='bool') | |
|
50 | opObj11.addParameter(name='SNRthresh', value='0', format='int') | |
|
51 | opObj11.addParameter(name='SNRmin', value='-10', format='int') | |
|
52 | opObj11.addParameter(name='SNRmax', value='30', format='int') | |
|
53 | opObj11.addParameter(name='xmin', value='0', format='int') | |
|
54 | opObj11.addParameter(name='xmax', value='24', format='int') | |
|
55 | ||
|
56 | # opObj12 = procUnitConfObj3.addOperation(name='ParametersPlot', optype='other') | |
|
57 | # #opObj11.addParameter(name='channelList', value='0', format='intlist') | |
|
58 | # opObj12.addParameter(name='id', value='301', format='int') | |
|
59 | # opObj12.addParameter(name='xmin', value='0', format='float') | |
|
60 | # opObj12.addParameter(name='xmax', value='24', format='float') | |
|
61 | ||
|
62 | # opObj11.addParameter(name='zmin', value='-110', format='float') | |
|
63 | # opObj11.addParameter(name='zmax', value='-70', format='float') | |
|
64 | # opObj11.addParameter(name='save', value='0', format='int') | |
|
65 | # # opObj11.addParameter(name='figpath', value='/tmp/', format='str') | |
|
66 | # | |
|
67 | # opObj12 = procUnitConfObj3.addOperation(name='PublishData', optype='other') | |
|
68 | # opObj12.addParameter(name='zeromq', value=1, format='int') | |
|
69 | # opObj12.addParameter(name='verbose', value=0, format='bool') | |
|
70 | ||
|
71 | ||
|
72 | # opObj13 = procUnitConfObj3.addOperation(name='PublishData', optype='other') | |
|
73 | # opObj13.addParameter(name='zeromq', value=1, format='int') | |
|
74 | # opObj13.addParameter(name='server', value="juanca", format='str') | |
|
75 | ||
|
76 | # opObj12.addParameter(name='delay', value=0, format='int') | |
|
77 | ||
|
78 | ||
|
79 | # print "Escribiendo el archivo XML" | |
|
80 | # controllerObj.writeXml(filename) | |
|
81 | # print "Leyendo el archivo XML" | |
|
82 | # controllerObj.readXml(filename) | |
|
83 | ||
|
84 | ||
|
85 | # timeit.timeit('controllerObj.run()', number=2) | |
|
86 | ||
|
87 | controllerObj.start() | |
|
88 |
@@ -0,0 +1,1 | |||
|
1 | You should install "digital_rf_hdf5" module if you want to read USRP data |
@@ -100,3 +100,9 ENV/ | |||
|
100 | 100 | # eclipse |
|
101 | 101 | .project |
|
102 | 102 | .pydevproject |
|
103 | ||
|
104 | # vscode | |
|
105 | ||
|
106 | .vscode | |
|
107 | ||
|
108 | schainpy/scripts/ No newline at end of file |
@@ -1,1 +1,1 | |||
|
1 |
<Project description="A schain project" id="191" name="project"><ReadUnit datatype="Voltage" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/nanosat/schain" /><Parameter format="date" id="191113" name="startDate" value="1970/01/01" /><Parameter format="date" id="191114" name="endDate" value="2017/12/31" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="walk" value="1" /><Parameter format="int" id="191119" name="verbose" value="1" /><Parameter format="int" id="191120" name="online" value="0" /></Operation></ReadUnit><ProcUnit datatype="Voltage" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="ProfileSelector" priority="2" type="other"><Parameter format="intlist" id="191221" name="profileRangeList" value="120,183" /></Operation><Operation id="19123" name="RTIPlot" priority="3" type=" |
|
|
1 | <Project description="A schain project" id="191" name="project"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/nanosat/schain" /><Parameter format="date" id="191113" name="startDate" value="1970/01/01" /><Parameter format="date" id="191114" name="endDate" value="2017/12/31" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="walk" value="1" /><Parameter format="int" id="191119" name="verbose" value="1" /><Parameter format="int" id="191120" name="online" value="0" /></Operation></ReadUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="ProfileSelector" priority="2" type="other"><Parameter format="intlist" id="191221" name="profileRangeList" value="120,183" /></Operation><Operation id="19123" name="RTIPlot" priority="3" type="other"><Parameter format="str" id="191231" name="wintitle" value="Jicamarca Radio Observatory" /><Parameter format="int" id="191232" name="showprofile" value="0" /><Parameter format="int" id="191233" name="xmin" value="0" /><Parameter format="int" id="191234" name="xmax" value="24" /><Parameter format="str" id="191235" name="figpath" value="/home/nanosat/schain/figs" /><Parameter format="int" id="191236" name="wr_period" value="5" /><Parameter format="int" id="191237" name="exp_code" value="22" /></Operation></ProcUnit></Project> No newline at end of file |
@@ -15,7 +15,7 from email.mime.text import MIMEText | |||
|
15 | 15 | from email.mime.application import MIMEApplication |
|
16 | 16 | from email.mime.multipart import MIMEMultipart |
|
17 | 17 | |
|
18 | class SchainConfigure(): | |
|
18 | class SchainConfigure(): | |
|
19 | 19 | |
|
20 | 20 | __DEFAULT_ADMINISTRATOR_EMAIL = "" |
|
21 | 21 | __DEFAULT_EMAIL_SERVER = "jro-zimbra.igp.gob.pe" |
@@ -217,7 +217,6 class ParameterConf(): | |||
|
217 | 217 | self.id = str(new_id) |
|
218 | 218 | |
|
219 | 219 | def setup(self, id, name, value, format='str'): |
|
220 | ||
|
221 | 220 | self.id = str(id) |
|
222 | 221 | self.name = name |
|
223 | 222 | if format == 'obj': |
@@ -757,26 +756,26 class ReadUnitConf(ProcUnitConf): | |||
|
757 | 756 | |
|
758 | 757 | return self.ELEMENTNAME |
|
759 | 758 | |
|
760 |
def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", |
|
|
759 | def setup(self, id, name, datatype, path='', startDate="", endDate="", startTime="", | |
|
760 | endTime="", parentId=None, queue=None, server=None, **kwargs): | |
|
761 | 761 | |
|
762 | 762 | #Compatible with old signal chain version |
|
763 | 763 | if datatype==None and name==None: |
|
764 | 764 | raise ValueError, "datatype or name should be defined" |
|
765 | ||
|
765 | ||
|
766 | 766 | if name==None: |
|
767 | 767 | if 'Reader' in datatype: |
|
768 | 768 | name = datatype |
|
769 | 769 | else: |
|
770 | 770 | name = '%sReader' %(datatype) |
|
771 | ||
|
772 | 771 | if datatype==None: |
|
773 | 772 | datatype = name.replace('Reader','') |
|
774 | 773 | |
|
775 | 774 | self.id = id |
|
776 | 775 | self.name = name |
|
777 | 776 | self.datatype = datatype |
|
778 | ||
|
779 | self.path = os.path.abspath(path) | |
|
777 | if path != '': | |
|
778 | self.path = os.path.abspath(path) | |
|
780 | 779 | self.startDate = startDate |
|
781 | 780 | self.endDate = endDate |
|
782 | 781 | self.startTime = startTime |
@@ -785,6 +784,7 class ReadUnitConf(ProcUnitConf): | |||
|
785 | 784 | self.inputId = '0' |
|
786 | 785 | self.parentId = parentId |
|
787 | 786 | self.queue = queue |
|
787 | self.server = server | |
|
788 | 788 | self.addRunOperation(**kwargs) |
|
789 | 789 | |
|
790 | 790 | def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, name=None, **kwargs): |
@@ -826,16 +826,19 class ReadUnitConf(ProcUnitConf): | |||
|
826 | 826 | |
|
827 | 827 | opObj = self.addOperation(name = 'run', optype = 'self') |
|
828 | 828 | |
|
829 | opObj.addParameter(name='datatype' , value=self.datatype, format='str') | |
|
830 |
opObj.addParameter(name=' |
|
|
831 |
opObj.addParameter(name=' |
|
|
832 |
opObj.addParameter(name=' |
|
|
833 |
opObj.addParameter(name=' |
|
|
834 |
opObj.addParameter(name=' |
|
|
835 |
opObj.addParameter(name=' |
|
|
836 | ||
|
837 | for key, value in kwargs.items(): | |
|
838 | opObj.addParameter(name=key, value=value, format=type(value).__name__) | |
|
829 | if self.server is None: | |
|
830 | opObj.addParameter(name='datatype' , value=self.datatype, format='str') | |
|
831 | opObj.addParameter(name='path' , value=self.path, format='str') | |
|
832 | opObj.addParameter(name='startDate' , value=self.startDate, format='date') | |
|
833 | opObj.addParameter(name='endDate' , value=self.endDate, format='date') | |
|
834 | opObj.addParameter(name='startTime' , value=self.startTime, format='time') | |
|
835 | opObj.addParameter(name='endTime' , value=self.endTime, format='time') | |
|
836 | opObj.addParameter(name='queue' , value=self.queue, format='obj') | |
|
837 | for key, value in kwargs.items(): | |
|
838 | opObj.addParameter(name=key, value=value, format=type(value).__name__) | |
|
839 | else: | |
|
840 | opObj.addParameter(name='server' , value=self.server, format='str') | |
|
841 | ||
|
839 | 842 | |
|
840 | 843 | return opObj |
|
841 | 844 |
@@ -115,7 +115,6 class BasicHeader(Header): | |||
|
115 | 115 | dstFlag = None |
|
116 | 116 | errorCount = None |
|
117 | 117 | datatime = None |
|
118 | ||
|
119 | 118 | __LOCALTIME = None |
|
120 | 119 | |
|
121 | 120 | def __init__(self, useLocalTime=True): |
@@ -133,14 +132,17 class BasicHeader(Header): | |||
|
133 | 132 | |
|
134 | 133 | def read(self, fp): |
|
135 | 134 | |
|
135 | self.length = 0 | |
|
136 | 136 | try: |
|
137 | header = numpy.fromfile(fp, BASIC_STRUCTURE,1) | |
|
138 | ||
|
137 | if hasattr(fp, 'read'): | |
|
138 | header = numpy.fromfile(fp, BASIC_STRUCTURE,1) | |
|
139 | else: | |
|
140 | header = numpy.fromstring(fp, BASIC_STRUCTURE,1) | |
|
139 | 141 | except Exception, e: |
|
140 | 142 | print "BasicHeader: " |
|
141 | 143 | print e |
|
142 | 144 | return 0 |
|
143 | ||
|
145 | ||
|
144 | 146 | self.size = int(header['nSize'][0]) |
|
145 | 147 | self.version = int(header['nVersion'][0]) |
|
146 | 148 | self.dataBlock = int(header['nDataBlockId'][0]) |
@@ -152,7 +154,8 class BasicHeader(Header): | |||
|
152 | 154 | |
|
153 | 155 | if self.size < 24: |
|
154 | 156 | return 0 |
|
155 | ||
|
157 | ||
|
158 | self.length = header.nbytes | |
|
156 | 159 | return 1 |
|
157 | 160 | |
|
158 | 161 | def write(self, fp): |
@@ -197,13 +200,20 class SystemHeader(Header): | |||
|
197 | 200 | self.pciDioBusWidth = pciDioBusWith |
|
198 | 201 | |
|
199 | 202 | def read(self, fp): |
|
200 | ||
|
201 | startFp = fp.tell() | |
|
202 | ||
|
203 | self.length = 0 | |
|
204 | try: | |
|
205 | startFp = fp.tell() | |
|
206 | except Exception, e: | |
|
207 | startFp = None | |
|
208 | pass | |
|
209 | ||
|
203 | 210 | try: |
|
204 | header = numpy.fromfile(fp,SYSTEM_STRUCTURE,1) | |
|
211 | if hasattr(fp, 'read'): | |
|
212 | header = numpy.fromfile(fp, SYSTEM_STRUCTURE,1) | |
|
213 | else: | |
|
214 | header = numpy.fromstring(fp, SYSTEM_STRUCTURE,1) | |
|
205 | 215 | except Exception, e: |
|
206 | print "System Header: " + e | |
|
216 | print "System Header: " + str(e) | |
|
207 | 217 | return 0 |
|
208 | 218 | |
|
209 | 219 | self.size = header['nSize'][0] |
@@ -213,16 +223,19 class SystemHeader(Header): | |||
|
213 | 223 | self.adcResolution = header['nADCResolution'][0] |
|
214 | 224 | self.pciDioBusWidth = header['nPCDIOBusWidth'][0] |
|
215 | 225 | |
|
216 | endFp = self.size + startFp | |
|
217 | 226 | |
|
218 | if fp.tell() > endFp: | |
|
219 | sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) | |
|
220 | return 0 | |
|
227 | if startFp is not None: | |
|
228 | endFp = self.size + startFp | |
|
221 | 229 | |
|
222 |
if fp.tell() |
|
|
223 |
sys.stderr.write("Warning %s: Size value read from System Header |
|
|
224 | return 0 | |
|
230 | if fp.tell() > endFp: | |
|
231 | sys.stderr.write("Warning %s: Size value read from System Header is lower than it has to be\n" %fp.name) | |
|
232 | return 0 | |
|
233 | ||
|
234 | if fp.tell() < endFp: | |
|
235 | sys.stderr.write("Warning %s: Size value read from System Header size is greater than it has to be\n" %fp.name) | |
|
236 | return 0 | |
|
225 | 237 | |
|
238 | self.length = header.nbytes | |
|
226 | 239 | return 1 |
|
227 | 240 | |
|
228 | 241 | def write(self, fp): |
@@ -299,13 +312,21 class RadarControllerHeader(Header): | |||
|
299 | 312 | self.fClock = 0.15/(deltaHeight*1e-6) #0.15Km / (height * 1u) |
|
300 | 313 | |
|
301 | 314 | def read(self, fp): |
|
302 | ||
|
303 | ||
|
304 | startFp = fp.tell() | |
|
315 | self.length = 0 | |
|
316 | try: | |
|
317 | startFp = fp.tell() | |
|
318 | except Exception, e: | |
|
319 | startFp = None | |
|
320 | pass | |
|
321 | ||
|
305 | 322 | try: |
|
306 | header = numpy.fromfile(fp,RADAR_STRUCTURE,1) | |
|
323 | if hasattr(fp, 'read'): | |
|
324 | header = numpy.fromfile(fp, RADAR_STRUCTURE,1) | |
|
325 | else: | |
|
326 | header = numpy.fromstring(fp, RADAR_STRUCTURE,1) | |
|
327 | self.length += header.nbytes | |
|
307 | 328 | except Exception, e: |
|
308 | print "RadarControllerHeader: " + e | |
|
329 | print "RadarControllerHeader: " + str(e) | |
|
309 | 330 | return 0 |
|
310 | 331 | |
|
311 | 332 | size = int(header['nSize'][0]) |
@@ -326,23 +347,64 class RadarControllerHeader(Header): | |||
|
326 | 347 | self.rangeTxA = header['sRangeTxA'][0] |
|
327 | 348 | self.rangeTxB = header['sRangeTxB'][0] |
|
328 | 349 | |
|
329 | samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) | |
|
330 | ||
|
350 | try: | |
|
351 | if hasattr(fp, 'read'): | |
|
352 | samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) | |
|
353 | else: | |
|
354 | samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) | |
|
355 | self.length += samplingWindow.nbytes | |
|
356 | except Exception, e: | |
|
357 | print "RadarControllerHeader: " + str(e) | |
|
358 | return 0 | |
|
331 | 359 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) |
|
332 | 360 | self.firstHeight = samplingWindow['h0'] |
|
333 | 361 | self.deltaHeight = samplingWindow['dh'] |
|
334 | 362 | self.samplesWin = samplingWindow['nsa'] |
|
363 | ||
|
364 | ||
|
365 | ||
|
366 | try: | |
|
367 | if hasattr(fp, 'read'): | |
|
368 | self.Taus = numpy.fromfile(fp, '<f4', self.numTaus) | |
|
369 | else: | |
|
370 | self.Taus = numpy.fromstring(fp[self.length:], '<f4', self.numTaus) | |
|
371 | self.length += self.Taus.nbytes | |
|
372 | except Exception, e: | |
|
373 | print "RadarControllerHeader: " + str(e) | |
|
374 | return 0 | |
|
375 | ||
|
335 | 376 | |
|
336 | self.Taus = numpy.fromfile(fp,'<f4',self.numTaus) | |
|
337 | 377 | |
|
338 | 378 | self.code_size = 0 |
|
339 | 379 | if self.codeType != 0: |
|
340 | self.nCode = int(numpy.fromfile(fp,'<u4',1)) | |
|
341 | self.nBaud = int(numpy.fromfile(fp,'<u4',1)) | |
|
342 | 380 | |
|
381 | try: | |
|
382 | if hasattr(fp, 'read'): | |
|
383 | self.nCode = numpy.fromfile(fp, '<u4', 1) | |
|
384 | self.length += self.nCode.nbytes | |
|
385 | self.nBaud = numpy.fromfile(fp, '<u4', 1) | |
|
386 | self.length += self.nBaud.nbytes | |
|
387 | else: | |
|
388 | self.nCode = numpy.fromstring(fp[self.length:], '<u4', 1)[0] | |
|
389 | self.length += self.nCode.nbytes | |
|
390 | self.nBaud = numpy.fromstring(fp[self.length:], '<u4', 1)[0] | |
|
391 | self.length += self.nBaud.nbytes | |
|
392 | except Exception, e: | |
|
393 | print "RadarControllerHeader: " + str(e) | |
|
394 | return 0 | |
|
343 | 395 | code = numpy.empty([self.nCode,self.nBaud],dtype='i1') |
|
396 | ||
|
344 | 397 | for ic in range(self.nCode): |
|
345 | temp = numpy.fromfile(fp,'u4',int(numpy.ceil(self.nBaud/32.))) | |
|
398 | try: | |
|
399 | if hasattr(fp, 'read'): | |
|
400 | temp = numpy.fromfile(fp,'u4', int(numpy.ceil(self.nBaud/32.))) | |
|
401 | else: | |
|
402 | temp = numpy.fromstring(fp,'u4', int(numpy.ceil(self.nBaud/32.))) | |
|
403 | self.length += temp.nbytes | |
|
404 | except Exception, e: | |
|
405 | print "RadarControllerHeader: " + str(e) | |
|
406 | return 0 | |
|
407 | ||
|
346 | 408 | for ib in range(self.nBaud-1,-1,-1): |
|
347 | 409 | code[ic,ib] = temp[ib/32]%2 |
|
348 | 410 | temp[ib/32] = temp[ib/32]/2 |
@@ -355,21 +417,22 class RadarControllerHeader(Header): | |||
|
355 | 417 | # |
|
356 | 418 | # if self.line6Function == RCfunction.FLIP: |
|
357 | 419 | # self.flip2 = numpy.fromfile(fp,'<u4',1) |
|
358 | ||
|
359 | endFp = size + startFp | |
|
360 | ||
|
361 | if fp.tell() != endFp: | |
|
362 | # fp.seek(endFp) | |
|
363 | print "%s: Radar Controller Header size is not consistent: from data [%d] != from header field [%d]" %(fp.name, fp.tell()-startFp, size) | |
|
364 | # return 0 | |
|
365 | ||
|
366 | if fp.tell() > endFp: | |
|
367 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) | |
|
368 | # return 0 | |
|
420 | if startFp is not None: | |
|
421 | endFp = size + startFp | |
|
369 | 422 | |
|
370 |
if fp.tell() |
|
|
371 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) | |
|
423 | if fp.tell() != endFp: | |
|
424 | # fp.seek(endFp) | |
|
425 | print "%s: Radar Controller Header size is not consistent: from data [%d] != from header field [%d]" %(fp.name, fp.tell()-startFp, size) | |
|
426 | # return 0 | |
|
427 | ||
|
428 | if fp.tell() > endFp: | |
|
429 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is lower than it has to be\n" %fp.name) | |
|
430 | # return 0 | |
|
431 | ||
|
432 | if fp.tell() < endFp: | |
|
433 | sys.stderr.write("Warning %s: Size value read from Radar Controller header is greater than it has to be\n" %fp.name) | |
|
372 | 434 | |
|
435 | ||
|
373 | 436 | return 1 |
|
374 | 437 | |
|
375 | 438 | def write(self, fp): |
@@ -508,15 +571,23 class ProcessingHeader(Header): | |||
|
508 | 571 | self.flag_cspc = False |
|
509 | 572 | self.flag_decode = False |
|
510 | 573 | self.flag_deflip = False |
|
511 | ||
|
574 | self.length = 0 | |
|
512 | 575 | def read(self, fp): |
|
513 | ||
|
514 | startFp = fp.tell() | |
|
576 | self.length = 0 | |
|
577 | try: | |
|
578 | startFp = fp.tell() | |
|
579 | except Exception, e: | |
|
580 | startFp = None | |
|
581 | pass | |
|
515 | 582 | |
|
516 | 583 | try: |
|
517 | header = numpy.fromfile(fp,PROCESSING_STRUCTURE,1) | |
|
584 | if hasattr(fp, 'read'): | |
|
585 | header = numpy.fromfile(fp, PROCESSING_STRUCTURE, 1) | |
|
586 | else: | |
|
587 | header = numpy.fromstring(fp, PROCESSING_STRUCTURE, 1) | |
|
588 | self.length += header.nbytes | |
|
518 | 589 | except Exception, e: |
|
519 | print "ProcessingHeader: " + e | |
|
590 | print "ProcessingHeader: " + str(e) | |
|
520 | 591 | return 0 |
|
521 | 592 | |
|
522 | 593 | size = int(header['nSize'][0]) |
@@ -530,14 +601,31 class ProcessingHeader(Header): | |||
|
530 | 601 | self.nIncohInt = int(header['nIncoherentIntegrations'][0]) |
|
531 | 602 | self.totalSpectra = int(header['nTotalSpectra'][0]) |
|
532 | 603 | |
|
533 | samplingWindow = numpy.fromfile(fp,SAMPLING_STRUCTURE,self.nWindows) | |
|
604 | try: | |
|
605 | if hasattr(fp, 'read'): | |
|
606 | samplingWindow = numpy.fromfile(fp, SAMPLING_STRUCTURE, self.nWindows) | |
|
607 | else: | |
|
608 | samplingWindow = numpy.fromstring(fp[self.length:], SAMPLING_STRUCTURE, self.nWindows) | |
|
609 | self.length += samplingWindow.nbytes | |
|
610 | except Exception, e: | |
|
611 | print "ProcessingHeader: " + str(e) | |
|
612 | return 0 | |
|
534 | 613 | |
|
535 | 614 | self.nHeights = int(numpy.sum(samplingWindow['nsa'])) |
|
536 | 615 | self.firstHeight = float(samplingWindow['h0'][0]) |
|
537 | 616 | self.deltaHeight = float(samplingWindow['dh'][0]) |
|
538 | 617 | self.samplesWin = samplingWindow['nsa'][0] |
|
539 | 618 | |
|
540 | self.spectraComb = numpy.fromfile(fp,'u1',2*self.totalSpectra) | |
|
619 | ||
|
620 | try: | |
|
621 | if hasattr(fp, 'read'): | |
|
622 | self.spectraComb = numpy.fromfile(fp, 'u1', 2*self.totalSpectra) | |
|
623 | else: | |
|
624 | self.spectraComb = numpy.fromstring(fp[self.length:], 'u1', 2*self.totalSpectra) | |
|
625 | self.length += self.spectraComb.nbytes | |
|
626 | except Exception, e: | |
|
627 | print "ProcessingHeader: " + str(e) | |
|
628 | return 0 | |
|
541 | 629 | |
|
542 | 630 | if ((self.processFlags & PROCFLAG.DEFINE_PROCESS_CODE) == PROCFLAG.DEFINE_PROCESS_CODE): |
|
543 | 631 | self.nCode = int(numpy.fromfile(fp,'<u4',1)) |
@@ -583,14 +671,16 class ProcessingHeader(Header): | |||
|
583 | 671 | if nPairs > 0: |
|
584 | 672 | self.flag_cspc = True |
|
585 | 673 | |
|
586 | endFp = size + startFp | |
|
587 | 674 | |
|
588 | if fp.tell() > endFp: | |
|
589 | sys.stderr.write("Warning: Processing header size is lower than it has to be") | |
|
590 | return 0 | |
|
591 | ||
|
592 | if fp.tell() < endFp: | |
|
593 | sys.stderr.write("Warning: Processing header size is greater than it is considered") | |
|
675 | ||
|
676 | if startFp is not None: | |
|
677 | endFp = size + startFp | |
|
678 | if fp.tell() > endFp: | |
|
679 | sys.stderr.write("Warning: Processing header size is lower than it has to be") | |
|
680 | return 0 | |
|
681 | ||
|
682 | if fp.tell() < endFp: | |
|
683 | sys.stderr.write("Warning: Processing header size is greater than it is considered") | |
|
594 | 684 | |
|
595 | 685 | return 1 |
|
596 | 686 |
@@ -11,8 +11,8 import numpy | |||
|
11 | 11 | import fnmatch |
|
12 | 12 | import inspect |
|
13 | 13 | import time, datetime |
|
14 | #import h5py | |
|
15 | 14 | import traceback |
|
15 | import zmq | |
|
16 | 16 | |
|
17 | 17 | try: |
|
18 | 18 | from gevent import sleep |
@@ -994,12 +994,13 class JRODataReader(JRODataIO): | |||
|
994 | 994 | self.__isFirstTimeOnline = 0 |
|
995 | 995 | |
|
996 | 996 | def __setNewBlock(self): |
|
997 | ||
|
997 | #if self.server is None: | |
|
998 | 998 | if self.fp == None: |
|
999 | 999 | return 0 |
|
1000 | 1000 | |
|
1001 | 1001 | # if self.online: |
|
1002 | 1002 | # self.__jumpToLastBlock() |
|
1003 | print 'xxxx' | |
|
1003 | 1004 | |
|
1004 | 1005 | if self.flagIsNewFile: |
|
1005 | 1006 | self.lastUTTime = self.basicHeaderObj.utc |
@@ -1011,19 +1012,22 class JRODataReader(JRODataIO): | |||
|
1011 | 1012 | return 0 |
|
1012 | 1013 | else: |
|
1013 | 1014 | return 1 |
|
1014 | ||
|
1015 | print 'xxxx' | |
|
1016 | #if self.server is None: | |
|
1015 | 1017 | currentSize = self.fileSize - self.fp.tell() |
|
1016 | 1018 | neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize |
|
1017 | ||
|
1018 | 1019 | if (currentSize >= neededSize): |
|
1019 | 1020 | self.basicHeaderObj.read(self.fp) |
|
1020 | 1021 | self.lastUTTime = self.basicHeaderObj.utc |
|
1021 | 1022 | return 1 |
|
1022 | ||
|
1023 | # else: | |
|
1024 | # self.basicHeaderObj.read(self.zHeader) | |
|
1025 | # self.lastUTTime = self.basicHeaderObj.utc | |
|
1026 | # return 1 | |
|
1023 | 1027 | if self.__waitNewBlock(): |
|
1024 | 1028 | self.lastUTTime = self.basicHeaderObj.utc |
|
1025 | 1029 | return 1 |
|
1026 | ||
|
1030 | #if self.server is None: | |
|
1027 | 1031 | if not(self.setNextFile()): |
|
1028 | 1032 | return 0 |
|
1029 | 1033 | |
@@ -1041,9 +1045,11 class JRODataReader(JRODataIO): | |||
|
1041 | 1045 | |
|
1042 | 1046 | #Skip block out of startTime and endTime |
|
1043 | 1047 | while True: |
|
1048 | print 'cxxxx' | |
|
1044 | 1049 | if not(self.__setNewBlock()): |
|
1050 | print 'returning' | |
|
1045 | 1051 | return 0 |
|
1046 | ||
|
1052 | print 'dxxx' | |
|
1047 | 1053 | if not(self.readBlock()): |
|
1048 | 1054 | return 0 |
|
1049 | 1055 | |
@@ -1274,99 +1280,111 class JRODataReader(JRODataIO): | |||
|
1274 | 1280 | skip=None, |
|
1275 | 1281 | cursor=None, |
|
1276 | 1282 | warnings=True, |
|
1277 |
verbose=True |
|
|
1278 | ||
|
1279 |
if |
|
|
1280 | raise ValueError, "[Reading] The path is not valid" | |
|
1281 | ||
|
1282 |
|
|
|
1283 | ext = self.ext | |
|
1284 | ||
|
1285 | if online: | |
|
1286 | print "[Reading] Searching files in online mode..." | |
|
1287 | ||
|
1288 | for nTries in range( self.nTries ): | |
|
1289 | fullpath, foldercounter, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=ext, walk=walk, set=set) | |
|
1290 | ||
|
1291 | if fullpath: | |
|
1292 |
|
|
|
1293 | ||
|
1294 | print '[Reading] Waiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1) | |
|
1295 | sleep( self.delay ) | |
|
1296 | ||
|
1297 | if not(fullpath): | |
|
1298 | print "[Reading] There 'isn't any valid file in %s" % path | |
|
1299 | return | |
|
1300 | ||
|
1301 | self.year = year | |
|
1302 | self.doy = doy | |
|
1303 | self.set = set - 1 | |
|
1304 | self.path = path | |
|
1305 | self.foldercounter = foldercounter | |
|
1306 | last_set = None | |
|
1283 | verbose=True, | |
|
1284 | server=None): | |
|
1285 | if server is not None: | |
|
1286 | if 'tcp://' in server: | |
|
1287 | address = server | |
|
1288 | else: | |
|
1289 | address = 'ipc:///tmp/%s' % server | |
|
1290 | self.server = address | |
|
1291 | self.context = zmq.Context() | |
|
1292 | self.receiver = self.context.socket(zmq.PULL) | |
|
1293 | self.receiver.connect(self.server) | |
|
1294 | time.sleep(0.5) | |
|
1295 | print '[Starting] ReceiverData from {}'.format(self.server) | |
|
1296 | else: | |
|
1297 | self.server = None | |
|
1298 | if path == None: | |
|
1299 | raise ValueError, "[Reading] The path is not valid" | |
|
1300 | ||
|
1301 | if ext == None: | |
|
1302 | ext = self.ext | |
|
1303 | ||
|
1304 | if online: | |
|
1305 | print "[Reading] Searching files in online mode..." | |
|
1306 | ||
|
1307 | for nTries in range( self.nTries ): | |
|
1308 | fullpath, foldercounter, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=ext, walk=walk, set=set) | |
|
1309 | ||
|
1310 | if fullpath: | |
|
1311 | break | |
|
1312 | ||
|
1313 | print '[Reading] Waiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1) | |
|
1314 | sleep( self.delay ) | |
|
1315 | ||
|
1316 | if not(fullpath): | |
|
1317 | print "[Reading] There 'isn't any valid file in %s" % path | |
|
1318 | return | |
|
1319 | ||
|
1320 | self.year = year | |
|
1321 | self.doy = doy | |
|
1322 | self.set = set - 1 | |
|
1323 | self.path = path | |
|
1324 | self.foldercounter = foldercounter | |
|
1325 | last_set = None | |
|
1326 | else: | |
|
1327 | print "[Reading] Searching files in offline mode ..." | |
|
1328 | pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate, | |
|
1329 | startTime=startTime, endTime=endTime, | |
|
1330 | set=set, expLabel=expLabel, ext=ext, | |
|
1331 | walk=walk, cursor=cursor, | |
|
1332 | skip=skip, queue=queue) | |
|
1307 | 1333 | |
|
1308 | else: | |
|
1309 | print "[Reading] Searching files in offline mode ..." | |
|
1310 | pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate, | |
|
1311 |
|
|
|
1312 | set=set, expLabel=expLabel, ext=ext, | |
|
1313 | walk=walk, cursor=cursor, | |
|
1314 | skip=skip, queue=queue) | |
|
1334 | if not(pathList): | |
|
1335 | # print "[Reading] No *%s files in %s (%s - %s)"%(ext, path, | |
|
1336 | # datetime.datetime.combine(startDate,startTime).ctime(), | |
|
1337 | # datetime.datetime.combine(endDate,endTime).ctime()) | |
|
1315 | 1338 | |
|
1316 | if not(pathList): | |
|
1317 | # print "[Reading] No *%s files in %s (%s - %s)"%(ext, path, | |
|
1318 | # datetime.datetime.combine(startDate,startTime).ctime(), | |
|
1319 | # datetime.datetime.combine(endDate,endTime).ctime()) | |
|
1339 | # sys.exit(-1) | |
|
1320 | 1340 | |
|
1321 |
|
|
|
1341 | self.fileIndex = -1 | |
|
1342 | self.pathList = [] | |
|
1343 | self.filenameList = [] | |
|
1344 | return | |
|
1322 | 1345 | |
|
1323 | 1346 | self.fileIndex = -1 |
|
1324 |
self.pathList = |
|
|
1325 |
self.filenameList = |
|
|
1326 | return | |
|
1327 | ||
|
1328 | self.fileIndex = -1 | |
|
1329 | self.pathList = pathList | |
|
1330 |
self. |
|
|
1331 | file_name = os.path.basename(filenameList[-1]) | |
|
1332 | basename, ext = os.path.splitext(file_name) | |
|
1333 | last_set = int(basename[-3:]) | |
|
1334 | ||
|
1335 | self.online = online | |
|
1336 | self.realtime = realtime | |
|
1337 | self.delay = delay | |
|
1338 | ext = ext.lower() | |
|
1339 | self.ext = ext | |
|
1340 | self.getByBlock = getblock | |
|
1341 | self.nTxs = nTxs | |
|
1342 |
self.st |
|
|
1343 | self.endTime = endTime | |
|
1344 | ||
|
1345 | #Added----------------- | |
|
1346 | self.selBlocksize = blocksize | |
|
1347 | self.selBlocktime = blocktime | |
|
1348 | ||
|
1349 | # Verbose----------- | |
|
1350 | self.verbose = verbose | |
|
1351 | self.warnings = warnings | |
|
1347 | self.pathList = pathList | |
|
1348 | self.filenameList = filenameList | |
|
1349 | file_name = os.path.basename(filenameList[-1]) | |
|
1350 | basename, ext = os.path.splitext(file_name) | |
|
1351 | last_set = int(basename[-3:]) | |
|
1352 | ||
|
1353 | self.online = online | |
|
1354 | self.realtime = realtime | |
|
1355 | self.delay = delay | |
|
1356 | ext = ext.lower() | |
|
1357 | self.ext = ext | |
|
1358 | self.getByBlock = getblock | |
|
1359 | self.nTxs = nTxs | |
|
1360 | self.startTime = startTime | |
|
1361 | self.endTime = endTime | |
|
1362 | ||
|
1363 | #Added----------------- | |
|
1364 | self.selBlocksize = blocksize | |
|
1365 | self.selBlocktime = blocktime | |
|
1366 | ||
|
1367 | # Verbose----------- | |
|
1368 | self.verbose = verbose | |
|
1369 | self.warnings = warnings | |
|
1352 | 1370 | |
|
1353 | if not(self.setNextFile()): | |
|
1354 | if (startDate!=None) and (endDate!=None): | |
|
1355 | print "[Reading] No files in range: %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime()) | |
|
1356 | elif startDate != None: | |
|
1357 | print "[Reading] No files in range: %s" %(datetime.datetime.combine(startDate,startTime).ctime()) | |
|
1358 | else: | |
|
1359 | print "[Reading] No files" | |
|
1371 | if not(self.setNextFile()): | |
|
1372 | if (startDate!=None) and (endDate!=None): | |
|
1373 | print "[Reading] No files in range: %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime()) | |
|
1374 | elif startDate != None: | |
|
1375 | print "[Reading] No files in range: %s" %(datetime.datetime.combine(startDate,startTime).ctime()) | |
|
1376 | else: | |
|
1377 | print "[Reading] No files" | |
|
1360 | 1378 | |
|
1361 | self.fileIndex = -1 | |
|
1362 | self.pathList = [] | |
|
1363 | self.filenameList = [] | |
|
1364 | return | |
|
1379 | self.fileIndex = -1 | |
|
1380 | self.pathList = [] | |
|
1381 | self.filenameList = [] | |
|
1382 | return | |
|
1365 | 1383 | |
|
1366 | # self.getBasicHeader() | |
|
1384 | # self.getBasicHeader() | |
|
1367 | 1385 | |
|
1368 | if last_set != None: | |
|
1369 | self.dataOut.last_block = last_set * self.processingHeaderObj.dataBlocksPerFile + self.basicHeaderObj.dataBlock | |
|
1386 | if last_set != None: | |
|
1387 | self.dataOut.last_block = last_set * self.processingHeaderObj.dataBlocksPerFile + self.basicHeaderObj.dataBlock | |
|
1370 | 1388 | return |
|
1371 | 1389 | |
|
1372 | 1390 | def getBasicHeader(self): |
@@ -1457,6 +1475,7 class JRODataReader(JRODataIO): | |||
|
1457 | 1475 | skip=None, |
|
1458 | 1476 | cursor=None, |
|
1459 | 1477 | warnings=True, |
|
1478 | server=None, | |
|
1460 | 1479 | verbose=True, **kwargs): |
|
1461 | 1480 | |
|
1462 | 1481 | if not(self.isConfig): |
@@ -1481,10 +1500,13 class JRODataReader(JRODataIO): | |||
|
1481 | 1500 | skip=skip, |
|
1482 | 1501 | cursor=cursor, |
|
1483 | 1502 | warnings=warnings, |
|
1503 | server=server, | |
|
1484 | 1504 | verbose=verbose) |
|
1485 | 1505 | self.isConfig = True |
|
1486 | ||
|
1487 | self.getData() | |
|
1506 | if server is None: | |
|
1507 | self.getData() | |
|
1508 | else: | |
|
1509 | self.getFromServer() | |
|
1488 | 1510 | |
|
1489 | 1511 | class JRODataWriter(JRODataIO): |
|
1490 | 1512 |
@@ -10,6 +10,9 from jroIO_base import LOCALTIME, JRODataReader, JRODataWriter | |||
|
10 | 10 | from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation |
|
11 | 11 | from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader |
|
12 | 12 | from schainpy.model.data.jrodata import Voltage |
|
13 | import zmq | |
|
14 | import tempfile | |
|
15 | from StringIO import StringIO | |
|
13 | 16 | # from _sha import blocksize |
|
14 | 17 | |
|
15 | 18 | class VoltageReader(JRODataReader, ProcessingUnit): |
@@ -188,6 +191,7 class VoltageReader(JRODataReader, ProcessingUnit): | |||
|
188 | 191 | pts2read = self.processingHeaderObj.profilesPerBlock * self.processingHeaderObj.nHeights * self.systemHeaderObj.nChannels |
|
189 | 192 | self.blocksize = pts2read |
|
190 | 193 | |
|
194 | ||
|
191 | 195 | |
|
192 | 196 | def readBlock(self): |
|
193 | 197 | """ |
@@ -212,11 +216,23 class VoltageReader(JRODataReader, ProcessingUnit): | |||
|
212 | 216 | Exceptions: |
|
213 | 217 | Si un bloque leido no es un bloque valido |
|
214 | 218 | """ |
|
219 | ||
|
220 | print 'READ BLOCK' | |
|
221 | # if self.server is not None: | |
|
222 | # self.zBlock = self.receiver.recv() | |
|
223 | # self.zHeader = self.zBlock[:24] | |
|
224 | # self.zDataBlock = self.zBlock[24:] | |
|
225 | # junk = numpy.fromstring(self.zDataBlock, numpy.dtype([('real','<i4'),('imag','<i4')])) | |
|
226 | # self.processingHeaderObj.profilesPerBlock = 240 | |
|
227 | # self.processingHeaderObj.nHeights = 248 | |
|
228 | # self.systemHeaderObj.nChannels | |
|
229 | # else: | |
|
215 | 230 | current_pointer_location = self.fp.tell() |
|
216 | 231 | junk = numpy.fromfile( self.fp, self.dtype, self.blocksize ) |
|
217 | 232 | |
|
218 | 233 | try: |
|
219 | 234 | junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) ) |
|
235 | print'junked' | |
|
220 | 236 | except: |
|
221 | 237 | #print "The read block (%3d) has not enough data" %self.nReadBlocks |
|
222 | 238 | |
@@ -301,6 +317,97 class VoltageReader(JRODataReader, ProcessingUnit): | |||
|
301 | 317 | |
|
302 | 318 | return |
|
303 | 319 | |
|
320 | def readFirstHeaderFromServer(self): | |
|
321 | ||
|
322 | self.getFirstHeader() | |
|
323 | ||
|
324 | self.firstHeaderSize = self.basicHeaderObj.size | |
|
325 | ||
|
326 | datatype = int(numpy.log2((self.processingHeaderObj.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR)) | |
|
327 | if datatype == 0: | |
|
328 | datatype_str = numpy.dtype([('real','<i1'),('imag','<i1')]) | |
|
329 | elif datatype == 1: | |
|
330 | datatype_str = numpy.dtype([('real','<i2'),('imag','<i2')]) | |
|
331 | elif datatype == 2: | |
|
332 | datatype_str = numpy.dtype([('real','<i4'),('imag','<i4')]) | |
|
333 | elif datatype == 3: | |
|
334 | datatype_str = numpy.dtype([('real','<i8'),('imag','<i8')]) | |
|
335 | elif datatype == 4: | |
|
336 | datatype_str = numpy.dtype([('real','<f4'),('imag','<f4')]) | |
|
337 | elif datatype == 5: | |
|
338 | datatype_str = numpy.dtype([('real','<f8'),('imag','<f8')]) | |
|
339 | else: | |
|
340 | raise ValueError, 'Data type was not defined' | |
|
341 | ||
|
342 | self.dtype = datatype_str | |
|
343 | #self.ippSeconds = 2 * 1000 * self.radarControllerHeaderObj.ipp / self.c | |
|
344 | self.fileSizeByHeader = self.processingHeaderObj.dataBlocksPerFile * self.processingHeaderObj.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.processingHeaderObj.dataBlocksPerFile - 1) | |
|
345 | # self.dataOut.channelList = numpy.arange(self.systemHeaderObj.numChannels) | |
|
346 | # self.dataOut.channelIndexList = numpy.arange(self.systemHeaderObj.numChannels) | |
|
347 | self.getBlockDimension() | |
|
348 | ||
|
349 | ||
|
350 | def getFromServer(self): | |
|
351 | self.flagDiscontinuousBlock = 0 | |
|
352 | self.profileIndex = 0 | |
|
353 | self.flagIsNewBlock = 1 | |
|
354 | self.dataOut.flagNoData = False | |
|
355 | self.nTotalBlocks += 1 | |
|
356 | self.nReadBlocks += 1 | |
|
357 | self.blockPointer = 0 | |
|
358 | ||
|
359 | block = self.receiver.recv() | |
|
360 | ||
|
361 | self.basicHeaderObj.read(block[self.blockPointer:]) | |
|
362 | self.blockPointer += self.basicHeaderObj.length | |
|
363 | self.systemHeaderObj.read(block[self.blockPointer:]) | |
|
364 | self.blockPointer += self.systemHeaderObj.length | |
|
365 | self.radarControllerHeaderObj.read(block[self.blockPointer:]) | |
|
366 | self.blockPointer += self.radarControllerHeaderObj.length | |
|
367 | self.processingHeaderObj.read(block[self.blockPointer:]) | |
|
368 | self.blockPointer += self.processingHeaderObj.length | |
|
369 | self.readFirstHeaderFromServer() | |
|
370 | ||
|
371 | timestamp = self.basicHeaderObj.get_datatime() | |
|
372 | print '[Reading] - Block {} - {}'.format(self.nTotalBlocks, timestamp) | |
|
373 | current_pointer_location = self.blockPointer | |
|
374 | junk = numpy.fromstring( block[self.blockPointer:], self.dtype, self.blocksize ) | |
|
375 | ||
|
376 | try: | |
|
377 | junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) ) | |
|
378 | except: | |
|
379 | #print "The read block (%3d) has not enough data" %self.nReadBlocks | |
|
380 | if self.waitDataBlock(pointer_location=current_pointer_location): | |
|
381 | junk = numpy.fromstring( block[self.blockPointer:], self.dtype, self.blocksize ) | |
|
382 | junk = junk.reshape( (self.processingHeaderObj.profilesPerBlock, self.processingHeaderObj.nHeights, self.systemHeaderObj.nChannels) ) | |
|
383 | # return 0 | |
|
384 | ||
|
385 | #Dimensions : nChannels, nProfiles, nSamples | |
|
386 | ||
|
387 | junk = numpy.transpose(junk, (2,0,1)) | |
|
388 | self.datablock = junk['real'] + junk['imag'] * 1j | |
|
389 | self.profileIndex = 0 | |
|
390 | if self.selBlocksize == None: self.selBlocksize = self.dataOut.nProfiles | |
|
391 | if self.selBlocktime != None: | |
|
392 | if self.dataOut.nCohInt is not None: | |
|
393 | nCohInt = self.dataOut.nCohInt | |
|
394 | else: | |
|
395 | nCohInt = 1 | |
|
396 | self.selBlocksize = int(self.dataOut.nProfiles*round(self.selBlocktime/(nCohInt*self.dataOut.ippSeconds*self.dataOut.nProfiles))) | |
|
397 | self.dataOut.data = self.datablock[:,self.profileIndex:self.profileIndex+self.selBlocksize,:] | |
|
398 | datasize = self.dataOut.data.shape[1] | |
|
399 | if datasize < self.selBlocksize: | |
|
400 | buffer = numpy.zeros((self.dataOut.data.shape[0], self.selBlocksize, self.dataOut.data.shape[2]), dtype = 'complex') | |
|
401 | buffer[:,:datasize,:] = self.dataOut.data | |
|
402 | self.dataOut.data = buffer | |
|
403 | self.profileIndex = blockIndex | |
|
404 | ||
|
405 | self.dataOut.flagDataAsBlock = True | |
|
406 | self.flagIsNewBlock = 1 | |
|
407 | self.dataOut.realtime = self.online | |
|
408 | ||
|
409 | return self.dataOut.data | |
|
410 | ||
|
304 | 411 | def getData(self): |
|
305 | 412 | """ |
|
306 | 413 | getData obtiene una unidad de datos del buffer de lectura, un perfil, y la copia al objeto self.dataOut |
@@ -337,24 +444,19 class VoltageReader(JRODataReader, ProcessingUnit): | |||
|
337 | 444 | self.flagDiscontinuousBlock |
|
338 | 445 | self.flagIsNewBlock |
|
339 | 446 | """ |
|
340 | ||
|
341 | 447 | if self.flagNoMoreFiles: |
|
342 | 448 | self.dataOut.flagNoData = True |
|
343 | 449 | print 'Process finished' |
|
344 | 450 | return 0 |
|
345 | ||
|
346 | 451 | self.flagDiscontinuousBlock = 0 |
|
347 | 452 | self.flagIsNewBlock = 0 |
|
348 | ||
|
349 | 453 | if self.__hasNotDataInBuffer(): |
|
350 | ||
|
351 | 454 | if not( self.readNextBlock() ): |
|
352 | 455 | return 0 |
|
353 | 456 | |
|
354 | 457 | self.getFirstHeader() |
|
355 | 458 | |
|
356 | 459 | self.reshapeData() |
|
357 | ||
|
358 | 460 | if self.datablock is None: |
|
359 | 461 | self.dataOut.flagNoData = True |
|
360 | 462 | return 0 |
@@ -513,10 +513,10 class CohInt(Operation): | |||
|
513 | 513 | self.__dataReady = True |
|
514 | 514 | return avgdata, avgdatatime |
|
515 | 515 | |
|
516 | def run(self, dataOut, **kwargs): | |
|
517 | ||
|
516 | ||
|
517 | def run(self, dataOut, n=None, timeInterval=None, overlapping=False, byblock=False, **kwargs): | |
|
518 | 518 | if not self.isConfig: |
|
519 | self.setup(**kwargs) | |
|
519 | self.setup(n=n, timeInterval=timeInterval, overlapping=overlapping, byblock=byblock, **kwargs) | |
|
520 | 520 | self.isConfig = True |
|
521 | 521 | |
|
522 | 522 | if dataOut.flagDataAsBlock: |
@@ -94,4 +94,4 if __name__ == '__main__': | |||
|
94 | 94 | parser = argparse.ArgumentParser(description='Set number of parallel processes') |
|
95 | 95 | parser.add_argument('--nProcess', default=1, type=int) |
|
96 | 96 | args = parser.parse_args() |
|
97 |
multiSchain(fiber, nProcess=args.nProcess, startDate='2017/01/26', endDate='2017/01/2 |
|
|
97 | multiSchain(fiber, nProcess=args.nProcess, startDate='2017/01/26', endDate='2017/01/26') |
@@ -35,14 +35,11 def fiber(cursor, skip, q, dt): | |||
|
35 | 35 | # opObj11 = procUnitConfObj3.addOperation(name='SpectralMoments', optype='other') |
|
36 | 36 | |
|
37 | 37 | # |
|
38 |
|
|
|
39 |
|
|
|
40 |
|
|
|
41 |
|
|
|
42 |
|
|
|
43 | # opObj11.addParameter(name='zmax', value='-70', format='float') | |
|
44 | # opObj11.addParameter(name='save', value='1', format='int') | |
|
45 | # opObj11.addParameter(name='figpath', value=figpath, format='str') | |
|
38 | opObj11 = procUnitConfObj2.addOperation(name='RTIPlot', optype='other') | |
|
39 | opObj11.addParameter(name='id', value='1000', format='int') | |
|
40 | opObj11.addParameter(name='wintitle', value='HF_Jicamarca_Spc', format='str') | |
|
41 | opObj11.addParameter(name='xmin', value='0', format='int') | |
|
42 | opObj11.addParameter(name='xmax', value='24', format='int') | |
|
46 | 43 | |
|
47 | 44 | # opObj11 = procUnitConfObj3.addOperation(name='Parameters1Plot', optype='other') |
|
48 | 45 | # opObj11.addParameter(name='channelList', value='0', format='intList') |
@@ -67,8 +64,8 def fiber(cursor, skip, q, dt): | |||
|
67 | 64 | # opObj11.addParameter(name='save', value='0', format='int') |
|
68 | 65 | # # opObj11.addParameter(name='figpath', value='/tmp/', format='str') |
|
69 | 66 | # |
|
70 | opObj12 = procUnitConfObj2.addOperation(name='PublishData', optype='other') | |
|
71 | opObj12.addParameter(name='zeromq', value=1, format='int') | |
|
67 | # opObj12 = procUnitConfObj2.addOperation(name='PublishData', optype='other') | |
|
68 | # opObj12.addParameter(name='zeromq', value=1, format='int') | |
|
72 | 69 | # opObj12.addParameter(name='server', value='tcp://10.10.10.82:7000', format='str') |
|
73 | 70 | |
|
74 | 71 |
@@ -16,37 +16,17 if __name__ == '__main__': | |||
|
16 | 16 | |
|
17 | 17 | proc1 = controllerObj.addProcUnit(name='ReceiverData') |
|
18 | 18 | proc1.addParameter(name='realtime', value='0', format='bool') |
|
19 |
proc1.addParameter(name='plottypes', value=' |
|
|
20 |
proc1.addParameter(name='throttle', value=' |
|
|
19 | proc1.addParameter(name='plottypes', value='snr', format='str') | |
|
20 | proc1.addParameter(name='throttle', value='5', format='int') | |
|
21 | 21 | proc1.addParameter(name='interactive', value='0', format='bool') |
|
22 | 22 | # proc1.addParameter(name='server', value='tcp://10.10.10.82:7000', format='str') |
|
23 | 23 | ## TODO Agregar direccion de server de publicacion a graficos como variable |
|
24 | ||
|
25 | op1 = proc1.addOperation(name='PlotRTIData', optype='other') | |
|
26 |
op |
|
|
27 |
op |
|
|
28 |
op |
|
|
29 |
op |
|
|
30 | # | |
|
31 | op2 = proc1.addOperation(name='PlotCOHData', optype='other') | |
|
32 | op2.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
33 | op2.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
34 | op2.addParameter(name='colormap', value='jet', format='str') | |
|
35 | op2.addParameter(name='show', value='0', format='bool') | |
|
36 | # # # | |
|
37 | op6 = proc1.addOperation(name='PlotPHASEData', optype='other') | |
|
38 | op6.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
39 | op6.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
40 | op6.addParameter(name='show', value='1', format='bool') | |
|
41 | # # | |
|
42 | # # proc2 = controllerObj.addProcUnit(name='ReceiverData') | |
|
43 | # # proc2.addParameter(name='server', value='juanca', format='str') | |
|
44 | # # proc2.addParameter(name='plottypes', value='snr,dop', format='str') | |
|
45 | # # | |
|
46 | # op3 = proc1.addOperation(name='PlotSNRData', optype='other') | |
|
47 | # op3.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
48 | # op3.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
49 | # op3.addParameter(name='show', value='0', format='bool') | |
|
24 | op3 = proc1.addOperation(name='PlotSNRData', optype='other') | |
|
25 | op3.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
26 | op3.addParameter(name='zmax', value='30', format='int') | |
|
27 | op3.addParameter(name='zmin', value='-10', format='int') | |
|
28 | op3.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
29 | op3.addParameter(name='show', value='0', format='bool') | |
|
50 | 30 | # # |
|
51 | 31 | # op4 = proc1.addOperation(name='PlotDOPData', optype='other') |
|
52 | 32 | # op4.addParameter(name='wintitle', value='Julia 150Km', format='str') |
@@ -54,6 +34,28 if __name__ == '__main__': | |||
|
54 | 34 | # op4.addParameter(name='show', value='0', format='bool') |
|
55 | 35 | # op4.addParameter(name='colormap', value='jet', format='str') |
|
56 | 36 | |
|
37 | # op1 = proc1.addOperation(name='PlotRTIData', optype='other') | |
|
38 | # op1.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
39 | # op1.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
40 | # op1.addParameter(name='show', value='0', format='bool') | |
|
41 | # op1.addParameter(name='colormap', value='jet', format='str') | |
|
42 | # # | |
|
43 | # op2 = proc1.addOperation(name='PlotCOHData', optype='other') | |
|
44 | # op2.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
45 | # op2.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
46 | # op2.addParameter(name='colormap', value='jet', format='str') | |
|
47 | # op2.addParameter(name='show', value='0', format='bool') | |
|
48 | # # # # | |
|
49 | # op6 = proc1.addOperation(name='PlotPHASEData', optype='other') | |
|
50 | # op6.addParameter(name='wintitle', value='Julia 150Km', format='str') | |
|
51 | # op6.addParameter(name='save', value='/home/nanosat/Pictures', format='str') | |
|
52 | # op6.addParameter(name='show', value='1', format='bool') | |
|
53 | # # | |
|
54 | # # proc2 = controllerObj.addProcUnit(name='ReceiverData') | |
|
55 | # # proc2.addParameter(name='server', value='juanca', format='str') | |
|
56 | # # proc2.addParameter(name='plottypes', value='snr,dop', format='str') | |
|
57 | # # | |
|
58 | ||
|
57 | 59 | |
|
58 | 60 | |
|
59 | 61 | controllerObj.start() |
@@ -1,1 +1,1 | |||
|
1 | <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/jchavez/jicamarca/jro_data/rawdata" /><Parameter format="date" id="191113" name="startDate" value="2010/10/28" /><Parameter format="date" id="191114" name="endDate" value="2017/10/28" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="0" /></Operation><Operation id="19112" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="DigitalRFWriter" priority="2" type="other"><Parameter format="str" id="191221" name="path" value="/home/jchavez/jicamarca/data_sink/" /></Operation></ProcUnit></Project> No newline at end of file | |
|
1 | <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/jchavez/jicamarca/jro_data/rawdata" /><Parameter format="date" id="191113" name="startDate" value="2010/10/28" /><Parameter format="date" id="191114" name="endDate" value="2017/10/28" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="0" /></Operation><Operation id="19112" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="DigitalRFWriter" priority="2" type="other"><Parameter format="str" id="191221" name="path" value="/home/jchavez/jicamarca/data_sink/" /></Operation></ProcUnit></Project> |
General Comments 0
You need to be logged in to leave comments.
Login now