addback vcmodule
This commit is contained in:
parent
4b75ed07b4
commit
59918c5fe4
9 changed files with 571 additions and 225 deletions
|
@ -1,75 +0,0 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
||||
#
|
||||
# Globally import and sets up instances of the scripts.
|
||||
# Designed to be used as a master controller for inspecting and running
|
||||
# python scripts from Java. Differs from base MasterInterface class because
|
||||
# it utilizes the rollback importer.
|
||||
#
|
||||
# This class should remain purely python. For Java interactions, extend this class.
|
||||
#
|
||||
#
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 01/17/13 dgilling Initial Creation.
|
||||
# 10/09/13 16614 njensen Fixed reloadModules()
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
import MasterInterface
|
||||
|
||||
class RollbackMasterInterface(MasterInterface.MasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
super(RollbackMasterInterface, self).__init__()
|
||||
self._scriptPath = scriptPath
|
||||
|
||||
def importModules(self):
|
||||
super(RollbackMasterInterface, self).importModules(self._scriptPath)
|
||||
|
||||
def getStartupErrors(self):
|
||||
from java.util import ArrayList
|
||||
errorList = ArrayList()
|
||||
for err in self.getImportErrors():
|
||||
errorList.add(str(err))
|
||||
return errorList
|
||||
|
||||
def addModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).addModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).reloadModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def removeModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).removeModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModules(self):
|
||||
for script in self.scripts:
|
||||
super(RollbackMasterInterface, self).reloadModule(script)
|
||||
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
||||
#
|
||||
# Globally import and sets up instances of the scripts.
|
||||
# Designed to be used as a master controller for inspecting and running
|
||||
# python scripts from Java. Differs from base MasterInterface class because
|
||||
# it utilizes the rollback importer.
|
||||
#
|
||||
# This class should remain purely python. For Java interactions, extend this class.
|
||||
#
|
||||
#
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 01/17/13 dgilling Initial Creation.
|
||||
# 10/09/13 16614 njensen Fixed reloadModules()
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
import MasterInterface
|
||||
|
||||
class RollbackMasterInterface(MasterInterface.MasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
super(RollbackMasterInterface, self).__init__()
|
||||
self._scriptPath = scriptPath
|
||||
|
||||
def importModules(self):
|
||||
super(RollbackMasterInterface, self).importModules(self._scriptPath)
|
||||
|
||||
def getStartupErrors(self):
|
||||
from java.util import ArrayList
|
||||
errorList = ArrayList()
|
||||
for err in self.getImportErrors():
|
||||
errorList.add(str(err))
|
||||
return errorList
|
||||
|
||||
def addModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).addModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).reloadModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def removeModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).removeModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModules(self):
|
||||
for script in self.scripts:
|
||||
super(RollbackMasterInterface, self).reloadModule(script)
|
||||
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
||||
#
|
||||
# Globally import and sets up instances of the scripts.
|
||||
# Designed to be used as a master controller for inspecting and running
|
||||
# python scripts from Java. Differs from base MasterInterface class because
|
||||
# it utilizes the rollback importer.
|
||||
#
|
||||
# This class should remain purely python. For Java interactions, extend this class.
|
||||
#
|
||||
#
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 01/17/13 dgilling Initial Creation.
|
||||
# 10/09/13 16614 njensen Fixed reloadModules()
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
import MasterInterface
|
||||
|
||||
class RollbackMasterInterface(MasterInterface.MasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
super(RollbackMasterInterface, self).__init__()
|
||||
self._scriptPath = scriptPath
|
||||
|
||||
def importModules(self):
|
||||
super(RollbackMasterInterface, self).importModules(self._scriptPath)
|
||||
|
||||
def getStartupErrors(self):
|
||||
from java.util import ArrayList
|
||||
errorList = ArrayList()
|
||||
for err in self.getImportErrors():
|
||||
errorList.add(str(err))
|
||||
return errorList
|
||||
|
||||
def addModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).addModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).reloadModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def removeModule(self, moduleName):
|
||||
super(RollbackMasterInterface, self).removeModule(moduleName)
|
||||
self.reloadModules()
|
||||
|
||||
def reloadModules(self):
|
||||
for script in self.scripts:
|
||||
super(RollbackMasterInterface, self).reloadModule(script)
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
# -*-python-*-
|
||||
import time
|
||||
from numpy import *
|
||||
|
||||
SCALAR = 'Scalar'
|
||||
VECTOR = 'Vector'
|
||||
WEATHER = 'Weather'
|
||||
DISCRETE = 'Discrete'
|
||||
YES = True
|
||||
NO = False
|
||||
|
||||
class VCParm:
|
||||
|
||||
def splitTR(self, tr, inv):
|
||||
for btr in inv:
|
||||
if self._overlaps(btr, tr):
|
||||
if self._containsTR(btr, tr):
|
||||
return []
|
||||
else:
|
||||
splitlst = []
|
||||
if not self._contains(btr, tr[0]):
|
||||
splitlst = splitlst + self.splitTR((tr[0], btr[0]),
|
||||
inv)
|
||||
if not self._contains(btr, tr[1]):
|
||||
splitlst = splitlst + self.splitTR((btr[1], tr[1]),
|
||||
inv)
|
||||
return splitlst
|
||||
return [tr]
|
||||
|
||||
def tcmp(self, t1, t2):
|
||||
return cmp(t1[0], t2[0])
|
||||
|
||||
def getInventory(self, QPF, QPF_ISC):
|
||||
# all Fcst grids get included if they overlap an ISC grid
|
||||
rval = []
|
||||
for tr in QPF:
|
||||
lst = []
|
||||
for itr in QPF_ISC:
|
||||
if self._overlaps(tr, itr):
|
||||
lst.append(itr)
|
||||
if len(lst):
|
||||
rval.append((tr, [tr], lst))
|
||||
|
||||
# Any ISC grid which does not overlap
|
||||
# or any portion that does not overlap
|
||||
# goes in as well
|
||||
for tr in QPF_ISC:
|
||||
for ntr in self.splitTR(tr, QPF):
|
||||
for ftr in QPF:
|
||||
if self._overlaps(ntr, ftr):
|
||||
break
|
||||
else:
|
||||
rval.append((ntr, [], [tr]))
|
||||
|
||||
#must sort in ascending order
|
||||
rval.sort(lambda x,y:cmp(x[0][0], y[0][0]))
|
||||
|
||||
return rval
|
||||
|
||||
# returns the percentage of tr1 that overlaps tr2
|
||||
def poverlap(self, tr1, tr2):
|
||||
itr = self._intersect(tr1, tr2)
|
||||
return (itr[1] - itr[0]) / float(tr1[1] - tr1[0])
|
||||
|
||||
def calcGrid(self, QPF, QPF_ISC):
|
||||
# If getInventory() works right
|
||||
# we either get 0 or 1 QPF grids.
|
||||
# And if 0 then only 1 QPF_ISC
|
||||
if len(QPF) == 0:
|
||||
return QPF_ISC[0][1]
|
||||
rval = QPF[0][1] * 0.0
|
||||
for i in QPF_ISC:
|
||||
rval = rval + i[1] * self.poverlap(i[0], QPF[0][0])
|
||||
return rval
|
||||
|
||||
def calcHistory(self, QPF_ISC):
|
||||
rval = []
|
||||
for t in QPF_ISC:
|
||||
for i in t[1]:
|
||||
rval.append(i)
|
||||
return rval
|
||||
|
||||
def getWEInfo(self):
|
||||
# For some reason, setting time dependent to YES
|
||||
# makes the GFE loose this ???
|
||||
return (("QPF", SCALAR, "in", "QPF", 5.0, 0.0, 2, YES),
|
||||
("ISC", "V"), (3600, 3600, 0))
|
||||
|
||||
def _containsTR(self, tr1, tr2):
|
||||
if tr1 == tr2:
|
||||
return True
|
||||
return self._contains(tr1, tr2[0]) and self._contains(tr1, tr2[1])
|
||||
|
||||
def _contains(self, timerange, time):
|
||||
if timerange[1] - timerange[0]:
|
||||
return ((time >= timerange[0]) and (time < timerange[1]))
|
||||
return time == timerange[0]
|
||||
|
||||
def _overlaps(self, tr1, tr2):
|
||||
if self._contains(tr2, tr1[0]) or self._contains(tr1, tr2[0]):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _intersect(self, t1, t2):
|
||||
if self._overlaps(t1, t2):
|
||||
return (max(t1[0], t2[0]), min(t1[1], t2[1]))
|
||||
return None
|
|
@ -0,0 +1,108 @@
|
|||
# -*-python-*-
|
||||
import time
|
||||
from numpy import *
|
||||
|
||||
SCALAR = 'Scalar'
|
||||
VECTOR = 'Vector'
|
||||
WEATHER = 'Weather'
|
||||
DISCRETE = 'Discrete'
|
||||
YES = True
|
||||
NO = False
|
||||
|
||||
class VCParm:
|
||||
def splitTR(self, tr, inv):
|
||||
for btr in inv:
|
||||
if self._overlaps(btr, tr):
|
||||
if self._containsTR(btr, tr):
|
||||
return []
|
||||
else:
|
||||
splitlst = []
|
||||
if not self._contains(btr, tr[0]):
|
||||
splitlst = splitlst + self.splitTR((tr[0], btr[0]),
|
||||
inv)
|
||||
if not self._contains(btr, tr[1]):
|
||||
splitlst = splitlst + self.splitTR((btr[1], tr[1]),
|
||||
inv)
|
||||
return splitlst
|
||||
return [tr]
|
||||
|
||||
def tcmp(self, t1, t2):
|
||||
return cmp(t1[0], t2[0])
|
||||
|
||||
def getInventory(self, SnowAmt, SnowAmt_ISC):
|
||||
# all Fcst grids get included if they overlap an ISC grid
|
||||
rval = []
|
||||
for tr in SnowAmt:
|
||||
lst = []
|
||||
for itr in SnowAmt_ISC:
|
||||
if self._overlaps(tr, itr):
|
||||
lst.append(itr)
|
||||
if len(lst):
|
||||
rval.append((tr, [tr], lst))
|
||||
|
||||
# Any ISC grid which does not overlap
|
||||
# or any portion that does not overlap
|
||||
# goes in as well
|
||||
for tr in SnowAmt_ISC:
|
||||
for ntr in self.splitTR(tr, SnowAmt):
|
||||
for ftr in SnowAmt:
|
||||
if self._overlaps(ntr, ftr):
|
||||
break
|
||||
else:
|
||||
rval.append((ntr, [], [tr]))
|
||||
|
||||
#must sort in ascending order
|
||||
rval.sort(lambda x,y:cmp(x[0][0], y[0][0]))
|
||||
|
||||
return rval
|
||||
|
||||
|
||||
# returns the percentage of tr1 that overlaps tr2
|
||||
def poverlap(self, tr1, tr2):
|
||||
itr = self._intersect(tr1, tr2)
|
||||
return (itr[1] - itr[0]) / float(tr1[1] - tr1[0])
|
||||
|
||||
def calcGrid(self, SnowAmt, SnowAmt_ISC):
|
||||
# If getInventory() works right
|
||||
# we either get 0 or 1 SnowAmt grids.
|
||||
# And if 0 then only 1 SnowAmt_ISC
|
||||
if len(SnowAmt) == 0:
|
||||
return SnowAmt_ISC[0][1]
|
||||
rval = SnowAmt[0][1] * 0.0
|
||||
for i in SnowAmt_ISC:
|
||||
rval = rval + i[1] * self.poverlap(i[0], SnowAmt[0][0])
|
||||
return rval
|
||||
|
||||
def calcHistory(self, SnowAmt_ISC):
|
||||
rval = []
|
||||
for t in SnowAmt_ISC:
|
||||
for i in t[1]:
|
||||
rval.append(i)
|
||||
return rval
|
||||
|
||||
def getWEInfo(self):
|
||||
# For some reason, setting time dependent to YES
|
||||
# makes the GFE loose this ???
|
||||
|
||||
return (("SnowAmt", SCALAR, "in","Snowfall amount", 20.0, 0.0, 1, YES),
|
||||
("ISC", "V"), (3600, 3600, 0))
|
||||
|
||||
def _containsTR(self, tr1, tr2):
|
||||
if tr1 == tr2:
|
||||
return True
|
||||
return self._contains(tr1, tr2[0]) and self._contains(tr1, tr2[1])
|
||||
|
||||
def _contains(self, timerange, time):
|
||||
if timerange[1] - timerange[0]:
|
||||
return ((time >= timerange[0]) and (time < timerange[1]))
|
||||
return time == timerange[0]
|
||||
|
||||
def _overlaps(self, tr1, tr2):
|
||||
if self._contains(tr2, tr1[0]) or self._contains(tr1, tr2[0]):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _intersect(self, t1, t2):
|
||||
if self._overlaps(t1, t2):
|
||||
return (max(t1[0], t2[0]), min(t1[1], t2[1]))
|
||||
return None
|
|
@ -0,0 +1,95 @@
|
|||
# -*-python-*-
|
||||
import time
|
||||
from numpy import *
|
||||
|
||||
SCALAR = 'Scalar'
|
||||
VECTOR = 'Vector'
|
||||
WEATHER = 'Weather'
|
||||
DISCRETE = 'Discrete'
|
||||
YES = True
|
||||
NO = False
|
||||
|
||||
class VCParm:
|
||||
def splitTR(self, tr, inv):
|
||||
for btr in inv:
|
||||
if self._overlaps(btr, tr):
|
||||
if self._containsTR(btr, tr):
|
||||
return []
|
||||
else:
|
||||
splitlst = []
|
||||
if not self._contains(btr, tr[0]):
|
||||
splitlst = splitlst + self.splitTR((tr[0], btr[0]),
|
||||
inv)
|
||||
if not self._contains(btr, tr[1]):
|
||||
splitlst = splitlst + self.splitTR((btr[1], tr[1]),
|
||||
inv)
|
||||
return splitlst
|
||||
return [tr]
|
||||
|
||||
def tcmp(self, t1, t2):
|
||||
return cmp(t1[0], t2[0])
|
||||
|
||||
def getInventory(self, MaxT, MaxT_ISC):
|
||||
# all Fcst grids get included if they overlap an ISC grid
|
||||
# return list is sorted in ascending time
|
||||
|
||||
rval = []
|
||||
for tr in MaxT:
|
||||
lst = []
|
||||
for itr in MaxT_ISC:
|
||||
if self._overlaps(tr, itr):
|
||||
lst.append(itr)
|
||||
if len(lst):
|
||||
rval.append((tr, [tr], lst))
|
||||
|
||||
return rval
|
||||
|
||||
# returns the percentage of tr1 that overlaps tr2
|
||||
def poverlap(self, tr1, tr2):
|
||||
itr = self._intersect(tr1, tr2)
|
||||
return (itr[1] - itr[0]) / float(tr1[1] - tr1[0])
|
||||
|
||||
def calcGrid(self, MaxT, MaxT_ISC):
|
||||
# If getInventory() works right
|
||||
# we either get 0 or 1 MaxT grids.
|
||||
# And if 0 then only 1 MaxT_ISC
|
||||
if len(MaxT) == 0:
|
||||
return MaxT_ISC[0][1]
|
||||
rval = MaxT_ISC[0][1]
|
||||
for i in MaxT_ISC:
|
||||
rval = maximum(i[1], rval)
|
||||
return rval
|
||||
|
||||
def calcHistory(self, MaxT_ISC):
|
||||
rval = []
|
||||
for t in MaxT_ISC:
|
||||
for i in t[1]:
|
||||
rval.append(i)
|
||||
return rval
|
||||
|
||||
def getWEInfo(self):
|
||||
# For some reason, setting time dependent to YES
|
||||
# makes the GFE loose this ???
|
||||
|
||||
return (("MaxT", SCALAR,"F","Maximum Temperature",120.0, -60.0, 0, NO),
|
||||
("ISC", "V"), (3600, 3600, 0))
|
||||
|
||||
def _containsTR(self, tr1, tr2):
|
||||
if tr1 == tr2:
|
||||
return True
|
||||
return self._contains(tr1, tr2[0]) and self._contains(tr1, tr2[1])
|
||||
|
||||
def _contains(self, timerange, time):
|
||||
if timerange[1] - timerange[0]:
|
||||
return ((time >= timerange[0]) and (time < timerange[1]))
|
||||
return time == timerange[0]
|
||||
|
||||
def _overlaps(self, tr1, tr2):
|
||||
if self._contains(tr2, tr1[0]) or self._contains(tr1, tr2[0]):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _intersect(self, t1, t2):
|
||||
if self._overlaps(t1, t2):
|
||||
return (max(t1[0], t2[0]), min(t1[1], t2[1]))
|
||||
return None
|
|
@ -0,0 +1,94 @@
|
|||
# -*-python-*-
|
||||
import time
|
||||
from numpy import *
|
||||
|
||||
SCALAR = 'Scalar'
|
||||
VECTOR = 'Vector'
|
||||
WEATHER = 'Weather'
|
||||
DISCRETE = 'Discrete'
|
||||
YES = True
|
||||
NO = False
|
||||
|
||||
class VCParm:
|
||||
def splitTR(self, tr, inv):
|
||||
for btr in inv:
|
||||
if self._overlaps(btr, tr):
|
||||
if self._containsTR(btr, tr):
|
||||
return []
|
||||
else:
|
||||
splitlst = []
|
||||
if not self._contains(btr, tr[0]):
|
||||
splitlst = splitlst + self.splitTR((tr[0], btr[0]),
|
||||
inv)
|
||||
if not self._contains(btr, tr[1]):
|
||||
splitlst = splitlst + self.splitTR((btr[1], tr[1]),
|
||||
inv)
|
||||
return splitlst
|
||||
return [tr]
|
||||
|
||||
def tcmp(self, t1, t2):
|
||||
return cmp(t1[0], t2[0])
|
||||
|
||||
def getInventory(self, MinT, MinT_ISC):
|
||||
# all Fcst grids get included if they overlap an ISC grid
|
||||
# list is returned in ascending time
|
||||
rval = []
|
||||
for tr in MinT:
|
||||
lst = []
|
||||
for itr in MinT_ISC:
|
||||
if self._overlaps(tr, itr):
|
||||
lst.append(itr)
|
||||
if len(lst):
|
||||
rval.append((tr, [tr], lst))
|
||||
|
||||
return rval
|
||||
|
||||
# returns the percentage of tr1 that overlaps tr2
|
||||
def poverlap(self, tr1, tr2):
|
||||
itr = self._intersect(tr1, tr2)
|
||||
return (itr[1] - itr[0]) / float(tr1[1] - tr1[0])
|
||||
|
||||
def calcGrid(self, MinT, MinT_ISC):
|
||||
# If getInventory() works right
|
||||
# we either get 0 or 1 MinT grids.
|
||||
# And if 0 then only 1 MinT_ISC
|
||||
# [(intr, grid, mask), ...]
|
||||
if len(MinT) == 0:
|
||||
return MinT_ISC[0][1]
|
||||
#max value for this parm
|
||||
maxV = self.getWEInfo()[0][4]
|
||||
rval = where(MinT_ISC[0][2], MinT_ISC[0][1], maxV)
|
||||
for i in MinT_ISC:
|
||||
rval = where(i[2], minimum(i[1], rval), rval)
|
||||
return rval
|
||||
|
||||
def calcHistory(self, MinT_ISC):
|
||||
rval = []
|
||||
for t in MinT_ISC:
|
||||
for i in t[1]:
|
||||
rval.append(i)
|
||||
return rval
|
||||
|
||||
def getWEInfo(self):
|
||||
return (("MinT", SCALAR,"F","Minimum Temperature",120.0, -60.0, 0, NO),
|
||||
("ISC", "V"), (3600, 3600, 0))
|
||||
|
||||
def _containsTR(self, tr1, tr2):
|
||||
if tr1 == tr2:
|
||||
return True
|
||||
return self._contains(tr1, tr2[0]) and self._contains(tr1, tr2[1])
|
||||
|
||||
def _contains(self, timerange, time):
|
||||
if timerange[1] - timerange[0]:
|
||||
return ((time >= timerange[0]) and (time < timerange[1]))
|
||||
return time == timerange[0]
|
||||
|
||||
def _overlaps(self, tr1, tr2):
|
||||
if self._contains(tr2, tr1[0]) or self._contains(tr1, tr2[0]):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _intersect(self, t1, t2):
|
||||
if self._overlaps(t1, t2):
|
||||
return (max(t1[0], t2[0]), min(t1[1], t2[1]))
|
||||
return None
|
|
@ -0,0 +1,108 @@
|
|||
# -*-python-*-
|
||||
import time
|
||||
from numpy import *
|
||||
|
||||
SCALAR = 'Scalar'
|
||||
VECTOR = 'Vector'
|
||||
WEATHER = 'Weather'
|
||||
DISCRETE = 'Discrete'
|
||||
YES = True
|
||||
NO = False
|
||||
|
||||
class VCParm:
|
||||
def splitTR(self, tr, inv):
|
||||
for btr in inv:
|
||||
if self._overlaps(btr, tr):
|
||||
if self._containsTR(btr, tr):
|
||||
return []
|
||||
else:
|
||||
splitlst = []
|
||||
if not self._contains(btr, tr[0]):
|
||||
splitlst = splitlst + self.splitTR((tr[0], btr[0]),
|
||||
inv)
|
||||
if not self._contains(btr, tr[1]):
|
||||
splitlst = splitlst + self.splitTR((btr[1], tr[1]),
|
||||
inv)
|
||||
return splitlst
|
||||
return [tr]
|
||||
|
||||
def tcmp(self, t1, t2):
|
||||
return cmp(t1[0], t2[0])
|
||||
|
||||
def getInventory(self, PoP, PoP_ISC):
|
||||
# all Fcst grids get included if they overlap an ISC grid
|
||||
# list is sorted in ascending time.
|
||||
rval = []
|
||||
for tr in PoP:
|
||||
lst = []
|
||||
for itr in PoP_ISC:
|
||||
if self._overlaps(tr, itr):
|
||||
lst.append(itr)
|
||||
if len(lst):
|
||||
rval.append((tr, [tr], lst))
|
||||
|
||||
# Any ISC grid which does not overlap
|
||||
# or any portion that does not overlap
|
||||
# goes in as well
|
||||
for tr in PoP_ISC:
|
||||
for ntr in self.splitTR(tr, PoP):
|
||||
for ftr in PoP:
|
||||
if self._overlaps(ntr, ftr):
|
||||
break
|
||||
else:
|
||||
rval.append((ntr, [], [tr]))
|
||||
|
||||
#sort the times by starting times
|
||||
rval.sort(lambda x,y:cmp(x[0][0], y[0][0]))
|
||||
return rval
|
||||
|
||||
|
||||
# returns the percentage of tr1 that overlaps tr2
|
||||
def poverlap(self, tr1, tr2):
|
||||
itr = self._intersect(tr1, tr2)
|
||||
return (itr[1] - itr[0]) / float(tr1[1] - tr1[0])
|
||||
|
||||
def calcGrid(self, PoP, PoP_ISC):
|
||||
# If getInventory() works right
|
||||
# we either get 0 or 1 PoP grids.
|
||||
# And if 0 then only 1 PoP_ISC
|
||||
if len(PoP) == 0:
|
||||
return PoP_ISC[0][1]
|
||||
rval = PoP_ISC[0][1]
|
||||
for i in PoP_ISC:
|
||||
rval = maximum(i[1], rval)
|
||||
return rval
|
||||
|
||||
def calcHistory(self, PoP_ISC):
|
||||
rval = []
|
||||
for t in PoP_ISC:
|
||||
for i in t[1]:
|
||||
rval.append(i)
|
||||
return rval
|
||||
|
||||
def getWEInfo(self):
|
||||
# For some reason, setting time dependent to YES
|
||||
# makes the GFE loose this ???
|
||||
|
||||
return (("PoP", SCALAR, "%", "Prob of Precip", 100.0, 0.0, 0, NO),
|
||||
("ISC", "V"), (3600, 3600, 0))
|
||||
|
||||
def _containsTR(self, tr1, tr2):
|
||||
if tr1 == tr2:
|
||||
return True
|
||||
return self._contains(tr1, tr2[0]) and self._contains(tr1, tr2[1])
|
||||
|
||||
def _contains(self, timerange, time):
|
||||
if timerange[1] - timerange[0]:
|
||||
return ((time >= timerange[0]) and (time < timerange[1]))
|
||||
return time == timerange[0]
|
||||
|
||||
def _overlaps(self, tr1, tr2):
|
||||
if self._contains(tr2, tr1[0]) or self._contains(tr1, tr2[0]):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _intersect(self, t1, t2):
|
||||
if self._overlaps(t1, t2):
|
||||
return (max(t1[0], t2[0]), min(t1[1], t2[1]))
|
||||
return None
|
|
@ -0,0 +1,59 @@
|
|||
##
|
||||
# This software was developed and / or modified by Raytheon Company,
|
||||
# pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
#
|
||||
# U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
# This software product contains export-restricted data whose
|
||||
# export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
# to non-U.S. persons whether in the United States or abroad requires
|
||||
# an export license or other authorization.
|
||||
#
|
||||
# Contractor Name: Raytheon Company
|
||||
# Contractor Address: 6825 Pine Street, Suite 340
|
||||
# Mail Stop B8
|
||||
# Omaha, NE 68106
|
||||
# 402.291.0100
|
||||
#
|
||||
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
# further licensing information.
|
||||
##
|
||||
|
||||
#
|
||||
# Globally import and sets up instances of the smart tool scripts.
|
||||
# Designed to be used as a master controller for inspecting and running
|
||||
# smart tools from Java.
|
||||
#
|
||||
#
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 10/21/08 njensen Initial Creation.
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
import numpy
|
||||
import sys
|
||||
|
||||
import JUtil
|
||||
import MasterInterface
|
||||
|
||||
|
||||
class VCModuleInterface(MasterInterface.MasterInterface):
|
||||
|
||||
def __init__(self, scriptPath):
|
||||
MasterInterface.MasterInterface.__init__(self)
|
||||
self.importModules(scriptPath)
|
||||
|
||||
def getMethodArgNames(self, moduleName, className, methodName):
|
||||
from java.util import ArrayList
|
||||
args = self.getMethodArgs(moduleName, className, methodName)
|
||||
argList = ArrayList()
|
||||
for a in args:
|
||||
argList.add(a)
|
||||
return argList
|
||||
|
||||
def getMethodArgs(self, moduleName, className, methodName):
|
||||
return MasterInterface.MasterInterface.getMethodArgs(self, moduleName, className, methodName)[1:]
|
Loading…
Add table
Reference in a new issue