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

View file

@ -39,6 +39,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# Oct 10, 2014 3595 nabowle Initial modification. Fix sed call.
# Oct 10, 2014 3595 nabowle Handle DAF version.
#
set rmpy = yes
if ( "$1" == "p" ) then
@ -74,12 +75,22 @@ if ( $?FXA_HOME ) then
set stubpy = $FXA_HOME/bin/${stubbase}
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.
#
grep DataAccessLayer $stubpy >& /dev/null
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
#
# Set up the environment we need to run the UEngine.
@ -98,24 +109,17 @@ else
exit
endif
source $ueenv
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
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
( uengine -r python < $specpy ) | grep -v '<' | sed -n '2,$p' | \
sed -f $staInf
endif
if ( "$rmpy" == "yes" ) rm -rf $specpy >& /dev/null
#
endif

View file

@ -26,263 +26,313 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 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.
pdq = PointDataQuery.PointDataQuery("bufrua")
import argparse
import sys
# 3. the stuff we want returned to us in PointDataContainer
reqPar = "wmoStaNum,validTime,rptType"
reqPar += ",latitude,longitude,staElev"
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)
from datetime import datetime
from ufpy.dataaccess import DataAccessLayer
from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange
# 2. some constraints
pdq.addConstraint("dataTime","BBBBB:00.0",">=")
pdq.addConstraint("dataTime","EEEEE:00.0","<=")
def get_args():
parser = argparse.ArgumentParser(conflict_handler="resolve")
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
pdq.requestAllLevels()
rmg = pdq.execute()
def main():
# The multi-dimensional parameters.
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
pdc = rmg.getContents()
# return ResponseMessageGeneric(pdc)
user_args = get_args()
# Get the data for each requested parameter.
ista = pdc.getPointDataTypes().get("wmoStaNum").getIntData()
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()
if user_args.host:
DataAccessLayer.changeEDEXHost(user_args.host)
# 5.2 and 5.3
if len(tobs) == 0 :
msg = "couldn't get data"
return ResponseMessageGeneric(msg)
start = user_args.start
end = user_args.end
if not start or not end:
print >> sys.stderr, "Start or End date not provided"
return
beginRange = datetime.strptime( start + ":00.0", "%Y-%m-%d %H:%M:%S.%f")
endRange = datetime.strptime( end + ":59.9", "%Y-%m-%d %H:%M:%S.%f")
timerange = TimeRange(beginRange, endRange)
req = DataAccessLayer.newDataRequest("bufrua")
req.setParameters("wmoStaNum", "validTime", "rptType", "staElev", "numMand",
"numSigT", "numSigW", "numTrop", "numMwnd", "staName")
req.getParameters().extend(MAN_PARAMS)
req.getParameters().extend(TROP_PARAMS)
req.getParameters().extend(MAXW_PARAMS)
req.getParameters().extend(SIGT_PARAMS)
req.getParameters().extend(SIGW_PARAMS)
geometries = DataAccessLayer.getGeometryData(req, timerange)
if not geometries :
# print "couldn't get data"
return
manGeos = []
tropGeos = []
maxwGeos = []
sigtGeos = []
sigwGeos = []
# D-2D format files expect depression
i = len(tman)-1
while i>=0 :
if tdman[i]>150 and tdman[i]<=tman[i] :
tdman[i] = tman[i]-tdman[i]
tdman = []
tdsigt = []
tdtrop = []
msg = ""
for geoData in geometries :
if set(geoData.getParameters()) & MAN_PARAMS :
manGeos.append(geoData)
td = geoData.getNumber("tdMan")
tp = geoData.getNumber("tpMan")
if td >150 and td<=tp :
tdman.append(tp-td)
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]
tdman.append(-9999.0)
continue
if set(geoData.getParameters()) & TROP_PARAMS :
tropGeos.append(geoData)
td = geoData.getNumber("tdTrop")
tp = geoData.getNumber("tpTrop")
if td>150 and td<=tp :
tdtrop.append(tp-td)
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]
tdtrop.append(-9999.0)
continue
if set(geoData.getParameters()) & MAXW_PARAMS :
maxwGeos.append(geoData)
continue
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 :
tdtrop[i] = -9999.0
i -= 1
msg = "\n"
i = iMan = iSigT = iSigW = iTrop = iMxW = 0
while i < len(tobs) :
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
tdsigt.append(-9999.0)
continue
if set(geoData.getParameters()) & SIGW_PARAMS :
sigwGeos.append(geoData)
continue
msg += str(ista[i]) + ","
msg += str(tobs[i]/1000) + ","
msg += "%.4f"%lat[i] + ","
msg += "%.4f"%lon[i] + ","
msg += "%.0f"%elev[i] + ","
msg += str(ista[i]) + ","
if len(manGeos) == 0 and len(sigtGeos) == 0 and len(sigwGeos) == 0 or geoData.getNumber("rptType") > 2022 :
manGeos = []
tropGeos = []
maxwGeos = []
sigtGeos = []
sigwGeos = []
tdman = []
tdsigt = []
tdtrop = []
continue
msg += str(nman[i]) + ","
kk = iMan + nman[i]
if nman[i]>0 : msg += "%.1f"%pman[iMan]
k = iMan + 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") + ","
kk = len(manGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%manGeos[0].getNumber("prMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%pman[k];
msg += "|" + "%.1f"%manGeos[k].getNumber("prMan")
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%elev[i]
k = iMan + 1
msg += "%.1f"%geoData.getNumber("staElev")
k = 1
while k < kk :
msg += "|" + "%.1f"%zman[k];
msg += "|" + "%.1f"%manGeos[k].getNumber("htMan")
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%tman[iMan]
k = iMan + 1
msg += "%.1f"%manGeos[0].getNumber("tpMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%tman[k];
msg += "|" + "%.1f"%manGeos[k].getNumber("tpMan")
k += 1
msg += ","
if nman[i]>0 : msg += "%.1f"%tdman[iMan]
k = iMan + 1
msg += "%.1f"%tdman[0]
k = 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]) + ","
kk = iSigT + nsigt[i]
if nsigt[i]>0 : msg += "%.1f"%psigt[iSigT]
k = iSigT + 1
msg += "%.1f"%manGeos[0].getNumber("wsMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%psigt[k];
msg += "|" + "%.1f"%manGeos[k].getNumber("wsMan")
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
msg += "%.1f"%manGeos[0].getNumber("wdMan")
k = 1
while k < kk :
msg += "|" + "%.1f"%zsigw[k];
msg += "|" + "%.1f"%manGeos[k].getNumber("wdMan")
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
else :
msg += ",,,,,,"
msg += str(ntrop[i]) + ","
kk = iTrop + ntrop[i]
if ntrop[i]>0 : msg += "%.1f"%ptrop[iTrop]
k = iTrop + 1
kk = len(sigtGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%sigtGeos[0].getNumber("prSigT")
k = 1
while k < kk :
msg += "|" + "%.1f"%ptrop[k];
msg += "|" + "%.1f"%sigtGeos[k].getNumber("prSigT")
k += 1
msg += ","
if ntrop[i]>0 : msg += "%.1f"%ttrop[iTrop]
k = iTrop + 1
while k < kk :
msg += "|" + "%.1f"%ttrop[k];
k += 1
msg += ","
if ntrop[i]>0 : msg += "%.1f"%tdtrop[iTrop]
k = iTrop + 1
while k < kk :
msg += "|" + "%.1f"%tdtrop[k];
k += 1
msg += ","
if ntrop[i]>0 : msg += "%.1f"%fftrop[iTrop]
k = iTrop + 1
while k < kk :
msg += "|" + "%.1f"%fftrop[k];
k += 1
msg += ","
if ntrop[i]>0 : msg += "%.1f"%ddtrop[iTrop]
k = iTrop + 1
while k < kk :
msg += "|" + "%.1f"%ddtrop[k];
k += 1
msg += ","
iTrop += 5
msg += str(nmxw[i]) + ","
kk = iMxW + nmxw[i]
if nmxw[i]>0 : msg += "%.1f"%pmxw[iMxW]
k = iMxW + 1
msg += "%.1f"%sigtGeos[0].getNumber("tpSigT")
k = 1
while k < kk :
msg += "|" + "%.1f"%pmxw[k];
msg += "|" + "%.1f"%sigtGeos[k].getNumber("tpSigT")
k += 1
msg += ","
if nmxw[i]>0 : msg += "%.1f"%ffmxw[iMxW]
k = iMxW + 1
msg += "%.1f"%tdsigt[0]
k = 1
while k < kk :
msg += "|" + "%.1f"%ffmxw[k];
msg += "|" + "%.1f"%tdsigt[k]
k += 1
msg += ","
if nmxw[i]>0 : msg += "%.1f"%ddmxw[iMxW]
k = iMxW + 1
else :
msg += ",,,"
kk = len(sigwGeos)
msg += str(kk) + ","
if kk>0 :
msg += "%.1f"%sigwGeos[0].getNumber("htSigW")
k = 1
while k < kk :
msg += "|" + "%.1f"%ddmxw[k];
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"
iMxW += 5
i += 1
manGeos = []
tropGeos = []
maxwGeos = []
sigtGeos = []
sigwGeos = []
tdman = []
tdsigt = []
tdtrop = []
return ResponseMessageGeneric(msg)
print msg.strip()
if __name__ == '__main__':
main()