@@ -5,7 +5,7 from schainpy.model.proc.jroproc_base import ProcessingUnit, Operation, MPDecora | |||||
5 | from schainpy.model.data.jrodata import Voltage,hildebrand_sekhon |
|
5 | from schainpy.model.data.jrodata import Voltage,hildebrand_sekhon | |
6 | from schainpy.utils import log |
|
6 | from schainpy.utils import log | |
7 | from time import time |
|
7 | from time import time | |
8 |
|
8 | from scipy import signal | ||
9 |
|
9 | |||
10 |
|
10 | |||
11 | class VoltageProc(ProcessingUnit): |
|
11 | class VoltageProc(ProcessingUnit): | |
@@ -1747,6 +1747,120 class PulsePair_vRF(Operation): | |||||
1747 | dataOut.flagNoData = False |
|
1747 | dataOut.flagNoData = False | |
1748 | return dataOut |
|
1748 | return dataOut | |
1749 |
|
1749 | |||
|
1750 | class Xcorr(Operation): | |||
|
1751 | isConfig = False | |||
|
1752 | __profIndex = 0 | |||
|
1753 | code = None | |||
|
1754 | nCode = None | |||
|
1755 | nBaud = None | |||
|
1756 | ||||
|
1757 | def __init__(self, **kwargs): | |||
|
1758 | ||||
|
1759 | Operation.__init__(self, **kwargs) | |||
|
1760 | self.isConfig = False | |||
|
1761 | self.setupReq = False | |||
|
1762 | ||||
|
1763 | ||||
|
1764 | def setup(self, code ,dataOut): | |||
|
1765 | self.__profIndex = 0 | |||
|
1766 | self.code = code | |||
|
1767 | self.nCode = len(code) | |||
|
1768 | self.nBaud = len(code[0]) | |||
|
1769 | ||||
|
1770 | self.__nChannels = dataOut.nChannels | |||
|
1771 | self.__nProfiles = dataOut.nProfiles | |||
|
1772 | self.__nHeis = dataOut.nHeights | |||
|
1773 | print("TEST SETUP--------------------------------------------") | |||
|
1774 | ||||
|
1775 | if dataOut.flagDataAsBlock: | |||
|
1776 | ||||
|
1777 | self.ndatadec = self.__nHeis #- self.nBaud + 1 | |||
|
1778 | ||||
|
1779 | self.datadecTime = numpy.zeros((self.__nChannels, self.__nProfiles, self.ndatadec), dtype=numpy.complex_) | |||
|
1780 | ||||
|
1781 | else: | |||
|
1782 | #Time | |||
|
1783 | self.ndatadec = self.__nHeis #- self.nBaud + 1 | |||
|
1784 | ||||
|
1785 | self.datadecTime = numpy.zeros((self.__nChannels, self.ndatadec), dtype=numpy.complex_) | |||
|
1786 | ||||
|
1787 | def __XcorrByProfile(self,data): | |||
|
1788 | #print("shape0",data[0,:].shape) | |||
|
1789 | #print("shape1",self.code.shape) | |||
|
1790 | for i in range(self.__nChannels): | |||
|
1791 | #print("shape0",data[i,:].shape) | |||
|
1792 | #print("shape1",self.code[0].shape) | |||
|
1793 | c = signal.correlate(data[i,:],self.code[0], mode="full") | |||
|
1794 | lags = signal.correlation_lags(len(data[i,:]), len(self.code[0]), mode="full") | |||
|
1795 | self.datadecTime[i,:]=c[lags>=0] | |||
|
1796 | ||||
|
1797 | return self.datadecTime | |||
|
1798 | ||||
|
1799 | def __XcorrByBlock(self,data): | |||
|
1800 | repetitions = int(self.__nProfiles/ self.nCode) | |||
|
1801 | junk = numpy.lib.stride_tricks.as_strided(self.code, (repetitions, self.code.size), (0, self.code.itemsize)) | |||
|
1802 | junk = junk.flatten() | |||
|
1803 | code_block = numpy.reshape(junk, (self.nCode*repetitions, self.nBaud)) | |||
|
1804 | ||||
|
1805 | profilesList = range(self.__nProfiles) | |||
|
1806 | ||||
|
1807 | for i in range(self.__nChannels): | |||
|
1808 | for j in profilesList: | |||
|
1809 | c =signal.correlate(data[i,j,:], code_block[j,:], mode='full') | |||
|
1810 | lags = signal.correlation_lags(len(data[i,j,:]), len(code_block[j,:]), mode="full") | |||
|
1811 | self.datadecTime[i,j,:] = c[lags>=0] | |||
|
1812 | return self.datadecTime | |||
|
1813 | ||||
|
1814 | ||||
|
1815 | def run(self, dataOut, code=None,nCode= None,nBaud= None,mode = 0): | |||
|
1816 | if not self.isConfig: | |||
|
1817 | #print("CONFIGURACION..........") | |||
|
1818 | if code is None: | |||
|
1819 | if dataOut.code is None: | |||
|
1820 | raise ValueError("Code could not be read from %s instance. Enter a value in Code parameter" %dataOut.type) | |||
|
1821 | ||||
|
1822 | code = dataOut.code | |||
|
1823 | else: | |||
|
1824 | code = numpy.array(code) | |||
|
1825 | code = code.reshape(int(nCode),int(nBaud)) | |||
|
1826 | self.setup(code, dataOut) | |||
|
1827 | #print("-------------------------------------TEST SETUP OK") | |||
|
1828 | self.isConfig = True | |||
|
1829 | ||||
|
1830 | self.__nProfiles = dataOut.nProfiles | |||
|
1831 | datadec = None | |||
|
1832 | ||||
|
1833 | if dataOut.flagDataAsBlock: | |||
|
1834 | """ | |||
|
1835 | Decoding when data have been read as block, | |||
|
1836 | """ | |||
|
1837 | datadec = self.__XcorrByBlock(dataOut.data) | |||
|
1838 | else: | |||
|
1839 | """ | |||
|
1840 | Decoding when data have been read profile by profile | |||
|
1841 | """ | |||
|
1842 | datadec = self.__XcorrByProfile(dataOut.data) | |||
|
1843 | #print("type_________________________",datadec.dtype) | |||
|
1844 | if datadec is None: | |||
|
1845 | raise ValueError("Codification mode selected is not valid: mode=%d. Try selecting 0 or 1" %mode) | |||
|
1846 | ||||
|
1847 | dataOut.code = self.code | |||
|
1848 | dataOut.nCode = self.nCode | |||
|
1849 | dataOut.nBaud = self.nBaud | |||
|
1850 | ||||
|
1851 | dataOut.data = datadec | |||
|
1852 | dataOut.heightList = dataOut.heightList[0:datadec.shape[-1]] | |||
|
1853 | ||||
|
1854 | dataOut.flagDecodeData = True #asumo q la data esta decodificada | |||
|
1855 | if self.__profIndex == self.nCode-1: | |||
|
1856 | self.__profIndex = 0 | |||
|
1857 | return dataOut | |||
|
1858 | ||||
|
1859 | self.__profIndex += 1 | |||
|
1860 | ||||
|
1861 | return dataOut | |||
|
1862 | ||||
|
1863 | ||||
1750 | # import collections |
|
1864 | # import collections | |
1751 | # from scipy.stats import mode |
|
1865 | # from scipy.stats import mode | |
1752 | # |
|
1866 | # |
@@ -24,9 +24,9 META = ['heightList', 'data_azi', 'data_ele', 'mode_op', 'latitude', 'longitude' | |||||
24 | 'snr_threshold', 'dataPP_NOISE'] |
|
24 | 'snr_threshold', 'dataPP_NOISE'] | |
25 |
|
25 | |||
26 |
|
26 | |||
27 | def max_index(r, sample_rate, ipp): |
|
27 | def max_index(r, sample_rate, ipp, h0): | |
28 |
|
28 | |||
29 |
return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * |
|
29 | return int(sample_rate*ipp*1e6 * r / 60) + int(sample_rate*ipp*1e6 * -h0 / 60) | |
30 |
|
30 | |||
31 | def main(args): |
|
31 | def main(args): | |
32 |
|
32 | |||
@@ -55,8 +55,8 def main(args): | |||||
55 | end_time = args.end_time |
|
55 | end_time = args.end_time | |
56 | else: |
|
56 | else: | |
57 | end_time = '23:59:59' |
|
57 | end_time = '23:59:59' | |
58 |
|
58 | |||
59 | N = int(1/(speed_axis[0]*ipp)) # 1 GRADO DE RESOLUCION |
|
59 | N = int(1.0/(abs(speed_axis[0])*ipp)) # 1 GRADO DE RESOLUCION | |
60 |
|
60 | |||
61 | path = os.path.join(PATH, experiment, 'rawdata') |
|
61 | path = os.path.join(PATH, experiment, 'rawdata') | |
62 | path_ped = os.path.join(PATH, experiment, 'position') |
|
62 | path_ped = os.path.join(PATH, experiment, 'position') | |
@@ -68,7 +68,7 def main(args): | |||||
68 | path_save = os.path.join(PATH, experiment, 'param{}'.format(label)) |
|
68 | path_save = os.path.join(PATH, experiment, 'param{}'.format(label)) | |
69 | RMIX = 4.8#5.8 #4.8#5.68#4.8#4.8#2.64#10#2.64 |
|
69 | RMIX = 4.8#5.8 #4.8#5.68#4.8#4.8#2.64#10#2.64 | |
70 | H0 = -1.68 #-1.68# -1.2#-1.68#-1.2#0.5#-1.2 |
|
70 | H0 = -1.68 #-1.68# -1.2#-1.68#-1.2#0.5#-1.2 | |
71 |
MASK = 0. |
|
71 | MASK = 0.6 | |
72 | #MASK = 0.4#0.35 |
|
72 | #MASK = 0.4#0.35 | |
73 |
|
73 | |||
74 | from schainpy.controller import Project |
|
74 | from schainpy.controller import Project | |
@@ -122,7 +122,7 def main(args): | |||||
122 | if args.range > 0: |
|
122 | if args.range > 0: | |
123 | op = voltage.addOperation(name='selectHeights') |
|
123 | op = voltage.addOperation(name='selectHeights') | |
124 | op.addParameter(name='minIndex', value='0', format='int') |
|
124 | op.addParameter(name='minIndex', value='0', format='int') | |
125 | op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') |
|
125 | op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp, H0), format='int') | |
126 |
|
126 | |||
127 | op = voltage.addOperation(name='PulsePair_vRF', optype='other') |
|
127 | op = voltage.addOperation(name='PulsePair_vRF', optype='other') | |
128 | op.addParameter(name='n', value=int(N)/ncode, format='int') |
|
128 | op.addParameter(name='n', value=int(N)/ncode, format='int') | |
@@ -133,7 +133,8 def main(args): | |||||
133 |
|
133 | |||
134 | opObj10 = proc.addOperation(name="WeatherRadar") |
|
134 | opObj10 = proc.addOperation(name="WeatherRadar") | |
135 | opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) |
|
135 | opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) | |
136 | opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) |
|
136 | # opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) | |
|
137 | opObj10.addParameter(name='Pt',value=200) | |||
137 |
|
138 | |||
138 | op = proc.addOperation(name='PedestalInformation') |
|
139 | op = proc.addOperation(name='PedestalInformation') | |
139 | op.addParameter(name='path', value=path_ped, format='str') |
|
140 | op.addParameter(name='path', value=path_ped, format='str') | |
@@ -145,6 +146,7 def main(args): | |||||
145 | op = proc.addOperation(name='Block360') |
|
146 | op = proc.addOperation(name='Block360') | |
146 | op.addParameter(name='runNextOp', value=True) |
|
147 | op.addParameter(name='runNextOp', value=True) | |
147 | op.addParameter(name='attr_data', value='data_param') |
|
148 | op.addParameter(name='attr_data', value='data_param') | |
|
149 | op.addParameter(name='angles', value=angles) | |||
148 |
|
150 | |||
149 | op= proc.addOperation(name='WeatherParamsPlot') |
|
151 | op= proc.addOperation(name='WeatherParamsPlot') | |
150 | if args.save: op.addParameter(name='save', value=path_plots, format='str') |
|
152 | if args.save: op.addParameter(name='save', value=path_plots, format='str') | |
@@ -158,8 +160,9 def main(args): | |||||
158 | op.addParameter(name='save_code', value=param) |
|
160 | op.addParameter(name='save_code', value=param) | |
159 | op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) |
|
161 | op.addParameter(name='cb_label', value=PARAM[param]['cb_label']) | |
160 | op.addParameter(name='colormap', value=PARAM[param]['colormap']) |
|
162 | op.addParameter(name='colormap', value=PARAM[param]['colormap']) | |
161 |
op.addParameter(name='bgcolor', value=' |
|
163 | op.addParameter(name='bgcolor', value='black') | |
162 | op.addParameter(name='localtime', value=False) |
|
164 | op.addParameter(name='localtime', value=False) | |
|
165 | op.addParameter(name='shapes', value='./shapes') | |||
163 | if MASK: op.addParameter(name='mask', value=MASK, format='float') |
|
166 | if MASK: op.addParameter(name='mask', value=MASK, format='float') | |
164 | if args.server: |
|
167 | if args.server: | |
165 | op.addParameter(name='server', value='190.187.237.239:4444') |
|
168 | op.addParameter(name='server', value='190.187.237.239:4444') | |
@@ -237,7 +240,9 def main(args): | |||||
237 | op.addParameter(name='code', value=code) |
|
240 | op.addParameter(name='code', value=code) | |
238 | op.addParameter(name='nCode', value=len(code), format='int') |
|
241 | op.addParameter(name='nCode', value=len(code), format='int') | |
239 | op.addParameter(name='nBaud', value=len(code[0]), format='int') |
|
242 | op.addParameter(name='nBaud', value=len(code[0]), format='int') | |
|
243 | ncode = len(code) | |||
240 | else: |
|
244 | else: | |
|
245 | ncode = 1 | |||
241 | code = ['0'] |
|
246 | code = ['0'] | |
242 |
|
247 | |||
243 | op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario |
|
248 | op = voltage1.addOperation(name='CohInt', optype='other') #Minimo integrar 2 perfiles por ser codigo complementario | |
@@ -246,13 +251,13 def main(args): | |||||
246 | if args.range > 0: |
|
251 | if args.range > 0: | |
247 | op = voltage1.addOperation(name='selectHeights') |
|
252 | op = voltage1.addOperation(name='selectHeights') | |
248 | op.addParameter(name='minIndex', value='0', format='int') |
|
253 | op.addParameter(name='minIndex', value='0', format='int') | |
249 | op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp), format='int') |
|
254 | op.addParameter(name='maxIndex', value=max_index(RMIX, sample_rate, ipp, H0), format='int') | |
250 |
|
255 | |||
251 | op = voltage1.addOperation(name='setH0') |
|
256 | op = voltage1.addOperation(name='setH0') | |
252 | op.addParameter(name='h0', value=H0, format='float') |
|
257 | op.addParameter(name='h0', value=H0, format='float') | |
253 |
|
258 | |||
254 | op = voltage1.addOperation(name='PulsePair_vRF', optype='other') |
|
259 | op = voltage1.addOperation(name='PulsePair_vRF', optype='other') | |
255 |
op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/ |
|
260 | op.addParameter(name='n', value=int(conf['usrp_tx']['repetitions_1'])/ncode, format='int') | |
256 | if args.rmDC: |
|
261 | if args.rmDC: | |
257 | op.addParameter(name='removeDC', value=1, format='int') |
|
262 | op.addParameter(name='removeDC', value=1, format='int') | |
258 |
|
263 | |||
@@ -278,7 +283,7 def main(args): | |||||
278 | op.addParameter(name='attr_data', value='data_param') |
|
283 | op.addParameter(name='attr_data', value='data_param') | |
279 | op.addParameter(name='runNextOp', value=True) |
|
284 | op.addParameter(name='runNextOp', value=True) | |
280 | op.addParameter(name='angles', value=angles) |
|
285 | op.addParameter(name='angles', value=angles) | |
281 |
|
286 | #op.addParameter(name='horario',value=False) | ||
282 |
|
287 | |||
283 | voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) |
|
288 | voltage2 = project.addProcUnit(datatype='VoltageProc', inputId=reader.getId()) | |
284 |
|
289 | |||
@@ -303,8 +308,8 def main(args): | |||||
303 |
|
308 | |||
304 | if args.range > 0: |
|
309 | if args.range > 0: | |
305 | op = voltage2.addOperation(name='selectHeights') |
|
310 | op = voltage2.addOperation(name='selectHeights') | |
306 | op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp), format='int') |
|
311 | op.addParameter(name='minIndex', value=max_index(RMIX, sample_rate, ipp, H0), format='int') | |
307 | op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp), format='int') |
|
312 | op.addParameter(name='maxIndex', value=max_index(args.range, sample_rate, ipp, H0), format='int') | |
308 |
|
313 | |||
309 | op = voltage2.addOperation(name='setH0') |
|
314 | op = voltage2.addOperation(name='setH0') | |
310 | op.addParameter(name='h0', value=H0, format='float') |
|
315 | op.addParameter(name='h0', value=H0, format='float') | |
@@ -322,7 +327,7 def main(args): | |||||
322 | opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) |
|
327 | opObj10.addParameter(name='tauW',value=(1e-6/sample_rate)*len(code[0])) | |
323 | #opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) |
|
328 | #opObj10.addParameter(name='Pt',value=((1e-6/sample_rate)*len(code[0])/ipp)*200) | |
324 | opObj10.addParameter(name='Pt',value=200) |
|
329 | opObj10.addParameter(name='Pt',value=200) | |
325 | opObj10.addParameter(name='min_index',value=max_index(RMIX, sample_rate, ipp)) |
|
330 | opObj10.addParameter(name='min_index',value=max_index(RMIX, sample_rate, ipp, H0)) | |
326 | #opObj10.addParameter(name='sesgoZD',value=7.73) |
|
331 | #opObj10.addParameter(name='sesgoZD',value=7.73) | |
327 |
|
332 | |||
328 | op = proc2.addOperation(name='PedestalInformation') |
|
333 | op = proc2.addOperation(name='PedestalInformation') | |
@@ -335,6 +340,7 def main(args): | |||||
335 | op.addParameter(name='attr_data', value='data_param') |
|
340 | op.addParameter(name='attr_data', value='data_param') | |
336 | op.addParameter(name='runNextOp', value=True) |
|
341 | op.addParameter(name='runNextOp', value=True) | |
337 | op.addParameter(name='angles', value=angles) |
|
342 | op.addParameter(name='angles', value=angles) | |
|
343 | #op.addParameter(name='horario',value=False) | |||
338 |
|
344 | |||
339 | merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()]) |
|
345 | merge = project.addProcUnit(datatype='MergeProc', inputId=[proc1.getId(), proc2.getId()]) | |
340 | merge.addParameter(name='attr_data', value='data_param') |
|
346 | merge.addParameter(name='attr_data', value='data_param') | |
@@ -350,7 +356,7 def main(args): | |||||
350 | op.addParameter(name='save_period', value=-1) |
|
356 | op.addParameter(name='save_period', value=-1) | |
351 | op.addParameter(name='show', value=args.show) |
|
357 | op.addParameter(name='show', value=args.show) | |
352 | #op.addParameter(name='channels', value='0,1') |
|
358 | #op.addParameter(name='channels', value='0,1') | |
353 |
op.addParameter(name='channels', value=' |
|
359 | op.addParameter(name='channels', value='0,') | |
354 | op.addParameter(name='zmin', value=PARAM[param]['zmin'], format='int') |
|
360 | op.addParameter(name='zmin', value=PARAM[param]['zmin'], format='int') | |
355 | op.addParameter(name='zmax', value=PARAM[param]['zmax'], format='int') |
|
361 | op.addParameter(name='zmax', value=PARAM[param]['zmax'], format='int') | |
356 | op.addParameter(name='ymax', value=20, format='int') |
|
362 | op.addParameter(name='ymax', value=20, format='int') | |
@@ -389,9 +395,7 def main(args): | |||||
389 | writer.addParameter(name='path', value=path_save, format='str') |
|
395 | writer.addParameter(name='path', value=path_save, format='str') | |
390 | writer.addParameter(name='Reset', value=True) |
|
396 | writer.addParameter(name='Reset', value=True) | |
391 | writer.addParameter(name='setType', value='weather') |
|
397 | writer.addParameter(name='setType', value='weather') | |
392 |
writer.addParameter(name='setChannel', value=' |
|
398 | writer.addParameter(name='setChannel', value='0') #new parameter choose ch 0 H or ch 1 V | |
393 |
|
||||
394 |
|
||||
395 | writer.addParameter(name='description', value=json.dumps(desc)) |
|
399 | writer.addParameter(name='description', value=json.dumps(desc)) | |
396 | writer.addParameter(name='blocksPerFile', value='1',format='int') |
|
400 | writer.addParameter(name='blocksPerFile', value='1',format='int') | |
397 | writer.addParameter(name='metadataList', value=','.join(META)) |
|
401 | writer.addParameter(name='metadataList', value=','.join(META)) | |
@@ -463,4 +467,4 if __name__ == '__main__': | |||||
463 | project.start() |
|
467 | project.start() | |
464 |
|
468 | |||
465 | #python sophy_A.py HYO_CC4_CC64_COMB@2022-12-27T00-00-32 --parameters Z --plot --save --show --rmDC --label Z_04 --range 60 --start_time "22:00:00" |
|
469 | #python sophy_A.py HYO_CC4_CC64_COMB@2022-12-27T00-00-32 --parameters Z --plot --save --show --rmDC --label Z_04 --range 60 --start_time "22:00:00" | |
466 |
# colocar siempre el range que asume 0 y no hace la seleccion de alturas |
|
470 | # colocar siempre el range que asume 0 y no hace la seleccion de alturas No newline at end of file |
General Comments 0
You need to be logged in to leave comments.
Login now