Omaha #3595 Register two more fields. Replace UEngine with DAF and properly call the script

Change-Id: I3dac64f0537877858f9cf0bbf9e394e0e56075ba

Former-commit-id: 33e141dd38 [formerly e1470cb4ce03b49ac85936760469a22786195a99]
Former-commit-id: 1df2418409
This commit is contained in:
Nathan Bowler 2014-10-10 13:18:39 -04:00
parent 404a87b2c9
commit db82cdbdfe
3 changed files with 318 additions and 262 deletions

View file

@ -41,6 +41,7 @@
<constructor-arg value="MB"/> <constructor-arg value="MB"/>
<constructor-arg> <constructor-arg>
<list> <list>
<value>prMaxW</value>
<value>wdMaxW</value> <value>wdMaxW</value>
<value>wsMaxW</value> <value>wsMaxW</value>
</list> </list>
@ -66,6 +67,7 @@
<constructor-arg value="FHAG"/> <constructor-arg value="FHAG"/>
<constructor-arg> <constructor-arg>
<list> <list>
<value>htSigW</value>
<value>wdSigW</value> <value>wdSigW</value>
<value>wsSigW</value> <value>wsSigW</value>
</list> </list>

View file

@ -33,12 +33,13 @@
# cleaning it up. The path to the finalized python is /tmp/a2gtraobNNNNN.py # cleaning it up. The path to the finalized python is /tmp/a2gtraobNNNNN.py
# where NNNNN is a unix process id. # where NNNNN is a unix process id.
# #
# #
# SOFTWARE HISTORY # SOFTWARE HISTORY
# #
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# Oct 10, 2014 3595 nabowle Initial modification. Fix sed call. # Oct 10, 2014 3595 nabowle Initial modification. Fix sed call.
# Oct 10, 2014 3595 nabowle Handle DAF version.
# #
set rmpy = yes set rmpy = yes
if ( "$1" == "p" ) then if ( "$1" == "p" ) then
@ -74,12 +75,22 @@ if ( $?FXA_HOME ) then
set stubpy = $FXA_HOME/bin/${stubbase} set stubpy = $FXA_HOME/bin/${stubbase}
endif endif
endif endif
set staInf = $PWD/wmoToNameRaob.txt
if ( $?FXA_HOME ) then
if ( -e $FXA_HOME/data/wmoToNameRaob.txt ) \
set staInf = $FXA_HOME/data/wmoToNameRaob.txt
endif
# #
# Determine if we are using the data access framework or the uEngine. # Determine if we are using the data access framework or the uEngine.
# #
grep DataAccessLayer $stubpy >& /dev/null grep DataAccessLayer $stubpy >& /dev/null
if ( $status == 0 ) then if ( $status == 0 ) then
set method = "daf" # Replace first field with station names substitutions in wmoToNameRaob.txt or
# with what's stored in the database. They are similar but do not match 100%.
/awips2/python/bin/python $stubpy -b "$1 $2" -e "$3 $4" | sed -f $staInf
# /awips2/python/bin/python $stubpy -b "$1 $2" -e "$3 $4" --use-station-name
else else
# #
# Set up the environment we need to run the UEngine. # Set up the environment we need to run the UEngine.
@ -98,24 +109,17 @@ else
exit exit
endif endif
source $ueenv source $ueenv
endif
# set specpy = /tmp/a2gtraob${$}.py
set staInf = $PWD/wmoToNameRaob.txt rm -rf $specpy >& /dev/null
if ( $?FXA_HOME ) then touch $specpy
if ( -e $FXA_HOME/data/wmoToNameRaob.txt ) \ chmod 775 $specpy
set staInf = $FXA_HOME/data/wmoToNameRaob.txt cat $stubpy | sed "s/BBBBB/$1 $2/g" | sed "s/EEEEE/$3 $4/g" > $specpy
endif
set specpy = /tmp/a2gtraob${$}.py
rm -rf $specpy >& /dev/null
touch $specpy
chmod 775 $specpy
cat $stubpy | sed "s/BBBBB/$1 $2/g" | sed "s/EEEEE/$3 $4/g" > $specpy
if ( "$method" == "daf" ) then
/awips2/python/bin/python $specpy
else
cd $UE_BIN_PATH cd $UE_BIN_PATH
( uengine -r python < $specpy ) | grep -v '<' | sed -n '2,$p' | \ ( uengine -r python < $specpy ) | grep -v '<' | sed -n '2,$p' | \
sed -f $staInf sed -f $staInf
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
endif endif
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
#

View file

@ -20,269 +20,319 @@
# Gets all available raob data in the A-II database over a specified range of # Gets all available raob data in the A-II database over a specified range of
# times. The data is output to stdout as ASCII. # times. The data is output to stdout as ASCII.
# #
# SOFTWARE HISTORY # SOFTWARE HISTORY
# #
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# Oct 10, 2014 3595 nabowle Initial modification. Fix Man and SigW indices. # Oct 10, 2014 3595 nabowle Initial modification. Fix Man and SigW indices.
# Oct 10, 2014 3595 nabowle Replace UEngine with DAF.
# #
# #
# pointDataQuery.stationName_lat_lon.py
from com.raytheon.uf.common.message.response import ResponseMessageGeneric
import PointDataQuery
# 1. import argparse
pdq = PointDataQuery.PointDataQuery("bufrua") import sys
# 3. the stuff we want returned to us in PointDataContainer from datetime import datetime
reqPar = "wmoStaNum,validTime,rptType" from ufpy.dataaccess import DataAccessLayer
reqPar += ",latitude,longitude,staElev" from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange
reqPar += ",numMand,prMan,htMan,tpMan,tdMan,wsMan,wdMan"
reqPar += ",numSigT,prSigT,tpSigT,tdSigT"
reqPar += ",numSigW,htSigW,wsSigW,wdSigW"
reqPar += ",numTrop,prTrop,tpTrop,tdTrop,wsTrop,wdTrop"
reqPar += ",numMwnd,prMaxW,wsMaxW,wdMaxW"
pdq.setRequestedParameters(reqPar)
# 2. some constraints def get_args():
pdq.addConstraint("dataTime","BBBBB:00.0",">=") parser = argparse.ArgumentParser(conflict_handler="resolve")
pdq.addConstraint("dataTime","EEEEE:00.0","<=") parser.add_argument("-h", action="store", dest="host",
help="EDEX server hostname (optional)",
metavar="hostname")
parser.add_argument("-b", action="store", dest="start",
help="The start of the time range in YYYY-MM-DD HH:MM",
metavar="start")
parser.add_argument("-e", action="store", dest="end",
help="The end of the time range in YYYY-MM-DD HH:MM",
metavar="end")
parser.add_argument("--use-station-name", action='store_true', default=False,
dest="stationname", help="Output the station name instead of station id for the first output field.")
return parser.parse_args()
# 5.1 execute() returns a ResponseMessageGeneric def main():
pdq.requestAllLevels() # The multi-dimensional parameters.
rmg = pdq.execute() MAN_PARAMS = set(['prMan', 'htMan', 'tpMan', 'tdMan', 'wdMan', 'wsMan'])
TROP_PARAMS = set(['prTrop', 'tpTrop', 'tdTrop', 'wdTrop', 'wsTrop'])
MAXW_PARAMS = set(['prMaxW', 'wdMaxW', 'wsMaxW'])
SIGT_PARAMS = set(['prSigT', 'tpSigT', 'tdSigT'])
SIGW_PARAMS = set(['htSigW', 'wdSigW', 'wsSigW'])
# 5.1, cont'd. RMG's payload is a PointDataContainer user_args = get_args()
pdc = rmg.getContents()
# return ResponseMessageGeneric(pdc)
# Get the data for each requested parameter. if user_args.host:
ista = pdc.getPointDataTypes().get("wmoStaNum").getIntData() DataAccessLayer.changeEDEXHost(user_args.host)
tobs = pdc.getPointDataTypes().get("validTime").getLongData()
rtyp = pdc.getPointDataTypes().get("rptType").getIntData()
lat = pdc.getPointDataTypes().get("latitude").getFloatData()
lon = pdc.getPointDataTypes().get("longitude").getFloatData()
elev = pdc.getPointDataTypes().get("staElev").getFloatData()
nman = pdc.getPointDataTypes().get("numMand").getIntData()
pman = pdc.getPointDataTypes().get("prMan").getFloatData()
zman = pdc.getPointDataTypes().get("htMan").getFloatData()
tman = pdc.getPointDataTypes().get("tpMan").getFloatData()
tdman = pdc.getPointDataTypes().get("tdMan").getFloatData()
ffman = pdc.getPointDataTypes().get("wsMan").getFloatData()
ddman = pdc.getPointDataTypes().get("wdMan").getFloatData()
nsigt = pdc.getPointDataTypes().get("numSigT").getIntData()
psigt = pdc.getPointDataTypes().get("prSigT").getFloatData()
tsigt = pdc.getPointDataTypes().get("tpSigT").getFloatData()
tdsigt = pdc.getPointDataTypes().get("tdSigT").getFloatData()
nsigw = pdc.getPointDataTypes().get("numSigW").getIntData()
zsigw = pdc.getPointDataTypes().get("htSigW").getFloatData()
ffsigw = pdc.getPointDataTypes().get("wsSigW").getFloatData()
ddsigw = pdc.getPointDataTypes().get("wdSigW").getFloatData()
ntrop = pdc.getPointDataTypes().get("numTrop").getIntData()
ptrop = pdc.getPointDataTypes().get("prTrop").getFloatData()
ttrop = pdc.getPointDataTypes().get("tpTrop").getFloatData()
tdtrop = pdc.getPointDataTypes().get("tdTrop").getFloatData()
fftrop = pdc.getPointDataTypes().get("wsTrop").getFloatData()
ddtrop = pdc.getPointDataTypes().get("wdTrop").getFloatData()
nmxw = pdc.getPointDataTypes().get("numMwnd").getIntData()
pmxw = pdc.getPointDataTypes().get("prMaxW").getFloatData()
ffmxw = pdc.getPointDataTypes().get("wsMaxW").getFloatData()
ddmxw = pdc.getPointDataTypes().get("wdMaxW").getFloatData()
# 5.2 and 5.3 start = user_args.start
if len(tobs) == 0 : end = user_args.end
msg = "couldn't get data"
return ResponseMessageGeneric(msg)
# D-2D format files expect depression if not start or not end:
i = len(tman)-1 print >> sys.stderr, "Start or End date not provided"
while i>=0 : return
if tdman[i]>150 and tdman[i]<=tman[i] :
tdman[i] = tman[i]-tdman[i]
else :
tdman[i] = -9999.0
i -= 1
i = len(tsigt)-1
while i>=0 :
if tdsigt[i]>150 and tdsigt[i]<=tsigt[i] :
tdsigt[i] = tsigt[i]-tdsigt[i]
else :
tdsigt[i] = -9999.0
i -= 1
i = len(ttrop)-1
while i>=0 :
if tdtrop[i]>150 and tdtrop[i]<=ttrop[i] :
tdtrop[i] = ttrop[i]-tdtrop[i]
else :
tdtrop[i] = -9999.0
i -= 1
msg = "\n" beginRange = datetime.strptime( start + ":00.0", "%Y-%m-%d %H:%M:%S.%f")
i = iMan = iSigT = iSigW = iTrop = iMxW = 0 endRange = datetime.strptime( end + ":59.9", "%Y-%m-%d %H:%M:%S.%f")
while i < len(tobs) : timerange = TimeRange(beginRange, endRange)
if nman[i]<0 : nman[i] = 0
if nsigt[i]<0 : nsigt[i] = 0
if nsigw[i]<0 : nsigw[i] = 0
if ntrop[i]<0 : ntrop[i] = 0
if nmxw[i]<0 : nmxw[i] = 0
if nman[i]==0 and nsigt[i]==0 and nsigw[i]==0 or rtyp[i]>2022:
iMan += 25
iSigT += 120
iSigW += 80
iTrop += 5
iMxW += 5
i += 1
continue
msg += str(ista[i]) + "," req = DataAccessLayer.newDataRequest("bufrua")
msg += str(tobs[i]/1000) + "," req.setParameters("wmoStaNum", "validTime", "rptType", "staElev", "numMand",
msg += "%.4f"%lat[i] + "," "numSigT", "numSigW", "numTrop", "numMwnd", "staName")
msg += "%.4f"%lon[i] + "," req.getParameters().extend(MAN_PARAMS)
msg += "%.0f"%elev[i] + "," req.getParameters().extend(TROP_PARAMS)
msg += str(ista[i]) + "," req.getParameters().extend(MAXW_PARAMS)
req.getParameters().extend(SIGT_PARAMS)
req.getParameters().extend(SIGW_PARAMS)
msg += str(nman[i]) + "," geometries = DataAccessLayer.getGeometryData(req, timerange)
kk = iMan + nman[i]
if nman[i]>0 : msg += "%.1f"%pman[iMan]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%pman[k];
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%elev[i]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%zman[k];
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%tman[iMan]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%tman[k];
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%tdman[iMan]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%tdman[k];
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%ffman[iMan]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%ffman[k];
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%ddman[iMan]
k = iMan + 1
while k < kk :
msg += "|" + "%.1f"%ddman[k];
k += 1
msg += ","
iMan += 25
msg += str(nsigt[i]) + "," if not geometries :
kk = iSigT + nsigt[i] # print "couldn't get data"
if nsigt[i]>0 : msg += "%.1f"%psigt[iSigT] return
k = iSigT + 1
while k < kk :
msg += "|" + "%.1f"%psigt[k];
k += 1
msg += ","
if nsigt[i]>0 : msg += "%.1f"%tsigt[iSigT]
k = iSigT + 1
while k < kk :
msg += "|" + "%.1f"%tsigt[k];
k += 1
msg += ","
if nsigt[i]>0 : msg += "%.1f"%tdsigt[iSigT]
k = iSigT + 1
while k < kk :
msg += "|" + "%.1f"%tdsigt[k];
k += 1
msg += ","
iSigT += 120
msg += str(nsigw[i]) + ","
kk = iSigW + nsigw[i]
if nsigw[i]>0 : msg += "%.1f"%zsigw[iSigW]
k = iSigW + 1
while k < kk :
msg += "|" + "%.1f"%zsigw[k];
k += 1
msg += ","
if nsigw[i]>0 : msg += "%.1f"%ffsigw[iSigW]
k = iSigW + 1
while k < kk :
msg += "|" + "%.1f"%ffsigw[k];
k += 1
msg += ","
if nsigw[i]>0 : msg += "%.1f"%ddsigw[iSigW]
k = iSigW + 1
while k < kk :
msg += "|" + "%.1f"%ddsigw[k];
k += 1
msg += ","
iSigW += 80
msg += str(ntrop[i]) + "," manGeos = []
kk = iTrop + ntrop[i] tropGeos = []
if ntrop[i]>0 : msg += "%.1f"%ptrop[iTrop] maxwGeos = []
k = iTrop + 1 sigtGeos = []
while k < kk : sigwGeos = []
msg += "|" + "%.1f"%ptrop[k]; # D-2D format files expect depression
k += 1 tdman = []
msg += "," tdsigt = []
if ntrop[i]>0 : msg += "%.1f"%ttrop[iTrop] tdtrop = []
k = iTrop + 1 msg = ""
while k < kk : for geoData in geometries :
msg += "|" + "%.1f"%ttrop[k]; if set(geoData.getParameters()) & MAN_PARAMS :
k += 1 manGeos.append(geoData)
msg += "," td = geoData.getNumber("tdMan")
if ntrop[i]>0 : msg += "%.1f"%tdtrop[iTrop] tp = geoData.getNumber("tpMan")
k = iTrop + 1 if td >150 and td<=tp :
while k < kk : tdman.append(tp-td)
msg += "|" + "%.1f"%tdtrop[k]; else :
k += 1 tdman.append(-9999.0)
msg += "," continue
if ntrop[i]>0 : msg += "%.1f"%fftrop[iTrop] if set(geoData.getParameters()) & TROP_PARAMS :
k = iTrop + 1 tropGeos.append(geoData)
while k < kk : td = geoData.getNumber("tdTrop")
msg += "|" + "%.1f"%fftrop[k]; tp = geoData.getNumber("tpTrop")
k += 1 if td>150 and td<=tp :
msg += "," tdtrop.append(tp-td)
if ntrop[i]>0 : msg += "%.1f"%ddtrop[iTrop] else :
k = iTrop + 1 tdtrop.append(-9999.0)
while k < kk : continue
msg += "|" + "%.1f"%ddtrop[k]; if set(geoData.getParameters()) & MAXW_PARAMS :
k += 1 maxwGeos.append(geoData)
msg += "," continue
iTrop += 5 if set(geoData.getParameters()) & SIGT_PARAMS :
sigtGeos.append(geoData)
td = geoData.getNumber("tdSigT")
tp = geoData.getNumber("tpSigT")
if td>150 and td<=tp :
tdsigt.append(tp-td)
else :
tdsigt.append(-9999.0)
continue
if set(geoData.getParameters()) & SIGW_PARAMS :
sigwGeos.append(geoData)
continue
msg += str(nmxw[i]) + "," if len(manGeos) == 0 and len(sigtGeos) == 0 and len(sigwGeos) == 0 or geoData.getNumber("rptType") > 2022 :
kk = iMxW + nmxw[i] manGeos = []
if nmxw[i]>0 : msg += "%.1f"%pmxw[iMxW] tropGeos = []
k = iMxW + 1 maxwGeos = []
while k < kk : sigtGeos = []
msg += "|" + "%.1f"%pmxw[k]; sigwGeos = []
k += 1 tdman = []
msg += "," tdsigt = []
if nmxw[i]>0 : msg += "%.1f"%ffmxw[iMxW] tdtrop = []
k = iMxW + 1 continue
while k < kk :
msg += "|" + "%.1f"%ffmxw[k];
k += 1
msg += ","
if nmxw[i]>0 : msg += "%.1f"%ddmxw[iMxW]
k = iMxW + 1
while k < kk :
msg += "|" + "%.1f"%ddmxw[k];
k += 1
msg += "\n"
iMxW += 5
i += 1 if user_args.stationname and geoData.getString("staName") :
msg += geoData.getString("staName") + ","
else :
msg += geoData.getString("wmoStaNum") + ","
msg += str(geoData.getNumber("validTime")/1000) + ","
msg += "%.4f"%geoData.getGeometry().y + ","
msg += "%.4f"%geoData.getGeometry().x + ","
msg += "%.0f"%geoData.getNumber("staElev") + ","
msg += geoData.getString("wmoStaNum") + ","
return ResponseMessageGeneric(msg) kk = len(manGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%manGeos[0].getNumber("prMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%manGeos[k].getNumber("prMan")
k += 1
msg += ","
msg += "%.1f"%geoData.getNumber("staElev")
k = 1
while k < kk :
msg += "|" + "%.1f"%manGeos[k].getNumber("htMan")
k += 1
msg += ","
msg += "%.1f"%manGeos[0].getNumber("tpMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%manGeos[k].getNumber("tpMan")
k += 1
msg += ","
msg += "%.1f"%tdman[0]
k = 1
while k < kk :
msg += "|" + "%.1f"%tdman[k];
k += 1
msg += ","
msg += "%.1f"%manGeos[0].getNumber("wsMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%manGeos[k].getNumber("wsMan")
k += 1
msg += ","
msg += "%.1f"%manGeos[0].getNumber("wdMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%manGeos[k].getNumber("wdMan")
k += 1
msg += ","
else :
msg += ",,,,,,"
kk = len(sigtGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%sigtGeos[0].getNumber("prSigT")
k = 1
while k < kk :
msg += "|" + "%.1f"%sigtGeos[k].getNumber("prSigT")
k += 1
msg += ","
msg += "%.1f"%sigtGeos[0].getNumber("tpSigT")
k = 1
while k < kk :
msg += "|" + "%.1f"%sigtGeos[k].getNumber("tpSigT")
k += 1
msg += ","
msg += "%.1f"%tdsigt[0]
k = 1
while k < kk :
msg += "|" + "%.1f"%tdsigt[k]
k += 1
msg += ","
else :
msg += ",,,"
kk = len(sigwGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%sigwGeos[0].getNumber("htSigW")
k = 1
while k < kk :
msg += "|" + "%.1f"%sigwGeos[k].getNumber("htSigW")
k += 1
msg += ","
msg += "%.1f"%sigwGeos[0].getNumber("wsSigW")
k = 1
while k < kk :
msg += "|" + "%.1f"%sigwGeos[k].getNumber("wsSigW")
k += 1
msg += ","
msg += "%.1f"%sigwGeos[0].getNumber("wdSigW")
k = 1
while k < kk :
msg += "|" + "%.1f"%sigwGeos[k].getNumber("wdSigW")
k += 1
msg += ","
else :
msg += ",,,"
kk = len(tropGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%tropGeos[0].getNumber("prTrop")
k = 1
while k < kk :
msg += "|" + "%.1f"%tropGeos[k].getNumber("prTrop")
k += 1
msg += ","
msg += "%.1f"%tropGeos[0].getNumber("tpTrop")
k = 1
while k < kk :
msg += "|" + "%.1f"%tropGeos[k].getNumber("tpTrop")
k += 1
msg += ","
msg += "%.1f"%tdtrop[0]
k = 1
while k < kk :
msg += "|" + "%.1f"%tdtrop[k]
k += 1
msg += ","
msg += "%.1f"%tropGeos[0].getNumber("wsTrop")
k = 1
while k < kk :
msg += "|" + "%.1f"%tropGeos[k].getNumber("wsTrop")
k += 1
msg += ","
msg += "%.1f"%tropGeos[0].getNumber("wdTrop")
k = 1
while k < kk :
msg += "|" + "%.1f"%tropGeos[k].getNumber("wdTrop")
k += 1
msg += ","
else :
msg += ",,,,,"
kk = len(maxwGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%maxwGeos[0].getNumber("prMaxW")
k = 1
while k < kk :
msg += "|" + "%.1f"%maxwGeos[k].getNumber("prMaxW")
k += 1
msg += ","
msg += "%.1f"%maxwGeos[0].getNumber("wsMaxW")
k = 1
while k < kk :
msg += "|" + "%.1f"%maxwGeos[k].getNumber("wsMaxW")
k += 1
msg += ","
msg += "%.1f"%maxwGeos[0].getNumber("wdMaxW")
k = 1
while k < kk :
msg += "|" + "%.1f"%maxwGeos[k].getNumber("wdMaxW")
k += 1
else :
msg += ",,"
msg += "\n"
manGeos = []
tropGeos = []
maxwGeos = []
sigtGeos = []
sigwGeos = []
tdman = []
tdsigt = []
tdtrop = []
print msg.strip()
if __name__ == '__main__':
main()