##// END OF EJS Templates
example correction
joabAM -
r1580:400c11b1ac3f
parent child
Show More
@@ -0,0 +1,222
1 import os, sys, json
2 import time
3 import datetime
4 from multiprocessing import Process
5 from shutil import rmtree
6 from schainpy.controller import Project
7 from multiprocessing.connection import wait
8 from schainpy.model.io.utilsIO import MergeH5
9 ###########################################################################
10 ###########################################################################
11 dty = datetime.date.today()
12 str1 = dty + datetime.timedelta(days=1)
13 str2 = dty - datetime.timedelta(days=1)
14 today = dty.strftime("%Y/%m/%d")
15 tomorrow = str1.strftime("%Y/%m/%d")
16 yesterday = str2.strftime("%Y/%m/%d")
17 ###########################################################################
18 ###########################################################################
19
20
21 path= '/media/soporte/Elements/DATA_AMISR/2022'
22 #path= '/media/soporte/Elements/DATA_AMISR/2022/'
23 outPath = '/home/soporte/Data/data2Fabiano/POWER_H5_AMISR/2022/'
24
25 ###########################################################################
26 ###########################################################################
27 xmin = 7
28 xmax = 18
29 localtime=1
30
31 startDate=today
32 endDate=tomorrow
33
34 startDate='2022/09/24' #apunte perp y oblicuo
35 endDate='2022/09/25'
36
37 startTime = '18:00:00'
38 endTime = '07:00:00'
39 ###############################################################################
40 ###############################################################################
41 nChannels = 10
42 IPPms =10
43 code = [1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,1,-1,1,1,-1,1]
44 nCode = 1
45 nBaud = 28
46 nOsamp = 2 # oversample
47 dataList = ['data_pow','utctime']
48 ###############################################################################
49 ###############################################################################
50 nipp = (1000/IPPms)/nChannels
51 ippP10sec = nipp*10
52 print("{} profiles in 10 seconds".format(ippP10sec))
53 ###############################################################################
54 ###############################################################################
55 l = startDate.split('/') #adding day of the year to outPath
56 datelist = datetime.date(int(l[0]),int(l[1]),int(l[2]))
57 DOY = datelist.timetuple().tm_yday
58 year = l[0]
59 month = l[1].zfill(2)
60 day = l[2].zfill(2)
61 doy = str(DOY).zfill(3)
62
63 ###########################################################################
64 ###########################################################################
65 fpathOut = outPath+ "ESF"+l[0]+doy
66
67 if os.path.exists(fpathOut):
68 print("outPath 1: ", fpathOut)
69 else :
70 os.mkdir(fpathOut)
71
72 outPaths = [fpathOut+"/CH{}".format(ch) for ch in range(nChannels)]
73 ###########################################################################
74 ###########################################################################
75
76
77 def schainByChannels(channel, Outdata):
78 '''
79
80 '''
81
82 if os.path.exists(Outdata):
83 print("Outdata {}: ".format(channel), Outdata)
84 else :
85 os.mkdir(Outdata)
86
87 controllerObj = Project()
88 controllerObj.setup(id = channel, name='amisr_test', description='desc')
89 readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader',
90 path=path,
91 startDate=startDate,#'2016/07/12',
92 endDate=endDate,#'2016/07/13',
93 startTime=startTime,#'18:00:00',
94 endTime=endTime,#'07:00:00',
95 walk='1',
96 code = code,
97 nCode = nCode,
98 nBaud = nBaud,
99 nOsamp = nOsamp,
100 nFFT = 10,
101 timezone='lt',
102 margin_days=5,
103 online=0)
104
105 proc_volts = controllerObj.addProcUnit(datatype='VoltageProc', inputId=readUnitConfObj.getId())
106
107 opObj03 = proc_volts.addOperation(name='selectChannels', optype='other')
108 opObj03.addParameter(name='channelList', value=[channel], format='list')
109
110 opObj01 = proc_volts.addOperation(name='Decoder', optype='other')
111 opObj01.addParameter(name='code', value=code, format='floatlist')
112 opObj01.addParameter(name='nCode', value=nCode, format='int')
113 opObj01.addParameter(name='nBaud', value=nBaud, format='int')
114 opObj01.addParameter(name='osamp', value=nOsamp, format='int')
115
116
117 proc_spc = controllerObj.addProcUnit(datatype='SpectraProc', inputId=proc_volts.getId())
118 proc_spc.addParameter(name='nFFTPoints', value=10, format='int')
119
120
121 opObj13 = proc_spc.addOperation(name='IncohInt', optype='other')
122 opObj13.addParameter(name='timeInterval', value='20', format='int')
123
124
125 procParam= controllerObj.addProcUnit(datatype='ParametersProc',inputId=proc_spc.getId())
126 moments = procParam.addOperation(name='SpectralMoments',optype='other')
127 opObj12 = procParam.addOperation(name='setAttribute')
128 opObj12.addParameter(name='type', value='Spectra')
129
130 writer = procParam.addOperation(name='HDFWriter',optype='other')
131 writer.addParameter(name='path', value=Outdata)
132 writer.addParameter(name='timeZone', value="ut")
133 writer.addParameter(name='hourLimit', value=14)
134 writer.addParameter(name='breakDays', value=False)
135 writer.addParameter(name='blocksPerFile', value='2340',format='int') #2340ö
136 # writer1.addParameter(name='metadataList', value='type,timeZone,frequency,channelList,heightList,ippSeconds,\
137 # azimuthList,elevationList,nCohInt,nIncohInt,nFFTPoints',format='list')
138 writer.addParameter(name='metadataList', value='timeZone,type,unitsDescription,\
139 radarControllerHeaderObj.dtype,radarControllerHeaderObj.ipp,radarControllerHeaderObj.txA,radarControllerHeaderObj.frequency,\
140 radarControllerHeaderObj.sampleRate,radarControllerHeaderObj.heightList,radarControllerHeaderObj.elevationList,\
141 radarControllerHeaderObj.azimuthList,radarControllerHeaderObj.channelList,radarControllerHeaderObj.heightResolution,\
142 radarControllerHeaderObj.code,radarControllerHeaderObj.nCode,radarControllerHeaderObj.nBaud,radarControllerHeaderObj.nOsamp,\
143 processingHeaderObj.dtype,processingHeaderObj.ipp,processingHeaderObj.nCohInt,processingHeaderObj.nSamplesFFT,\
144 processingHeaderObj.nFFTPoints,processingHeaderObj.timeIncohInt,processingHeaderObj.heightList,processingHeaderObj.channelList,processingHeaderObj.elevationList,\
145 processingHeaderObj.azimuthList,processingHeaderObj.heightResolution',format='list')
146 writer.addParameter(name='dataList',value='data_pow,utctime',format='list')
147
148 controllerObj.start()
149
150
151 def plotMerged(mergedPath):
152
153 controllerObj = Project()
154 controllerObj.setup(id = '22164', name='esf_proc', description="plot merged power")
155 ##..........................................................................
156 ##..........................................................................
157
158 readerUnit = controllerObj.addReadUnit(datatype='HDFReader',
159 path=mergedPath,
160 startDate=startDate,#startDate,#'2016/07/12',
161 endDate=endDate,#endDate,#'2016/07/13',
162 startTime=startTime,#'07:00:00',
163 endTime=endTime,#'15:00:00',
164 walk=0,
165 timezone='lt',
166 online=0)
167 ##..........................................................................
168 opObj21 = readerUnit.addOperation(name='PowerPlot', optype='external')
169 opObj21.addParameter(name='showprofile', value='1', format='int')
170 opObj21.addParameter(name='xmin', value=xmin, format='int')
171 opObj21.addParameter(name='xmax', value=xmax, format='int')
172 opObj21.addParameter(name='zmin', value=100, format='int')
173 opObj21.addParameter(name='zmax', value=120, format='int')
174 opObj21.addParameter(name='show', value=0, format='int')
175 opObj21.addParameter(name='localtime', value=1,format='int')
176 opObj21.addParameter(name='save', value=mergedPath, format='str')
177 opObj21.addParameter(name='t_units', value='h', format='str')
178
179 controllerObj.start()
180 controllerObj.join()
181
182 powerPath = mergedPath +"/pow"
183 figPaths = [powerPath]
184 for pch in figPaths:
185 print("Removing ",pch)
186 rmtree(pch)
187
188
189 if __name__ == '__main__':
190
191
192
193 pool = []
194 for ch in range(nChannels):
195 p = Process(target=schainByChannels, args=(ch,outPaths[ch]))
196 pool.append(p)
197 p.start()
198
199 wait(p.sentinel for p in pool)
200 time.sleep(10)
201
202 ############################################################################
203 ############################################################################
204
205 print("Starting merging proc...")
206 if os.path.exists(fpathOut):
207 print("final path Out: {}: ", fpathOut)
208 else :
209 os.mkdir(fpathOut)
210
211 merger = MergeH5(nChannels,fpathOut,dataList,*outPaths)
212 merger.run()
213 time.sleep(2)
214
215 ############################################################################
216 plotMerged(fpathOut)
217 ############################################################################
218
219 print("Removing hdf5 files from channels...")
220 for pch in outPaths:
221 rmtree(pch)
222 print("Proc finished ! :)")
@@ -85,6 +85,8 class MergeH5(object):
85 85 merger = MergeH5(nChannels,pathOut,list, p0, p1,p2,p3)
86 86 merger.run()
87 87
88 The file example_FULLmultiprocessing_merge.txt show an application for AMISR data
89
88 90 """
89 91
90 92 # #__attrs__ = ['paths', 'nChannels']
General Comments 0
You need to be logged in to leave comments. Login now