From ea980322a40dc24395b2c5b7d18765aa701bcfd5 2014-10-21 15:56:52 From: Julio Valdez Date: 2014-10-21 15:56:52 Subject: [PATCH] -Modifications to DBS module to accept azimuth and elevation angles as inputs. -Corrections to Wind Profiler plot to work with AMIS data --- diff --git a/schainpy/model/graphics/jroplot_parameters.py b/schainpy/model/graphics/jroplot_parameters.py index c27ce59..591fe57 100644 --- a/schainpy/model/graphics/jroplot_parameters.py +++ b/schainpy/model/graphics/jroplot_parameters.py @@ -452,6 +452,7 @@ class WindProfilerPlot(Figure): tmax = None x = dataOut.getTimeRange1() +# y = dataOut.heightRange y = dataOut.heightRange z = dataOut.winds diff --git a/schainpy/model/proc/jroproc_parameters.py b/schainpy/model/proc/jroproc_parameters.py index d0ec1b8..481c893 100644 --- a/schainpy/model/proc/jroproc_parameters.py +++ b/schainpy/model/proc/jroproc_parameters.py @@ -1127,6 +1127,19 @@ class WindProfiler(Operation): def __init__(self): Operation.__init__(self) + def __calculateCosDir(self, elev, azim): + zen = (90 - elev)*numpy.pi/180 + azim = azim*numpy.pi/180 + cosDirX = numpy.sqrt((1-numpy.cos(zen)**2)/((1+numpy.tan(azim)**2))) + cosDirY = numpy.sqrt(1-numpy.cos(zen)**2-cosDirX**2) + + signX = numpy.sign(numpy.cos(azim)) + signY = numpy.sign(numpy.sin(azim)) + + cosDirX = numpy.copysign(cosDirX, signX) + cosDirY = numpy.copysign(cosDirY, signY) + return cosDirX, cosDirY + def __calculateAngles(self, theta_x, theta_y, azimuth): dir_cosw = numpy.sqrt(1-theta_x**2-theta_y**2) @@ -1423,9 +1436,14 @@ class WindProfiler(Operation): if technique == 'DBS': - theta_x = numpy.array(kwargs['dirCosx']) - theta_y = numpy.array(kwargs['dirCosy']) - azimuth = kwargs['azimuth'] + if kwargs.has_key('dirCosx') and kwargs.has_key('dirCosy'): + theta_x = numpy.array(kwargs['dirCosx']) + theta_y = numpy.array(kwargs['dirCosy']) + else: + elev = numpy.array(kwargs['elevation']) + azim = numpy.array(kwargs['azimuth']) + theta_x, theta_y = self.__calculateCosDir(elev, azim) + azimuth = kwargs['correctAzimuth'] if kwargs.has_key('horizontalOnly'): horizontalOnly = kwargs['horizontalOnly'] else: horizontalOnly = False diff --git a/schainpy/test/WindProfiler_DBS01.py b/schainpy/test/WindProfiler_DBS01.py index d007ae4..d00db07 100644 --- a/schainpy/test/WindProfiler_DBS01.py +++ b/schainpy/test/WindProfiler_DBS01.py @@ -111,7 +111,7 @@ opObj21.addParameter(name='zmax', value='90', format='int') opObj22 = procUnitConfObj2.addOperation(name='WindProfiler', optype='other') opObj22.addParameter(name='technique', value='DBS', format='str') -opObj22.addParameter(name='azimuth', value='51.06', format='float') +opObj22.addParameter(name='correctAzimuth', value='51.06', format='float') opObj22.addParameter(name='correctFactor', value='-1', format='float') opObj22.addParameter(name='dirCosx', value='0.041016, 0, -0.054688', format='floatlist') opObj22.addParameter(name='dirCosy', value='-0.041016, 0.025391, -0.023438', format='floatlist') diff --git a/schainpy/test/amisr_windEstimation.py b/schainpy/test/amisr_windEstimation.py index ec94d46..de49557 100644 --- a/schainpy/test/amisr_windEstimation.py +++ b/schainpy/test/amisr_windEstimation.py @@ -19,8 +19,8 @@ path = '/home/soporte/Data/AMISR' figpath = os.path.join(os.environ['HOME'],'Pictures/amisr') pathFigure = '/home/soporte/workspace/Graficos/DBS/amisr/' -xmin = '12.0' -xmax = '14.0' +xmin = '16.0' +xmax = '17.0' readUnitConfObj = controllerObj.addReadUnit(datatype='AMISRReader', path=path, @@ -46,6 +46,12 @@ opObj11 = procUnitAMISRBeam0.addOperation(name='ProfileToChannels', optype='othe #Voltage Processing Unit procUnitConfObjBeam0 = controllerObj.addProcUnit(datatype='VoltageProc', inputId=procUnitAMISRBeam0.getId()) +opObj10 = procUnitConfObjBeam0.addOperation(name='setRadarFrequency') +opObj10.addParameter(name='frequency', value='445e6', format='float') + +opObj12 = procUnitConfObjBeam0.addOperation(name='selectHeights') +opObj12.addParameter(name='minHei', value='0', format='float') +opObj12.addParameter(name='maxHei', value='10', format='float') #Coherent Integration opObj11 = procUnitConfObjBeam0.addOperation(name='CohInt', optype='other') opObj11.addParameter(name='n', value='8', format='int') @@ -53,6 +59,10 @@ opObj11.addParameter(name='n', value='8', format='int') procUnitConfObjSpectraBeam0 = controllerObj.addProcUnit(datatype='SpectraProc', inputId=procUnitConfObjBeam0.getId()) procUnitConfObjSpectraBeam0.addParameter(name='nFFTPoints', value=32, format='int') procUnitConfObjSpectraBeam0.addParameter(name='nProfiles', value=32, format='int') + +opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='IncohInt', optype='other') +opObj11.addParameter(name='n', value='16', format='int') + #RemoveDc opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='removeDC') @@ -67,42 +77,43 @@ opObj11.addParameter(name='id', value='100', format='int') opObj11.addParameter(name='wintitle', value='AMISR Beam 0', format='str') opObj11.addParameter(name='zmin', value='30', format='int') opObj11.addParameter(name='zmax', value='80', format='int') - +opObj11.addParameter(name='save', value='1', format='bool') +opObj11.addParameter(name='figpath', value = pathFigure, format='str') #RTIPlot #title0 = 'RTI AMISR Beam 0' -#opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='RTIPlot', optype='other') -#opObj11.addParameter(name='id', value='200', format='int') -#opObj11.addParameter(name='wintitle', value=title0, format='str') -#opObj11.addParameter(name='showprofile', value='0', format='int') -##Setting RTI time using xmin,xmax -#opObj11.addParameter(name='xmin', value='15', format='int') -#opObj11.addParameter(name='xmax', value='23', format='int') -#Setting dB range with zmin, zmax -#opObj11.addParameter(name='zmin', value='45', format='int') -#opObj11.addParameter(name='zmax', value='70', format='int') -#Save RTI -#figfile0 = 'amisr_rti_beam0.png' -#opObj11.addParameter(name='figpath', value=figpath, format='str') -#opObj11.addParameter(name='figfile', value=figfile0, format='str') +opObj11 = procUnitConfObjSpectraBeam0.addOperation(name='RTIPlot', optype='other') +opObj11.addParameter(name='id', value='200', format='int') +# opObj11.addParameter(name='wintitle', value=title0, format='str') +opObj11.addParameter(name='showprofile', value='0', format='int') +#Setting RTI time using xmin,xmax +opObj11.addParameter(name='xmin', value=xmin, format='float') +opObj11.addParameter(name='xmax', value=xmax, format='float') +# Setting dB range with zmin, zmax +opObj11.addParameter(name='zmin', value='45', format='int') +opObj11.addParameter(name='zmax', value='70', format='int') +# Save RTI +# figfile0 = 'amisr_rti_beam0.png' +# opObj11.addParameter(name='figpath', value=figpath, format='str') +# opObj11.addParameter(name='figfile', value=figfile0, format='str') #----------------------------------------------------------------------------------------------- procUnitConfObj2 = controllerObj.addProcUnit(datatype='ParametersProc', inputId=procUnitConfObjSpectraBeam0 .getId()) opObj20 = procUnitConfObj2.addOperation(name='GetMoments') -# opObj21 = procUnitConfObj2.addOperation(name='MomentsPlot', optype='other') -# opObj21.addParameter(name='id', value='3', format='int') -# opObj21.addParameter(name='wintitle', value='Moments Plot', format='str') -# opObj21.addParameter(name='save', value='1', format='bool') -# opObj21.addParameter(name='figpath', value=pathFigure, format='str') -# opObj21.addParameter(name='zmin', value='5', format='int') -# opObj21.addParameter(name='zmax', value='90', format='int') +opObj21 = procUnitConfObj2.addOperation(name='MomentsPlot', optype='other') +opObj21.addParameter(name='id', value='3', format='int') +opObj21.addParameter(name='wintitle', value='Moments Plot', format='str') +opObj21.addParameter(name='save', value='1', format='bool') +opObj21.addParameter(name='figpath', value=pathFigure, format='str') +opObj21.addParameter(name='zmin', value='30', format='int') +opObj21.addParameter(name='zmax', value='80', format='int') opObj22 = procUnitConfObj2.addOperation(name='WindProfiler', optype='other') opObj22.addParameter(name='technique', value='DBS', format='str') -opObj22.addParameter(name='azimuth', value='51.06', format='float') +opObj22.addParameter(name='correctAzimuth', value='51.06', format='float') opObj22.addParameter(name='correctFactor', value='-1', format='float') -opObj22.addParameter(name='dirCosx', value='9.63770247e-01, 5.93066547e-17, 1, 5.93066547e-17,-9.68583161e-01', format='floatlist') -opObj22.addParameter(name='dirCosy', value=' 0,-0.96858316,0,0.96858316,0', format='floatlist') +opObj22.addParameter(name='azimuth', value='0,180,90,0,-90', format='floatlist') +opObj22.addParameter(name='elevation', value='74.53,75.60,75.60,90.0,75.60', format='floatlist') # opObj22.addParameter(name='horizontalOnly', value='1', format='bool') # opObj22.addParameter(name='channelList', value='1,2', format='intlist') @@ -111,10 +122,10 @@ opObj23.addParameter(name='id', value='4', format='int') opObj23.addParameter(name='wintitle', value='Wind Profiler', format='str') opObj23.addParameter(name='save', value='1', format='bool') opObj23.addParameter(name='figpath', value = pathFigure, format='str') -opObj23.addParameter(name='zmin', value='-10', format='int') -opObj23.addParameter(name='zmax', value='10', format='int') -opObj23.addParameter(name='zmin_ver', value='-80', format='float') -opObj23.addParameter(name='zmax_ver', value='80', format='float') +opObj23.addParameter(name='zmin', value='-20', format='int') +opObj23.addParameter(name='zmax', value='20', format='int') +opObj23.addParameter(name='zmin_ver', value='-100', format='float') +opObj23.addParameter(name='zmax_ver', value='100', format='float') opObj23.addParameter(name='SNRmin', value='-10', format='int') opObj23.addParameter(name='SNRmax', value='60', format='int') opObj23.addParameter(name='SNRthresh', value='0', format='float') @@ -129,3 +140,7 @@ controllerObj.readXml(filename) controllerObj.createObjects() controllerObj.connectObjects() controllerObj.run() + +#21 3 pm + +