GFE perspective fixes and improvements for 16.1.5
This commit is contained in:
parent
18954d306b
commit
7eed48e4ac
14 changed files with 63 additions and 704 deletions
|
@ -200,7 +200,7 @@ following</tt>
|
|||
<br>
|
||||
<tt> File "<string>", line 1</tt>
|
||||
<br>
|
||||
<tt> from serverConfig 8mport *</tt>
|
||||
<tt> from serverConfig import *</tt>
|
||||
<br>
|
||||
<tt>
|
||||
^</tt>
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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:]
|
|
@ -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>
|
||||
|
|
|
@ -340,7 +340,7 @@
|
|||
</info>
|
||||
<info>
|
||||
<title>DGEX</title>
|
||||
<datasetId>DGEX185</datasetId>
|
||||
<datasetId>DGEX</datasetId>
|
||||
<dt>6</dt>
|
||||
</info>
|
||||
<info>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue