Merge tag 'OB_16.2.2-16' into omaha_16.2.2

16.2.2-16


Former-commit-id: b07d1c4eb41ee65ded32a0c6ee5b4ce9e5001ed8
This commit is contained in:
Steve Harris 2016-06-16 13:07:22 -05:00
commit 06b430a2c7
64 changed files with 846 additions and 381 deletions

View file

@ -88,7 +88,9 @@ import com.raytheon.uf.viz.spellchecker.jobs.SpellCheckJob;
* 08/31/2015 #4781 dgilling Improve handling of proper nouns in all
* caps mode, move override dictionary to
* SITE level.
*
* 05/25/2016 DR16930 MPorricelli Added suggestionsBlackList to spellCheckJob
* for flagging of words that are in
* inappropriateWords.txt blacklist
* </pre>
*
* @author lvenable
@ -257,6 +259,7 @@ public class SpellCheckDlg extends Dialog implements ISpellingProblemCollector {
spellCheckJob.setCollector(this);
suggestionsBlacklist = getSuggestionsBlacklist();
spellCheckJob.setBlacklist(suggestionsBlacklist);
}
private Collection<String> getSuggestionsBlacklist() {

View file

@ -23,7 +23,15 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@ -56,6 +64,8 @@ import com.raytheon.uf.viz.spellchecker.Activator;
* 01Mar2010 4765 MW Fegan Moved from GFE plug-in.
* 18Oct2010 11237 rferrel Created readLine in order to compute
* offsets for start of line correctly.
* 25May2016 DR16930 MPorricelli Added flagging of words that are in
* inappropriateWords.txt blacklist
* </pre>
*
* @author wldougher
@ -92,6 +102,8 @@ public class SpellCheckJob extends Job implements ISpellingProblemCollector {
private String line;
private Collection<String> blackList;
private String vtecRegex = new String(
"/[OTEX]\\.([A-Z]{3})\\.([A-Z]{4})\\.([A-Z]{2})\\."
+ "([WAYSOFN])\\.([0-9]{4})\\.([0-9]{6})T([0-9]{4})Z-"
@ -220,8 +232,55 @@ public class SpellCheckJob extends Job implements ISpellingProblemCollector {
synchronized (this) {
service.check(document, regions, context, this, monitor);
}
// Look in this line for words that are in
// inappropriateWords.txt
// If one is found and it has not already been flagged by the
// Eclipse spell check above, add it to problems
Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
String currentWord = matcher.group();
if (blackList != null
&& blackList.contains(currentWord.toUpperCase())) {
int length = currentWord.length();
int offset = matcher.start();
SpellingProblem blacklistProblem = new AnotherSpellingProblem(
offset, length, currentWord);
if (problems.isEmpty())
problems.add(blacklistProblem);
else {
Boolean problemAlreadyFlagged = false;
Iterator<SpellingProblem> probIter = problems
.iterator();
while (probIter.hasNext()) {
if (probIter.next().getOffset() == blacklistProblem
.getOffset()) {
problemAlreadyFlagged = true;
break;
}
}
if (!problemAlreadyFlagged)
problems.add(blacklistProblem);
}
}
}
}
}
// Sort the problems by position (offset) in this line of text
List<SpellingProblem> problemsList;
problemsList = new ArrayList<SpellingProblem>();
if (!problems.isEmpty()) {
problemsList.addAll(problems);
Collections.sort(problemsList, new Comparator<SpellingProblem>() {
@Override
public int compare(SpellingProblem sp1, SpellingProblem sp2) {
return Integer.valueOf(sp1.getOffset()).compareTo(
Integer.valueOf(sp2.getOffset()));
}
});
problems.clear();
problems.addAll(problemsList);
}
if (problems.size() > 0) {
SpellingProblem lineProblem = problems.pollFirst();
@ -327,6 +386,12 @@ public class SpellCheckJob extends Job implements ISpellingProblemCollector {
this.collector = collector;
}
}
public void setBlacklist(Collection<String> suggestionsBlacklist) {
synchronized (this) {
this.blackList = suggestionsBlacklist;
}
}
}
/**
@ -388,3 +453,49 @@ class RevisedProblem extends SpellingProblem {
return lineProblem.getProposals();
}
}
class AnotherSpellingProblem extends SpellingProblem {
int offset;
int length;
String message;
AnotherSpellingProblem(int offSet, int wordLength, String word) {
super();
this.offset = offSet;
this.length = wordLength;
this.message = "The word '" + word + "' is not correctly spelled";
}
@Override
public int getOffset() {
return this.offset;
}
public void setOffset(int offSet) {
this.offset = offSet;
}
@Override
public int getLength() {
return this.length;
}
public void setLength(int wordLength) {
this.length = wordLength;
}
@Override
public String getMessage() {
return this.message;
}
public void setMessage(String word) {
this.message = "The word '" + word + "' is not correctly spelled";
}
@Override
public ICompletionProposal[] getProposals() {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -28,7 +28,7 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# Jan 16, 2015 4006 njensen create _getUniqueKeys() mask with dtype bool
#
# 06/08/16 19096 ryu Change mask to boolean data type
#
# ----------------------------------------------------------------------------
@ -243,8 +243,7 @@ class HazardUtils(SmartScript.SmartScript):
# returns a Numeric mask where each zone in zoneList is set to 1
def _makeMask(self, zoneList):
gridSize = self.getGridShape()
mask = numpy.zeros(gridSize, dtype=numpy.int8)
mask = self.empty(dtype=numpy.bool)
eaList = self.editAreaList()
for z in zoneList:
if z in eaList:

View file

@ -80,6 +80,8 @@
# Jan 28, 2016 5129 dgilling Support changes to IFPClient.
# Feb 22, 2016 5374 randerso Added support for sendWFOMessage
# Apr 05, 2016 5539 randerso Added exception when attempting create more than 256 Wx keys
# 05/06/2016 18967 ryu Fix issue of contours plotted over ProposedWatches grid
# when ViewWCL is run.
#
########################################################################
import types, string, time, sys
@ -1720,6 +1722,7 @@ class SmartScript(BaseTool.BaseTool):
fitter = FitToData(self.__dataMgr, parm)
fitter.fitToData()
spatialMgr.activateParm(parm)
spatialMgr.makeVisible(parm, True, True)
spatialMgr.setSpatialEditorTime(timeRange.startTime().javaDate())

View file

@ -386,6 +386,7 @@ import com.raytheon.viz.ui.simulatedtime.SimulatedTimeOperations;
* specific checks that need it.
* Mar 17, 2016 RM 18727 D. Friedman Fix use of verification listener when entering and exiting editor.
* Apr 15, 2016 RM 18870 D. Friedman Replace commas with ellipses only at start of edit and then word-wrap.
* Jun 14, 2016 RM 17614 mgamazaychikov Fix loading of product on exit from edit mode.
*
* </pre>
*
@ -1422,6 +1423,11 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
private static final String PARAGRAPH_PADDING_PATTERN_FILENAME = "textws/gui/ParagraphPaddingPattern.txt";
// derived from /data/fxa/nationalData/textQC.config
private static final List<String> updateHeaderTimesPils = Arrays.asList(
"EWW", "FFS", "FFW", "FLS", "FLW", "MWS", "NOW", "SMW", "SPS",
"SVR", "SVS", "TOR");
/**
* Constructor with additional cave style rules
*
@ -4160,6 +4166,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* Enter the text editor mode.
*/
private void enterEditor() {
// Reset the saved
saved = false;
if (!validateTime()) {
return;
}
@ -4375,9 +4383,12 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
searchReplaceDlg.setEditMode(inEditMode);
}
// Only set text to originalText for unsaved products
if (!saved) {
if (originalText != null) {
textEditor.setText(originalText);
}
}
markUneditableText(textEditor);
@ -5137,14 +5148,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
statusHandler.handle(Priority.INFO,
"Will NOT increment ETN for this product.");
}
/*
*
* The text product may have had it's VTEC, WMO, and MND time
* modified in saveEditedProduct as well as having it's ETN
* updated. Make sure these changes are reflected in the
* text editor. DR17614
*/
updateTextEditor(copyUpdatedProduct(prod.getProduct(), body));
// Update editor so the proper send times are displayed.
textEditor.setText(prod.getProduct());
}
String product = prod.getProduct();
@ -5181,9 +5186,11 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
.isEmpty()) {
inEditMode = false;
}
String practiceProd = TextDisplayModel.getInstance().getProduct(
token);
textEditor.setText(practiceProd);
SendPracticeProductRequest req = new SendPracticeProductRequest();
req.setProductText(TextDisplayModel.getInstance().getProduct(
token));
req.setProductText(practiceProd);
req.setNotifyGFE(true);
req.setDrtString(new SimpleDateFormat("yyyyMMdd_HHmm")
.format(SimulatedTime.getSystemTime().getTime()));
@ -5280,30 +5287,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
return req;
}
private static String copyUpdatedProduct(String productString, String bodyString) {
/* The productString has already been updated before this function was
* called, the purpose here is to remove an extraneous header that is
* added. In the future, this function may need to perform updates on the
* text added to the text editor but currently it only needs to remove
* the header.
*/
String[] bodyStrings = bodyString.split("\n");
String[] productStrings = productString.split("\n");
/* The difference between the bodyStrings and the productStrings
* is a header. We begin by coping from the end of the header so
* that it is effectively removed from the final String
*/
int textLinesDifference = productStrings.length - bodyStrings.length;
StringBuilder updatedBody = new StringBuilder();
for (int i = textLinesDifference; i < productStrings.length; ++i) {
updatedBody.append(productStrings[i]).append("\n");
}
return updatedBody.toString();
}
/**
* Recreates the original message by combining the header and the body from
* the edit windows.
@ -5438,15 +5421,13 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
} else {
productText = replaceDDHHMM(productText, currentDate);
}
VtecObject vtecObj = VtecUtil.parseMessage(productText);
if (warnGenFlag) {
/*
* DR14613 - string currectDate is derived from Date now
* ensuring the same time in WMO heading and in the MND
* heading.
*/
productText = updateVtecTimes(productText, vtecObj, now);
// Sync VTEC and MND header times with the header time for certain products
if (updateHeaderTimesPils.contains(storedProduct.getNnnid())) {
productText = updateHeaderTimes(productText, now);
VtecObject vtecObj = VtecUtil.parseMessage(productText);
if (vtecObj != null) {
productText = updateVtecTimes(productText, vtecObj, now);
}
// Update editor so the proper send times are displayed.
String[] b = productText.split("\n");
StringBuilder body = new StringBuilder();
@ -6187,6 +6168,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* @param isObsUpdated
*/
public void executeCommand(ICommand command, final boolean isObsUpdated) {
// Reset the saved
saved = false;
if (isDisposed()) {
return;
}

View file

@ -20,12 +20,22 @@
package com.raytheon.viz.warngen.gis;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.Validate;
@ -51,9 +61,17 @@ import com.raytheon.uf.common.status.PerformanceStatus;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.localization.LocalizationManager;
import com.raytheon.viz.warngen.gui.WarngenLayer;
import com.raytheon.viz.warngen.util.Abbreviation;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryCollection;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.Polygonal;
import com.vividsolutions.jts.geom.TopologyException;
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
//import com.raytheon.viz.warngen.gis.GisUtil.Direction;
@ -91,6 +109,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
* Mar 9, 2014 ASM #17190 D. Friedman Use fipsField and areaField for unique area ID.
* May 7, 2015 ASM #17438 D. Friedman Clean up debug and performance logging.
* Dec 15, 2015 ASM #17933 mgamazaychikov Update calculation of partOfParentRegion.
* May 12, 2016 ASM #18789 D. Friedman Improve findInsectingAreas performance.
* </pre>
*
* @author chammack
@ -113,6 +132,16 @@ public class Area {
.asList(new String[] { "PA", "MI", "PD", "UP", "BB", "ER", "EU",
"SR", "NR", "WU", "DS" });
private static final int DEFAULT_SUBDIVISION_TRESHOLD = 100;
private static final int SIMPLE_FEATURE_GEOM_COUNT_THRESHOLD = 2;
private static final int MAX_SUBDIVISION_DEPTH = 24;
private static final String SUBDIVISION_CONFIG_FILE = "subdiv.txt";
private static ExecutorService intersectionExecutor;
private PortionsUtil portionsUtil;
public Area(PortionsUtil portionsUtil) {
@ -327,7 +356,6 @@ public class Area {
Geometry warnPolygon, Geometry warnArea, String localizedSite,
WarngenLayer warngenLayer) throws VizException {
Map<String, Object> areasMap = new HashMap<String, Object>();
try {
Geometry precisionReducedArea = PolygonUtil
.reducePrecision(warnArea);
@ -340,26 +368,75 @@ public class Area {
String hatchedAreaSource = config.getHatchedAreaSource()
.getAreaSource();
for (AreaSourceConfiguration asc : config.getAreaSources()) {
if (asc.getType() == AreaType.INTERSECT) {
List<Geometry> geoms = new ArrayList<Geometry>();
boolean filtered = false;
for (GeospatialData f : warngenLayer.getGeodataFeatures(
asc.getAreaSource(), localizedSite)) {
boolean ignoreUserData = asc.getAreaSource().equals(
hatchedAreaSource) == false;
Geometry intersect = GeometryUtil.intersection(warnArea,
f.prepGeom, ignoreUserData);
filtered = false;
if (!intersect.isEmpty()) {
filtered = warngenLayer.filterArea(f, intersect, asc);
boolean subdivide = true;
try {
String propertiesText = WarnFileUtil.convertFileContentsToString(
SUBDIVISION_CONFIG_FILE, LocalizationManager.getInstance()
.getCurrentSite(), warngenLayer.getLocalizedSite());
if (propertiesText != null) {
Properties props = new Properties();
props.load(new StringReader(propertiesText));
subdivide = Boolean.parseBoolean(props.getProperty("enabled", "true"));
}
} catch (FileNotFoundException e) {
// ignore
} catch (IOException e) {
statusHandler.handle(Priority.WARN, "Could not load subdivision configuration file", e);
}
if (!subdivide) {
statusHandler.debug("findIntersectingAreas: subdivision is disabled");
}
if (intersect.isEmpty() == false && filtered == true) {
long t0 = System.currentTimeMillis();
for (AreaSourceConfiguration asc : config.getAreaSources()) {
boolean ignoreUserData = asc.getAreaSource().equals(
hatchedAreaSource) == false;
if (asc.getType() == AreaType.INTERSECT) {
List<Geometry> geoms = new ArrayList<Geometry>();
if (subdivide && ignoreUserData) {
synchronized (Area.class) {
if (intersectionExecutor == null) {
int nThreads = Math.max(2,
Runtime.getRuntime().availableProcessors() / 2);
ThreadPoolExecutor executor = new ThreadPoolExecutor(
nThreads, nThreads, 60, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>());
executor.allowCoreThreadTimeOut(true);
intersectionExecutor = executor;
}
}
Geometry waPoly = toPolygonal(warnArea);
GeospatialData[] features = warngenLayer.getGeodataFeatures(
asc.getAreaSource(), localizedSite);
List<Callable<Geometry>> callables = new ArrayList<>(features.length);
for (GeospatialData f : features) {
callables.add(new FeatureIntersection(waPoly, f));
}
try {
List<Future<Geometry>> futures = intersectionExecutor.invokeAll(callables);
int fi = 0;
for (Future<Geometry> future: futures) {
Geometry intersect = future.get();
if (intersect != null && !intersect.isEmpty()
&& warngenLayer.filterArea(features[fi], intersect, asc)) {
geoms.add(intersect);
}
fi++;
}
} catch (ExecutionException | InterruptedException e) {
throw new VizException("Error finding intersecting areas", e);
}
} else {
for (GeospatialData f : warngenLayer.getGeodataFeatures(
asc.getAreaSource(), localizedSite)) {
Geometry intersect = GeometryUtil.intersection(
warnArea, f.prepGeom, ignoreUserData);
if (!intersect.isEmpty()
&& warngenLayer.filterArea(f, intersect, asc)) {
geoms.add(intersect);
}
}
}
AffectedAreas[] affectedAreas = findAffectedAreas(asc,
@ -369,9 +446,198 @@ public class Area {
areasMap.put(asc.getVariable(), affectedAreas);
}
}
perfLog.logDuration("findIntersectingAreas", System.currentTimeMillis() - t0);
return areasMap;
}
/*
* Convert input to Polygon or Multipolygon. This will discard any
* non-polygon elements.
*/
private static Geometry toPolygonal(Geometry input) {
Geometry result;
if (input instanceof Polygonal) {
result = input;
} else {
List<Polygon> pa = new ArrayList<>(input.getNumGeometries() + 63);
toPolygonalInner(input, pa);
result = input.getFactory().createMultiPolygon(pa.toArray(new Polygon[pa.size()]));
}
return result;
}
private static void toPolygonalInner(Geometry input, List<Polygon> pa) {
int n = input.getNumGeometries();
for (int i = 0; i < n; ++i) {
Geometry g = input.getGeometryN(i);
if (g instanceof Polygon) {
pa.add((Polygon) g);
} else if (g instanceof GeometryCollection) {
toPolygonalInner(g, pa);
}
}
}
private static class FeatureIntersection implements Callable<Geometry> {
private Geometry waPoly;
private GeospatialData f;
public FeatureIntersection(Geometry waPoly, GeospatialData f) {
this.waPoly = waPoly;
this.f = f;
}
@Override
public Geometry call() throws Exception {
Geometry intersect = null;
if (f.prepGeom.intersects(waPoly)) {
try {
Geometry fgPoly = toPolygonal(f.geometry);
List<Geometry> out = new ArrayList<Geometry>(64);
subdivIntersect(waPoly, fgPoly, true, out);
intersect = waPoly.getFactory().createGeometryCollection(
out.toArray(new Geometry[out.size()]));
// subdivIntersect loses user data to set it again.
intersect.setUserData(f.geometry.getUserData());
} catch (TopologyException e) {
intersect = GeometryUtil.intersection(waPoly,
f.prepGeom, true);
}
}
return intersect;
}
}
private static void subdivIntersect(Geometry warnArea, Geometry featureGeom,
boolean orient, List<Geometry> out) {
Envelope env = warnArea.getEnvelopeInternal().intersection(
featureGeom.getEnvelopeInternal());
if (env.isNull()) {
return;
}
Coordinate[] c = new Coordinate[5];
c[0] = new Coordinate(env.getMinX(), env.getMinY());
c[1] = new Coordinate(env.getMaxX(), env.getMinY());
c[2] = new Coordinate(env.getMaxX(), env.getMaxY());
c[3] = new Coordinate(env.getMinX(), env.getMaxY());
c[4] = c[0];
subdivIntersectInner(c, warnArea, featureGeom, orient, 1, out);
}
private static void subdivIntersectInner(Coordinate[] env, Geometry warnArea,
Geometry featureGeom, boolean orientation, int depth,
List<Geometry> out) {
if (warnArea.getNumGeometries() * featureGeom.getNumGeometries() <= DEFAULT_SUBDIVISION_TRESHOLD
|| depth >= MAX_SUBDIVISION_DEPTH) {
out.add(batchIntersect(warnArea, featureGeom));
} else if (featureGeom.getNumGeometries() <= SIMPLE_FEATURE_GEOM_COUNT_THRESHOLD) {
try {
Polygon clipPoly = warnArea.getFactory().createPolygon(env);
Geometry clippedWarnArea = clip(clipPoly, warnArea);
/*
* Not clipping feature geometry because it is already known to
* have a small geometry count.
*/
out.add(batchIntersect(clippedWarnArea, featureGeom));
} catch (TopologyException e) {
// Additional fallback without clipping.
statusHandler.handle(Priority.DEBUG,
"Clipped intersection failed. Will attempt fallback.", e);
out.add(GeometryUtil.intersection(warnArea, featureGeom, true));
}
} else {
GeometryFactory gf = warnArea.getFactory();
Coordinate[] c = new Coordinate[5];
List<Geometry> subOut = new ArrayList<>();
for (int side = 0; side < 2; ++side) {
if (side == 0) {
if (orientation) {
// horizontal split
c[0] = env[0];
c[1] = new Coordinate((env[0].x + env[1].x) / 2, env[0].y);
c[2] = new Coordinate(c[1].x, env[2].y);
c[3] = env[3];
c[4] = c[0];
} else {
// vertical split
c[0] = env[0];
c[1] = env[1];
c[2] = new Coordinate(c[1].x, (env[0].y + env[3].y) / 2);
c[3] = new Coordinate(c[0].x, c[2].y);
c[4] = c[0];
}
} else {
if (orientation) {
c[0] = c[1];
c[3] = c[2];
c[1] = env[1];
c[2] = env[2];
c[4] = c[0];
} else {
c[0] = c[3];
c[1] = c[2];
c[2] = env[2];
c[3] = env[3];
c[4] = c[0];
}
}
Polygon clipPoly = gf.createPolygon(c);
try {
Geometry subWarnArea = clip(clipPoly, warnArea);
Geometry subFeatureGeom = clip(clipPoly, featureGeom);
subdivIntersectInner(c, subWarnArea, subFeatureGeom,
!orientation, depth + 1, subOut);
} catch (TopologyException e) {
// Additional fallback without clipping.
statusHandler.handle(Priority.DEBUG,
"Subdivided intersection failed. Will attempt fallback.", e);
out.add(GeometryUtil.intersection(warnArea, featureGeom, true));
return;
}
}
out.addAll(subOut);
}
}
/**
* Calculate the intersection of p and g by operating on each element of g.
* This is necessary to prevent "side location conflict" errors. By using
* envelopes to either filter out elements or bypass
* Geometry.intersection(), it also is much faster than p.intersection(g)
* would be.
*
* @param p
* @param g must be Polygonal
* @return
*/
private static Geometry clip(Polygon p, Geometry g) {
Envelope pe = p.getEnvelopeInternal();
List<Polygon> out = new ArrayList<>(g.getNumGeometries() * 11 / 10);
int n = g.getNumGeometries();
for (int i = 0; i < n; ++i) {
Geometry gi = g.getGeometryN(i);
Envelope ge = gi.getEnvelopeInternal();
if (pe.contains(ge)) {
out.add((Polygon) gi);
} else if (pe.intersects(ge)) {
Geometry clipped = p.intersection(gi);
int m = clipped.getNumGeometries();
for (int j = 0; j < m; ++j) {
Geometry gj = clipped.getGeometryN(j);
if (!gj.isEmpty() && gj instanceof Polygon) {
out.add((Polygon) gj);
}
}
}
// else, discard gi
}
return g.getFactory().createMultiPolygon(out.toArray(new Polygon[out.size()]));
}
private static Geometry batchIntersect(Geometry warnArea, Geometry featureGeom) {
return GeometryUtil.intersection(warnArea, featureGeom, true);
}
public static List<String> converFeAreaToPartList(String feArea) {

View file

@ -156,6 +156,7 @@ import com.vividsolutions.jts.io.WKTReader;
* Feb 9, 2016 DR18421 D. Friedman Don't call ToolsDataManager.setStormTrackData if there is no storm motion.
* Feb 17, 2016 DR 17531 Qinglu Lin Added calStormVelocityAndEventLocation(), updated runTemplate().
* Mar 10, 2016 5411 randerso Added productId and mixedCaseEnabled to Velocity context
* May 25, 2016 DR18789 D. Friedman Extract timezone calculation to method and add short circuit logic.
*
* </pre>
*
@ -220,6 +221,127 @@ public class TemplateRunner {
return officeCityTimezone;
}
private static Set<String> determineTimezones(WarngenLayer warngenLayer,
AffectedAreas[] areas, Geometry warningArea) throws VizException {
Map<String, Double> intersectSize = new HashMap<String, Double>();
double minSize = 1.0E-3d;
Set<String> timeZones = new HashSet<String>();
for (AffectedAreas affectedAreas : areas) {
if (affectedAreas.getTimezone() != null) {
// Handles counties that span two time zones
String oneLetterTimeZones = affectedAreas.getTimezone()
.trim();
if (oneLetterTimeZones.length() == 1) {
timeZones.add(String.valueOf(oneLetterTimeZones
.charAt(0)));
}
}
}
if (timeZones.size() > 1) {
return timeZones;
}
for (AffectedAreas affectedAreas : areas) {
if (affectedAreas.getTimezone() != null) {
// Handles counties that span two time zones
String oneLetterTimeZones = affectedAreas.getTimezone()
.trim();
if (oneLetterTimeZones.length() > 1) {
// Determine if one letter timezone is going to be
// put into timeZones.
Geometry[] poly1, poly2;
int n1, n2;
double size, totalSize;
String[] oneLetterTZ = new String[oneLetterTimeZones.length()];
for (int i = 0; i < oneLetterTimeZones.length(); i++) {
oneLetterTZ[i] = String
.valueOf(oneLetterTimeZones.charAt(i));
Geometry timezoneGeom = warngenLayer
.getTimezoneGeom(oneLetterTZ[i]);
long t0 = System.currentTimeMillis();
poly1 = null;
poly2 = null;
n1 = 0;
n2 = 0;
size = 0.0d;
totalSize = 0.0d;
if ((timezoneGeom != null)
&& (warningArea != null)) {
if (intersectSize.get(oneLetterTZ[i]) != null) {
continue;
}
poly1 = new Geometry[warningArea
.getNumGeometries()];
n1 = warningArea.getNumGeometries();
for (int j = 0; j < n1; j++) {
poly1[j] = warningArea.getGeometryN(j);
}
poly2 = new Geometry[timezoneGeom
.getNumGeometries()];
n2 = timezoneGeom.getNumGeometries();
for (int j = 0; j < n2; j++) {
poly2[j] = timezoneGeom.getGeometryN(j);
}
// Calculate the total size of intersection
for (Geometry p1 : poly1) {
for (Geometry p2 : poly2) {
try {
size = p1.intersection(p2)
.getArea();
} catch (TopologyException e) {
statusHandler
.handle(Priority.VERBOSE,
"Geometry error calculating the total size of intersection.",
e);
}
if (size > 0.0) {
totalSize += size;
}
}
if (totalSize > minSize) {
break; // save time when the size of
// poly1 or poly2 is large
}
}
intersectSize
.put(oneLetterTZ[i], totalSize);
} else {
throw new VizException(
"Either timezoneGeom or/and warningArea is null. "
+ "Timezone cannot be determined.");
}
perfLog.logDuration(
"runTemplate size computation",
System.currentTimeMillis() - t0);
if (totalSize > minSize) {
timeZones.add(oneLetterTZ[i]);
}
}
// If timeZones has nothing in it when the hatched
// area is very small,
// use the timezone of larger intersection size.
if (timeZones.size() == 0) {
if (intersectSize.size() > 1) {
if (intersectSize.get(oneLetterTZ[0]) > intersectSize
.get(oneLetterTZ[1])) {
timeZones.add(oneLetterTZ[0]);
} else {
timeZones.add(oneLetterTZ[1]);
}
} else {
throw new VizException(
"The size of intersectSize is less than 1, "
+ "timezone cannot be determined.");
}
}
}
} else {
throw new VizException(
"Calling to area.getTimezone() returns null.");
}
}
return timeZones;
}
/**
* Executes a warngen template given the polygon from the Warngen Layer and
* the Storm tracking information from StormTrackDisplay
@ -335,113 +457,8 @@ public class TemplateRunner {
context.put(ia, intersectAreas.get(ia));
}
Map<String, Double> intersectSize = new HashMap<String, Double>();
String[] oneLetterTZ;
double minSize = 1.0E-3d;
if ((areas != null) && (areas.length > 0)) {
Set<String> timeZones = new HashSet<String>();
for (AffectedAreas affectedAreas : areas) {
if (affectedAreas.getTimezone() != null) {
// Handles counties that span two time zones
String oneLetterTimeZones = affectedAreas.getTimezone()
.trim();
oneLetterTZ = new String[oneLetterTimeZones.length()];
if (oneLetterTimeZones.length() == 1) {
timeZones.add(String.valueOf(oneLetterTimeZones
.charAt(0)));
} else {
// Determine if one letter timezone is going to be
// put into timeZones.
Geometry[] poly1, poly2;
int n1, n2;
double size, totalSize;
for (int i = 0; i < oneLetterTimeZones.length(); i++) {
oneLetterTZ[i] = String
.valueOf(oneLetterTimeZones.charAt(i));
Geometry timezoneGeom = warngenLayer
.getTimezoneGeom(oneLetterTZ[i]);
t0 = System.currentTimeMillis();
poly1 = null;
poly2 = null;
n1 = 0;
n2 = 0;
size = 0.0d;
totalSize = 0.0d;
if ((timezoneGeom != null)
&& (warningArea != null)) {
if (intersectSize.get(oneLetterTZ[i]) != null) {
continue;
}
poly1 = new Geometry[warningArea
.getNumGeometries()];
n1 = warningArea.getNumGeometries();
for (int j = 0; j < n1; j++) {
poly1[j] = warningArea.getGeometryN(j);
}
poly2 = new Geometry[timezoneGeom
.getNumGeometries()];
n2 = timezoneGeom.getNumGeometries();
for (int j = 0; j < n2; j++) {
poly2[j] = timezoneGeom.getGeometryN(j);
}
// Calculate the total size of intersection
for (Geometry p1 : poly1) {
for (Geometry p2 : poly2) {
try {
size = p1.intersection(p2)
.getArea();
} catch (TopologyException e) {
statusHandler
.handle(Priority.VERBOSE,
"Geometry error calculating the total size of intersection.",
e);
}
if (size > 0.0) {
totalSize += size;
}
}
if (totalSize > minSize) {
break; // save time when the size of
// poly1 or poly2 is large
}
}
intersectSize
.put(oneLetterTZ[i], totalSize);
} else {
throw new VizException(
"Either timezoneGeom or/and warningArea is null. "
+ "Timezone cannot be determined.");
}
perfLog.logDuration(
"runTemplate size computation",
System.currentTimeMillis() - t0);
if (totalSize > minSize) {
timeZones.add(oneLetterTZ[i]);
}
}
// If timeZones has nothing in it when the hatched
// area is very small,
// use the timezone of larger intersection size.
if (timeZones.size() == 0) {
if (intersectSize.size() > 1) {
if (intersectSize.get(oneLetterTZ[0]) > intersectSize
.get(oneLetterTZ[1])) {
timeZones.add(oneLetterTZ[0]);
} else {
timeZones.add(oneLetterTZ[1]);
}
} else {
throw new VizException(
"The size of intersectSize is less than 1, "
+ "timezone cannot be determined.");
}
}
}
} else {
throw new VizException(
"Calling to area.getTimezone() returns null.");
}
}
Set<String> timeZones = determineTimezones(warngenLayer, areas, warningArea);
Map<String, String> officeCityTimezone = createOfficeTimezoneMap();
String cityTimezone = null;

View file

@ -94,8 +94,7 @@ public class SpotRequestParser {
PROPERTY_PATTERN_MAP.put("AGENCY_NAME", "REQUESTING\\s+AGENCY");
PROPERTY_PATTERN_MAP.put("OFFICIAL_NAME", "REQUESTING\\s+OFFICIAL");
PROPERTY_PATTERN_MAP.put("PHONE_NAME", "EMERGENCY\\s+PHONE");
PROPERTY_PATTERN_MAP
.put("PHONE_VALUE", "\\(\\d{3}\\)\\s*\\d{3}-\\d{4}");
PROPERTY_PATTERN_MAP.put("PHONE_VALUE", ".{1,30}");
PROPERTY_PATTERN_MAP.put("STATE_NAME", "STATE");
PROPERTY_PATTERN_MAP.put("DLAT_NAME", "DLAT");
PROPERTY_PATTERN_MAP.put("DLON_NAME", "DLON");

View file

@ -116,8 +116,8 @@
<gridParameterInfo xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
@ -387,8 +387,8 @@
<gridParameterInfo xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -223,8 +223,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -273,8 +273,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -156,8 +156,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -195,8 +195,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -301,8 +301,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -195,8 +195,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -247,8 +247,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -211,8 +211,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -264,8 +264,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -165,8 +165,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -165,8 +165,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -222,8 +222,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -299,8 +299,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>

View file

@ -222,8 +222,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -298,8 +298,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>

View file

@ -367,8 +367,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -670,8 +670,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -367,8 +367,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -476,8 +476,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -670,8 +670,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -760,9 +760,9 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>lifted index</long_name>
<units>degrees Kelvin</units>
<valid_range>-20000.0</valid_range>
<valid_range>20000.0</valid_range>
<units>degrees Celsius</units>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
<fillValue>-99999.0</fillValue>
<n3D>0</n3D>
<levelsDesc>SFC</levelsDesc>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected level for SLI
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -357,8 +358,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -444,8 +445,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected level for SLI
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -357,8 +358,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -444,8 +445,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -384,8 +384,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -471,8 +471,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -351,8 +351,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -438,8 +438,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected level for SLI
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -231,8 +232,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -274,8 +275,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected level for SLI
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -357,8 +358,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -444,8 +445,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -844,8 +844,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected heli level
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -238,8 +239,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -304,8 +305,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected heli level
06/13/2016 #17308 bhunder Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -182,8 +183,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -362,8 +363,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -815,8 +815,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -830,8 +830,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -213,8 +213,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
@ -279,8 +279,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>pli</short_name>
<long_name>Parcel lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>parcLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>50.0</valid_range>
@ -309,8 +309,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -3,6 +3,7 @@
Mar 20, 2013 #1774 randerso Added forecast hours out to 18
Jun 19, 2013 #2044 randerso Updated to match model
Feb 24 20153 DCS14537 byin Added HPBL for RUC13
Jun 13, 2016 #17308 bhunderm Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -122,8 +123,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
@ -597,8 +598,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -242,8 +242,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
@ -379,8 +379,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -4,6 +4,7 @@
Date Ticket# Engineer Description
04/17/2013 #1913 randerso Corrected level for SLI
06/13/2016 #17308 bhunderm Corrected LI units
-->
<gridParamInfo xmlns:ns2="group">
<valtimeMINUSreftime>
@ -91,8 +92,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>bli</short_name>
<long_name>Best lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>bestLftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>
@ -456,8 +457,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>Surface lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -594,8 +594,8 @@
<gridParameterInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="parameterInfo">
<short_name>sli</short_name>
<long_name>lifted index</long_name>
<units>K</units>
<udunits>degree_Kelvin</udunits>
<units>C</units>
<udunits>degree_Celsius</udunits>
<uiname>LftInd</uiname>
<valid_range>-20.0</valid_range>
<valid_range>20.0</valid_range>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<polarStereoGridCoverage>
<name>GFS-AK-20KM</name>
<description>Grid over Alaska - Double Resolution grid (polar
stereographic)</description>
<la1>35.0</la1>
<lo1>-190.0</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>277</nx>
<ny>225</ny>
<dx>22.5</dx>
<dy>22.5</dy>
<spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis>
<lov>-150.0</lov>
</polarStereoGridCoverage>

View file

@ -24,14 +24,14 @@
<la1>-45.0</la1>
<lo1>110.0</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>737</nx>
<ny>661</ny>
<nx>837</nx>
<ny>725</ny>
<dx>20.0</dx>
<dy>20.0</dy>
<spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis>
<latin>20.0</latin>
<la2>60.232</la2>
<lo2>250.967</lo2>
<la2>65.345</la2>
<lo2>270.000</lo2>
</mercatorGridCoverage>

View file

@ -203,6 +203,30 @@
</process>
</model>
<!-- conus 20KM -->
<model>
<name>GFS215</name>
<center>7</center>
<subcenter>0</subcenter>
<grid>215</grid>
<process>
<id>81</id>
<id>96</id>
</process>
</model>
<!-- ak 20KM -->
<model>
<name>GFS217</name>
<center>7</center>
<subcenter>0</subcenter>
<grid>GFS-AK-20KM</grid>
<process>
<id>81</id>
<id>96</id>
</process>
</model>
<!-- pac 20KM -->
<model>
<name>GFS20-PAC</name>

View file

@ -28,6 +28,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
* Apr 28, 2013 1955 jsanchez Added an ignoreUserData flag to intersection method.
* Oct 21, 2013 DR 16632 D. Friedman Handle zero-length input in union.
* Dec 13, 2013 DR 16567 Qinglu Lin Added contains().
* May 12, 2016 DR 18789 D. Friedman Added intersection(g1, g2, ignoreUserData).
*
* </pre>
*
@ -103,6 +104,26 @@ public class GeometryUtil {
return rval;
}
/**
* Intersection between g1 and g2. Resulting intersection will contain user
* data from g2
*
* @param g1
* @param g2
*
* @return the intersection between g1 and g2
*/
public static Geometry intersection(Geometry g1, Geometry g2, boolean ignoreUserData) {
GeometryFactory gf = new GeometryFactory();
List<Geometry> intersection = new ArrayList<Geometry>(
g1.getNumGeometries() + g2.getNumGeometries());
intersection(g1, g2, intersection, ignoreUserData);
Geometry rval = gf.createGeometryCollection(intersection
.toArray(new Geometry[intersection.size()]));
rval.setUserData(g2.getUserData());
return rval;
}
private static void intersection(Geometry g1, Geometry g2,
List<Geometry> intersections, boolean ignoreUserData) {
if (g1 instanceof GeometryCollection) {

View file

@ -38,6 +38,7 @@
##### several DRs related to unique part-of-state codes, watch boxes, etc..
##### Bookbinder 10-30-2015 Added several additional fe_area codes and cleaned up watch logic.
##### Evan Bookbinder 12-01-2015 Fixed single column output
##### Richard Barnhill 5-10-2016 Fixed "OF" to "of" to conform to mixed case
##############################################################################################################
#*
Mile Marker Test Code
@ -1760,7 +1761,7 @@ and ${strOutput}
#capitalize(${ruralPhrase}, 'FIRSTONLY') will remain over mainly open waters.
#else
## NO MAJOR POINTS FOUND. LIST RURAL AREAS
#capitalize(${ruralPhrase}, 'FIRSTONLY') will remain over ${noLocPhrase} OF #headlineLocList(${areas} true true true false)##
#capitalize(${ruralPhrase}, 'FIRSTONLY') will remain over ${noLocPhrase} of #headlineLocList(${areas} true true true false)##
#set($numMinorPoints = ${list.size($otherLocList)})
#if(${numMinorPoints} == 1)
, which includes ##

View file

@ -89,20 +89,20 @@ THIS IS A TEST MESSAGE. ##
#set($reportType = "extreme winds")
#set($reportType2 = "the hurricane eyewall was")
##
#if(${list.contains(${bullets}, "var1")})
#set($reportType1 = "associated with a broad area of intense thunderstorms#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "associated with a broad area of intense thunderstorms, located")
#set($reportType = "extreme winds were occuring")
#set($reportType2 = "this area of thunderstorm winds was")
#end
##
#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "associated with an intense low pressure area#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "associated with an intense low pressure area, located")
#set($reportType = "extreme winds were occuring")
#set($reportType2 = "this intense low pressure system was")
#end
##
#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "associated with a downslope windstorm#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var4")})
#set($reportType1 = "associated with a downslope windstorm, located")
#set($reportType = "extreme winds were occuring")
#set($reportType2 = "this area of downslope winds was")
#end
@ -222,21 +222,21 @@ THIS IS A TEST MESSAGE. ##
#####################
## CALL TO ACTIONS ##
#####################
#if(${list.contains(${bullets}, "cta1")} || ${list.contains(${bullets}, "cta2")} || ${list.contains(${bullets}, "cta3")})
#if(${list.contains(${bullets}, "destructiveWindsCTA")} || ${list.contains(${bullets}, "takeCoverCTA")} || ${list.contains(${bullets}, "safePlacesCTA")})
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
#if(${list.contains(${bullets}, "cta1")})
#if(${list.contains(${bullets}, "destructiveWindsCTA")})
Widespread destructive winds of !** **! to !** **! mph will spread across ##
#headlineLocList(${areas} true true true false)#commaOrEllipsis()Producing swaths of tornado-like damage.
#end
#if(${list.contains(${bullets}, "cta2")})
TAKE COVER NOW! Treat these imminent extreme winds as if a tornado was approaching and move immediately to the safe room in your shelter. Take action now to protect your life!
#if(${list.contains(${bullets}, "takeCoverCTA")})
Take cover now! Treat these imminent extreme winds as if a tornado was approaching and move immediately to the safe room in your shelter. Take action now to protect your life!
#end
#if(${list.contains(${bullets}, "cta3")})
The safest place to be during a major landfalling hurricane is in a reinforced interior room away from windows. Get under a table or other piece of sturdy furniture. Use mattresses#commaOrEllipsis()blankets or pillows to cover your head and body. Remain in place through the passage of these life-threatening conditions.
#if(${list.contains(${bullets}, "safePlacesCTA")})
The safest place to be during a major landfalling hurricane is in a reinforced interior room away from windows. Get under a table or other piece of sturdy furniture. Use mattresses, blankets or pillows to cover your head and body. Remain in place through the passage of these life-threatening conditions.
#end
#############
@ -258,20 +258,20 @@ The safest place to be during a major landfalling hurricane is in a reinforced i
#set($reportType = "extreme winds")
#set($reportType2 = "the hurricane eyewall was")
##
#if(${list.contains(${bullets}, "var1")})
#set($reportType1 = "associated with a broad area of intense thunderstorms#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "associated with a broad area of intense thunderstorms, located")
#set($reportType = "extreme winds were occurinG")
#set($reportType2 = "this area of thunderstorm winds was")
#end
##
#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "associated with an intense low pressure area#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "associated with an intense low pressure area, located")
#set($reportType = "extreme winds were occuring")
#set($reportType2 = "this intense low pressure system was")
#end
##
#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "associated with a downslope windstorm#commaOrEllipsis()located")
#if(${list.contains(${bullets}, "var4")})
#set($reportType1 = "associated with a downslope windstorm, located")
#set($reportType = "extreme winds were occuring")
#set($reportType2 = "this area of downslope winds was")
#end
@ -408,7 +408,7 @@ At ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}#commaOrEl
#if(${movementSpeed} < ${landStationary} || ${stationary})
. ${reportType2} nearly stationary.##
#else
#commaOrEllipsis()moving #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} mph.##
, moving #direction(${movementDirectionRounded}) at ${mathUtil.roundTo5(${movementSpeed})} mph.##
#end
This is an extremely dangerous and life-threatening situation!

View file

@ -75,6 +75,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<duration>30</duration>
</durations>
<lockedGroupsOnFollowup>warnReason</lockedGroupsOnFollowup>
<bulletActionGroups>
<bulletActionGroup>
<bullets>

View file

@ -230,7 +230,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${stormType} == "line")
#set($expcanPhrase = "The storms which prompted the warning have weakened below severe limits#commaOrEllipsis()and have exited the warned area. Therefore the warning ${expcanBODYTag}.")
#else
#set($expcanPhrase = "The storm which prompted the warning has weakened below severe limits#commaOrEllipsis()and have exited the warned area. Therefore the warning ${expcanBODYTag}.")
#set($expcanPhrase = "The storm which prompted the warning has weakened below severe limits, and has exited the warned area. Therefore, the warning ${expcanBODYTag}.")
#end
#end
#### SVR UPGRADED TO TOR

View file

@ -167,7 +167,6 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="stillhail" bulletText="Hail still a threat - optional"/>
<bullet bulletName="stillwind" bulletText="Gusty winds still a threat - optional"/>
<bullet bulletName="stillrain" bulletText="Heavy rain still a threat - optional"/>
<bullet bulletName="stillrain" bulletText="Heavy rain still a threat - optional"/>
<!-- AUTO INCLUSION OF WATCHES FIXED IN 13.4.1
<bullet bulletName="svrboxactive" bulletGroup="watchbox" bulletText="SVR TSTM WATCH remains in effect"/>
<bullet bulletName="torboxactive" bulletGroup="watchbox" bulletText="TORNADO WATCH remains in effect"/>
@ -193,7 +192,6 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="stillhail" bulletText="Hail still a threat - optional"/>
<bullet bulletName="stillwind" bulletText="Gusty winds still a threat - optional"/>
<bullet bulletName="stillrain" bulletText="Heavy rain still a threat - optional"/>
<bullet bulletName="stillrain" bulletText="Heavy rain still a threat - optional"/>
<!-- AUTO INCLUSION OF WATCHES FIXED IN 13.4.1
<bullet bulletName="svrboxactive" bulletGroup="watchbox" bulletText="SVR TSTM WATCH remains in effect"/>
<bullet bulletName="torboxactive" bulletGroup="watchbox" bulletText="TORNADO WATCH remains in effect"/>
@ -284,7 +282,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="dopplerSVR" bulletText="Doppler radar indicated" bulletGroup="radioset1" parseString="SOURCE...RADAR INDICATED"/>
<bullet bulletName="trainedSpottersSVR" bulletText="Trained spotters reported" bulletGroup="radioset1" parseString="SOURCE...TRAINED WEATHER SPOTTERS"/>
<bullet bulletName="lawEnforcementSVR" bulletText="Law Enforcement reported" bulletGroup="radioset1" parseString="SOURCE...LAW ENFORCEMENT"/>
<bullet bulletName="trainedSpottersSVR" bulletText="Emergency Management reported" bulletGroup="radioset1" parseString="SOURCE...EMERGENCY MANAGEMENT"/>
<bullet bulletName="emergencyManagementSVR" bulletText="Emergency Management reported" bulletGroup="radioset1" parseString="SOURCE...EMERGENCY MANAGEMENT"/>
<bullet bulletName="publicSVR" bulletText="Public Reported" bulletGroup="radioset1" parseString="SOURCE...PUBLIC"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** THREAT (CHOOSE 1 each wind/hail) **********" bulletType="title"/>
@ -421,7 +419,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="dopplerSVR" bulletText="Doppler radar indicated" bulletGroup="radioset1" parseString="SOURCE...RADAR INDICATED"/>
<bullet bulletName="trainedSpottersSVR" bulletText="Trained spotters reported" bulletGroup="radioset1" parseString="SOURCE...TRAINED WEATHER SPOTTERS"/>
<bullet bulletName="lawEnforcementSVR" bulletText="Law Enforcement reported" bulletGroup="radioset1" parseString="SOURCE...LAW ENFORCEMENT"/>
<bullet bulletName="trainedSpottersSVR" bulletText="Emergency Management reported" bulletGroup="radioset1" parseString="SOURCE...EMERGENCY MANAGEMENT"/>
<bullet bulletName="emergencyManagementSVR" bulletText="Emergency Management reported" bulletGroup="radioset1" parseString="SOURCE...EMERGENCY MANAGEMENT"/>
<bullet bulletName="publicSVR" bulletText="Public Reported" bulletGroup="radioset1" parseString="SOURCE...PUBLIC"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** THREAT (CHOOSE 1 each wind/hail) **********" bulletType="title"/>

View file

@ -11,7 +11,8 @@
## UPDATED PHIL KURIMSKI -- MAR 23 2015 Mixed Case ##
## BOOKBINDER - 9/4/2015 Fixed line of storms grammar ##
## Kurimski -- Oct 22 2015 Fixed CAN/EXP section combo ##
########################################################################
## BOOKBINDER 4/29/2016 Fixed issue setting StormType to Null ##
#############################################################################
#parse("config.vm")
############################################
## Set null variables used in the template
@ -510,7 +511,6 @@ ${area.name}...
#set($stormline = "a ${eventType}")
#set($pathheader = "The ${eventType}")
#set($specialEvent = "This ${eventType}")
#set($stormType = "")
#set($reportType2 = "The ${eventType} was")
#end
#######################################################################
@ -522,7 +522,6 @@ ${area.name}...
#set($pathheader = "The ${volcanoPath}")
#set($specialEvent = "The ${volcanoPath}")
#set($reportType2 = "The ${volcanoPath} was")
#set($stormType = "")
#set($impacted = "Locations impacted by ${volcanoPath} include...")
#end
##########################################################################

View file

@ -12,6 +12,7 @@
## Evan Bookbinder 9/4/15 Replaced flash flooding with localized flooding in ##
## torrentainRain CTA so as not to imply need for FFW ##
## Phil Kurimski 10/20/2015 Fixed line of storms wording/added campers CTA ##
## Evan Bookbinder 4/29/2016 Fixed storm intensify to a CTA ##
######################################################################################
##
##SET SOME INITIAL VARIABLES
@ -291,7 +292,7 @@ Frequent cloud to ground lightning is occurring with this storm. Lightning can s
#end
##
#if(${list.contains(${bullets}, "stormIntensify")})
#if(${list.contains(${bullets}, "stormIntensifyCTA")})
#if(${stormType} == "line")
These storms may intensify#commaOrEllipsis()so be certain to monitor local radio stations and available television stations for additional information and possible warnings from the National Weather Service.

View file

@ -8,6 +8,7 @@
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Dangelo 6/26/2014 added bullets for watch info inclusion (bulletDefault set to true)
Phil Kurimski 10-20-2015 added campers CTA
Evan Bookbinder 4-29-2016 minor fix to storm intensify CTA/parsing
-->
<warngenConfig>
@ -101,7 +102,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
<bullet bulletName="lightningCTA" bulletText="Frequent Lightning" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="stormIntensify" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="stormIntensifyCTA" bulletText="Storm(s) May Intensify" parseString="&quot;MAY INTENSIFY&quot;,&quot;POSSIBLE WARNING&quot;"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET OUT OF THE WATER AND MOVE INDOORS"/>
<bullet bulletName="camperCTA" bulletText="Campground - Campers seek shelter" parseString="PERSONS IN CAMPGROUNDS"/>
@ -135,7 +136,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
<bullet bulletName="lightningCTA" bulletText="Frequent Lightning" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="stormIntensify" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="stormIntensifyCTA" bulletText="Storm(s) May Intensify" parseString="&quot;MAY INTENSIFY&quot;,&quot;POSSIBLE WARNING&quot;"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET OUT OF THE WATER AND MOVE INDOORS"/>
<bullet bulletName="camperCTA" bulletText="Campground - Campers seek shelter" parseString="PERSONS IN CAMPGROUNDS"/>

View file

@ -7,7 +7,8 @@
## Phil Kurimski -- Oct 22 2014 Mixed Case ##
## Richard Barnhill -- Dec 30 2015 Per conversation with##
## Evan, made default hailCTA "" ##
###################################################################
## Evan Bookbinder -- Fixed issue setting stormType to null ##
#######################################################################
#parse("config.vm")
## Set null variables used in the template
############################################
@ -494,7 +495,6 @@ ${area.name}...
#set($pathheader = "The ${eventType}")
#set($specialEvent = "this ${eventType}")
#set($reportType2 = "the ${eventType} was")
#set($stormType = "")
#end
#######################################################################
## Coding for volcanos...this will override all other selections.
@ -505,7 +505,6 @@ ${area.name}...
#set($pathheader = "the ${volcanoPath}")
#set($reportType2 = "the ${volcanoPath} was")
#set($specialEvent = "the ${volcanoPath}")
#set($stormType = "")
#set($impacted = "Locations impacted by ${volcanoPath} include...")
#end
#######################################################################

View file

@ -78,6 +78,7 @@ import com.vividsolutions.jts.io.WKTWriter;
* 05/13/2014 3133 njensen Moved convertStrankValue here from ScanConfig
* Jun 05, 2014 3226 bclement BinLightning refactor
* compare lightning strike type by id instead of ordinal
* May 17, 2016 19009 dhladky (code ckecked in by zhao) Modified decodeDPRValue()
* </pre>
*
* @author dhladky
@ -812,10 +813,8 @@ public class ScanUtils {
* @return
*/
public static float decodeDPRValue(int dataValue) {
// DPR is shown in 1000th of an inch
return dataValue / 1000;
return (float) (dataValue / 1000.0f);
}
/**

View file

@ -110,6 +110,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Sep 28, 2015 4756 dhladky Multiple Guidance upgrades.
* Feb 04, 2016 5311 dhladky Bug in creation of source bins fixed.
* Apr 07, 2016 5491 tjensen Fix NullPointerException from getRawGeometries
* May 17, 2016 19009 dhladky (code ckecked in by zhao) Modified DPR calculation in processRADAR()
* </pre>
*
* @author dhladky
@ -1186,17 +1187,8 @@ public class FFMPProcessor {
}
} else if (radarRec.getMnemonic().equals("DPR")) {
for (int j = 0; j < dataVals.length; j++) {
float fval = 0.0f;
if (dataVals[j] > 0) {
fval = ScanUtils.decodeDPRValue(dataVals[j]);
val += fval * areas[j];
}
val += ScanUtils.decodeDPRValue(dataVals[j]) * areas[j];
area += areas[j];
}
}

View file

@ -144,6 +144,10 @@ if [ -f org.eclipse.jface_%{_jface_version}.jar ]; then
org.eclipse.jface_%{_jface_version}.jar
fi
# Delete configuration information because it references the jar files that
# were just deleted.
rm -rf /awips2/cave/configuration/org.eclipse.osgi
popd > /dev/null 2>&1
# determine if an installation of awips2-common-base is already present

View file

@ -911,5 +911,5 @@ NGRID ^(HIN[B-X][0-9][0-9]) (KWNH) (..)(..)(..)
# National Radar for DCS 18425 / DR 18913
NNEXRAD ^(SDUS[234578].) (K|P|T)(...) (..)(..)(..) /p(N0Q|N1Q|N0U|N1U|NST|TZL|TR1|TV1|NCR)(...)
FILE -overwrite -log -close -edex /data_store/radar/\2\8/\7/\1_\5\6_\2\8_\7_(seq).rad
FILE -overwrite -log -close -edex /data_store/radar/(\4:yyyy)(\4:mm)(\4)/\5/\2\8/\7/\1_\4\5\6_\2\8_\7_(seq).rad