GFE perspective fixes and improvements for 16.1.5

This commit is contained in:
mjames-upc 2016-05-04 15:26:31 -05:00
parent 18954d306b
commit 7eed48e4ac
14 changed files with 63 additions and 704 deletions

View file

@ -200,7 +200,7 @@ following</tt>
<br>
<tt>&nbsp; File "&lt;string&gt;", line 1</tt>
<br>
<tt>&nbsp;&nbsp;&nbsp;&nbsp; from serverConfig 8mport *</tt>
<tt>&nbsp;&nbsp;&nbsp;&nbsp; from serverConfig import *</tt>
<br>
<tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
^</tt>

View file

@ -404,32 +404,32 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
*/
private void createTypesComp(Composite parent) {
GridData data = new GridData(100, 200);
Composite comp = new Composite(parent, SWT.BORDER);
comp.setLayoutData(data);
comp.setLayout(new GridLayout());
Label lab = new Label(comp, SWT.NONE);
lab.setText("Types");
data = new GridData();
data.horizontalAlignment = SWT.CENTER;
lab.setLayoutData(data);
//GridData data = new GridData(100, 200);
//Composite comp = new Composite(parent, SWT.BORDER);
//comp.setLayoutData(data);
//comp.setLayout(new GridLayout());
//Label lab = new Label(comp, SWT.NONE);
//lab.setText("Types");
//data = new GridData();
//data.horizontalAlignment = SWT.CENTER;
//lab.setLayoutData(data);
for (final WEBrowserTypeRecord entry : typeEntries) {
final Button b = new Button(comp, SWT.RADIO | SWT.BORDER);
b.setText(entry.getType());
b.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (b.getSelection()) {
selectedType = entry;
setupListsForCurrentType();
}
}
});
// final Button b = new Button(comp, SWT.RADIO | SWT.BORDER);
// b.setText(entry.getType());
// b.addSelectionListener(new SelectionAdapter() {
// @Override
// public void widgetSelected(SelectionEvent e) {
// if (b.getSelection()) {
// selectedType = entry;
// setupListsForCurrentType();
// }
// }
// });
if (typeEntries.indexOf(entry) == 0) {
if (typeEntries.indexOf(entry) == 1) {
selectedType = entry;
b.setSelection(true);
//b.setSelection(true);
}
}
}
@ -828,16 +828,13 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
* Creates the source composite.
*/
private void createSourceComp(Composite parent) {
Composite comp = new Composite(parent, SWT.BORDER);
comp.setLayout(new GridLayout(1, true));
GridData data = new GridData(140, 200);
GridData data = new GridData(170, 200);
comp.setLayoutData(data);
Label lab1 = new Label(comp, SWT.NONE);
lab1.setText("Sources");
data = new GridData();
data.horizontalAlignment = SWT.LEFT;
lab1.setLayoutData(data);
sourceMenu = new Menu(getParentShell(), SWT.POP_UP);
sourceToolBar = new ToolBar(comp, SWT.NONE);
@ -880,16 +877,12 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
* Creates the field composite.
*/
private void createFieldsComp(Composite parent) {
GridData data = new GridData(140, 200);
GridData data = new GridData(170, 200);
Composite comp = new Composite(parent, SWT.BORDER);
comp.setLayout(new GridLayout());
comp.setLayoutData(data);
Label lab = new Label(comp, SWT.NONE);
lab.setText("Fields");
data = new GridData();
data.horizontalAlignment = SWT.CENTER;
lab.setLayoutData(data);
fieldsMenu = new Menu(getParentShell(), SWT.POP_UP);
fieldsToolBar = new ToolBar(comp, SWT.NONE);
@ -920,18 +913,14 @@ public class WeatherElementBrowserDialog extends CaveJFACEDialog {
* Creates the plans composite.
*/
private void createPlanesComp(Composite parent) {
GridData data = new GridData(180, 200);
GridData data = new GridData(220, 200);
Composite comp = new Composite(parent, SWT.BORDER);
comp.setLayout(new GridLayout(2, false));
comp.setLayoutData(data);
Label lab = new Label(comp, SWT.NONE);
lab.setText("Planes");
data = new GridData();
data.horizontalAlignment = SWT.CENTER;
data.horizontalSpan = 2;
lab.setLayoutData(data);
presMenu = new Menu(getParentShell(), SWT.POP_UP);
miscMenu = new Menu(getParentShell(), SWT.POP_UP);

View file

@ -57,10 +57,8 @@ public class GFEPerspective implements IPerspectiveFactory {
*/
public void createInitialLayout(IPageLayout layout) {
IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
// Get the editor area.
String editorArea = layout.getEditorArea();
layout.setFixed(false);
int width = prefs.getInt("TimeScale_horizSize");
@ -92,7 +90,8 @@ public class GFEPerspective implements IPerspectiveFactory {
layout.addStandaloneView(
"com.raytheon.viz.gfe.GridManagerView:GridManager", true,
relationship, ratio, editorArea);
IPageLayout.RIGHT,0.65f, editorArea);
IViewLayout viewLayout = layout
.getViewLayout("com.raytheon.viz.gfe.GridManagerView:GridManager");
if (viewLayout != null) {

View file

@ -25,6 +25,4 @@
fileName="menus/obs/baseLocalData.xml"/>
<include installTo="menu:obs?after=MARITIME"
fileName="menus/obs/baseMaritime.xml"/>
<include installTo="menu:obs?before=CollectionDissemination"
fileName="menus/obs/baseMPing.xml"/>
</menuContributionFile>
</menuContributionFile>

View file

@ -1,107 +0,0 @@
# -*-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

View file

@ -1,108 +0,0 @@
# -*-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

View file

@ -1,95 +0,0 @@
# -*-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

View file

@ -1,94 +0,0 @@
# -*-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

View file

@ -1,108 +0,0 @@
# -*-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

View file

@ -1,59 +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 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:]

View file

@ -91,8 +91,8 @@
<alias base="HurWind250">TPCtpm250</alias>
<alias base="NICICE">nic218</alias>
<alias base="AK-NICICE">nic242</alias>
<alias base="DGEX185">dgex185</alias>
<alias base="AK-DGEX">dgex186</alias>
<alias base="DGEX">dgex</alias>
<alias base="AK-DGEX">dgexAK</alias>
<alias base="GFS40">gfs212</alias>
<alias base="AK-GFS">gfs160</alias>
<alias base="GFS-EPAC40">gfs254</alias>

View file

@ -340,7 +340,7 @@
</info>
<info>
<title>DGEX</title>
<datasetId>DGEX185</datasetId>
<datasetId>DGEX</datasetId>
<dt>6</dt>
</info>
<info>

View file

@ -19,25 +19,9 @@
further_licensing_information.
-->
<aliasList namespace="d2d-title">
<alias base="WaveWatch-AK">AKWAVE</alias>
<alias base="AUTOSPE">SPE</alias>
<alias base="AVN203">GFS190</alias>
<alias base="GFS80">GFS80</alias>
<alias base="Hawaii-GFS80">GFS75</alias>
<alias base="AVN37">GFSGbl</alias>
<alias base="AVN38">GFSGbl</alias>
<alias base="AVN39">GFSGbl</alias>
<alias base="AVN40">GFSGbl</alias>
<alias base="AVN41">GFSGbl</alias>
<alias base="AVN42">GFSGbl</alias>
<alias base="AVN43">GFSGbl</alias>
<alias base="AVN44">GFSGbl</alias>
<alias base="AVN">GFS180</alias>
<alias base="AVN-NorthernHemisphere">GFSGbl</alias>
<alias base="BHPE">BiasHPE</alias>
<alias base="CPCoutlook211">CPCoutlook-Long</alias>
<alias base="DGEX185">DGEX</alias>
<alias base="AK-DGEX">DGEX</alias>
<alias base="ECMF10">ECMWF-LowRes</alias>
<alias base="ECMF11">ECMWF-LowRes</alias>
<alias base="ECMF12">ECMWF-LowRes</alias>
@ -52,7 +36,6 @@
<alias base="ECMF9">ECMWF-LowRes</alias>
<alias base="ECMF-MODEL0">ECMWF-MODEL0</alias>
<alias base="ECMF-Global">ECMWF-LowRes</alias>
<alias base="WaveWatch-ENP">ENPwave</alias>
<alias base="ENSEMBLE37">GFSensemble</alias>
<alias base="ENSEMBLE38">GFSensemble</alias>
<alias base="ENSEMBLE39">GFSensemble</alias>
@ -62,64 +45,25 @@
<alias base="ENSEMBLE43">GFSensemble</alias>
<alias base="ENSEMBLE44">GFSensemble</alias>
<alias base="ENSEMBLE">GFSensemble</alias>
<alias base="AK-NAM95">NAM95</alias>
<alias base="NAM40">NAMWX</alias>
<alias base="NAM12">NAM12</alias>
<alias base="NAM12">NAM12</alias>
<alias base="AK-NAM11">AK-NAM12</alias>
<alias base="EtaBufr">NAM Bufr</alias>
<alias base="ETA">NAM80</alias>
<alias base="AK-GFS">AK-GFS</alias>
<alias base="PR-GFS">SJU-GFS</alias>
<alias base="GFS199">Guam-GFSDNG</alias>
<alias base="GFS-NH">GFS360</alias>
<alias base="GFS40">GFS40</alias>
<alias base="GFS229">GFS1degGbl</alias>
<alias base="GFS95">GFS90</alias>
<alias base="GFS-EPAC40">PR-GFS</alias>
<alias base="GFS229">GFS1degGbl</alias>
<alias base="GfsBufr">GFSBufr</alias>
<alias base="GFSLAMP">GFSLAMP-Stn</alias>
<alias base="GFSLAMPTstorm">GFSLAMP-Grid</alias>
<alias base="WaveWatch">GWW</alias>
<alias base="HPCqpfNDFD">HPC</alias>
<alias base="HurWind175">GuamHurWind</alias>
<alias base="HurWind226">TPC-HurWind</alias>
<alias base="HurWind250">HawHurWind</alias>
<alias base="MANSPE">SPE</alias>
<alias base="NAM40">NAM40</alias>
<alias base="NAM20">NAM20</alias>
<alias base="AK-NAM45">AK-NAM45</alias>
<alias base="AK-NAM22">AK-NAM22</alias>
<alias base="PR-NAM">PR-NAM12</alias>
<alias base="MOSGuide-AK">AK-GriddedMOS</alias>
<alias base="MOSGuide">GriddedMOS</alias>
<alias base="MPE-Local">MPE</alias>
<alias base="MPE-Mosaic">MPE</alias>
<alias base="MRF203">gfs190</alias>
<alias base="MRF204">GFS150</alias>
<alias base="MRF205">GFS150</alias>
<alias base="MRF21">gfsLR21</alias>
<alias base="MRF22">gfsLR22</alias>
<alias base="MRF23">gfsLR23</alias>
<alias base="MRF24">gfsLR24</alias>
<alias base="MRF25">gfsLR25</alias>
<alias base="MRF26">gfsLR26</alias>
<alias base="MRF">gfsLR</alias>
<alias base="mrfNH">gfsLR</alias>
<alias base="NGM202">NGM180</alias>
<alias base="NGM207">NGM95</alias>
<alias base="NGM213">NGM90</alias>
<alias base="NGM">NGM80</alias>
<alias base="OPCWave180">OPCWave-W-ATL</alias>
<alias base="OPCWave181">OPCWave-NE-PAC</alias>
<alias base="OPCWave182">OPCWave-TE-PAC</alias>
<alias base="RTGSSTHR">RTG-SST-HR-Analysis</alias>
<alias base="RTGSST">RTG-SST-Analysis</alias>
<alias base="RAP13">RAP13</alias>
<alias base="RAP40">RAP40</alias>
<alias base="SREF212">SREF</alias>
<alias base="AK-SREF45">AK-SREF</alias>
<alias base="SREF-EPac">PR-SREF</alias>
<alias base="UKMET37">UKMET</alias>
<alias base="UKMET38">UKMET</alias>
<alias base="UKMET39">UKMET</alias>

View file

@ -2655,13 +2655,13 @@ mb | 1 | 0.0 | 4 |2:i4|1:i4|LH|8000F0FF| | 0 | 4
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, GH, 850MB > 500MB
<!-- * DGEX, GH, 850MB > 500MB
dam | 0.1 | 0.0 | 4 | i4 | X |LH|8000F0FF|,,,80 | 0 | 3
-->
<styleRule>
<paramLevelMatches>
<parameter>GH</parameter>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<rangeLevel units="MB">
<upper>850</upper>
<lower>500</lower>
@ -2675,12 +2675,12 @@ dam | 0.1 | 0.0 | 4 | i4 | X |LH|8000F0FF|,,,80 | 0 | 3
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, GH, 250MB
<!-- * DGEX, GH, 250MB
dam | 0.1 | 0.0 | 4 | i5 | X |LH|8000F0FF|,,,80 | 0 | 6
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>GH</parameter>
<rangeLevel units="MB">
<upper>250</upper>
@ -2695,12 +2695,12 @@ dam | 0.1 | 0.0 | 4 | i5 | X |LH|8000F0FF|,,,80 | 0 | 6
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, msl-P
<!-- * DGEX, msl-P
mb | 1 | 0.0 | 4 |2:i4|1:i4|LH|8000F0FF|,,,80 | 0 | 4
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>PMSL</parameter>
</paramLevelMatches>
<contourStyle>
@ -2714,7 +2714,7 @@ mb | 1 | 0.0 | 4 |2:i4|1:i4|LH|8000F0FF|,,,80 | 0 | 4
</styleRule>
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>msl-P</parameter>
</paramLevelMatches>
<contourStyle>
@ -2727,12 +2727,12 @@ mb | 1 | 0.0 | 4 |2:i4|1:i4|LH|8000F0FF|,,,80 | 0 | 4
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, T, 850MB > 500MB
<!-- * DGEX, T, 850MB > 500MB
C | 1 |-273.15| 4 | | |..|8000F0FF|,,,80 | 0 | 2
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>T</parameter>
<rangeLevel units="MB">
<upper>850</upper>
@ -2746,12 +2746,12 @@ C | 1 |-273.15| 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, RH, 850MB > 500MB
<!-- * DGEX, RH, 850MB > 500MB
% | 1.0 | 0.0 | 4 | | |..|8000F0FF|,,,80 | 0 | 10
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>RH</parameter>
<rangeLevel units="MB">
<upper>850</upper>
@ -2766,12 +2766,12 @@ C | 1 |-273.15| 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, PVV
<!-- * DGEX, PVV
-ubar/s | -10 | 0.0 | 4 | | |..|8000F0FF|m,,,80 | 11 | 1 2 3 4 5 6 8 10 12 15 20
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>PVV</parameter>
</paramLevelMatches>
<contourStyle>
@ -2782,12 +2782,12 @@ C | 1 |-273.15| 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, SLI
<!-- * DGEX, SLI
C | 1 | 0 | 4 | | |..|8000F0FF|,,,80 | 0 | 2
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>SLI</parameter>
</paramLevelMatches>
<contourStyle>
@ -2799,12 +2799,12 @@ C | 1 | 0 | 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, AV
<!-- * DGEX, AV
/1e5s | 1e5 | 0.0 | 4 | | X |NX|8000F0FF|,,,80 | 0 | 2
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>AV</parameter>
</paramLevelMatches>
<contourStyle>
@ -2815,13 +2815,13 @@ C | 1 | 0 | 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, wDiv
<!-- * DGEX, wDiv
/1e5s | 1e5 | 0.0 | 8 | | |..|8000F0FF|,,,80|11|1 2 3 4 5 6 8 10 12 15 20
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>wDiv</parameter>
</paramLevelMatches>
<contourStyle>
@ -2832,12 +2832,12 @@ C | 1 | 0 | 4 | | |..|8000F0FF|,,,80 | 0 | 2
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, VAdv, dVAdv, PIVA
<!-- * DGEX, VAdv, dVAdv, PIVA
/1e9s | 1e9 | 0.0 | 4 | | |..|8000F0FF|,,,80| 5 | 1 5 10 20 50
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>VAdv</parameter>
<parameter>dVAdv</parameter>
<parameter>PIVA</parameter>
@ -3031,12 +3031,12 @@ kt|1.944| 0.0 | 4 | | |..|8000F0FF| | 0 | 10
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, TAdv
<!-- * DGEX, TAdv
C/12hr |43200| 0.0 | 4 | | | |8000F0FF|,,,80| 5 | 1 5 10 20 50
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>TAdv</parameter>
</paramLevelMatches>
<contourStyle>
@ -3047,12 +3047,12 @@ C/12hr |43200| 0.0 | 4 | | | |8000F0FF|,,,80| 5 | 1 5 10 20 50
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, MAdv
<!-- * DGEX, MAdv
g/Kg/12hr| 43200| 0.0 | 4 | | |..|8000F0FF|,,,80| 8 | 1 2 5 10 20 50 100 200
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>MAdv</parameter>
</paramLevelMatches>
<contourStyle>
@ -3062,12 +3062,12 @@ g/Kg/12hr| 43200| 0.0 | 4 | | |..|8000F0FF|,,,80| 8 | 1 2 5 10 20 50 100 200
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, PoTA, EPTA
<!-- * DGEX, PoTA, EPTA
C/12hr |43200| 0.0 | 4 | | | |8000F0FF|,,,80| 5 | 1 5 10 20 50
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>PoTA</parameter>
<parameter>EPTA</parameter>
</paramLevelMatches>
@ -3078,12 +3078,12 @@ C/12hr |43200| 0.0 | 4 | | | |8000F0FF|,,,80| 5 | 1 5 10 20 50
</contourLabeling>
</contourStyle>
</styleRule>
<!-- * DGEX185, MCon
<!-- * DGEX, MCon
g/Kg/12hr|43200| 0.0 | 4 | | | |8000F0FF|,,,80| 8 | 1 2 5 10 20 50 100 200
-->
<styleRule>
<paramLevelMatches>
<creatingEntity>DGEX185</creatingEntity>
<creatingEntity>DGEX</creatingEntity>
<parameter>MCon</parameter>
</paramLevelMatches>
<contourStyle>