diff --git a/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/dialogs/SpellCheckDlg.java b/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/dialogs/SpellCheckDlg.java index 0159d1147e..347568c906 100755 --- a/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/dialogs/SpellCheckDlg.java +++ b/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/dialogs/SpellCheckDlg.java @@ -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 * * * @author lvenable @@ -257,6 +259,7 @@ public class SpellCheckDlg extends Dialog implements ISpellingProblemCollector { spellCheckJob.setCollector(this); suggestionsBlacklist = getSuggestionsBlacklist(); + spellCheckJob.setBlacklist(suggestionsBlacklist); } private Collection getSuggestionsBlacklist() { diff --git a/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/jobs/SpellCheckJob.java b/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/jobs/SpellCheckJob.java index 2f24dc5088..a6f6207832 100644 --- a/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/jobs/SpellCheckJob.java +++ b/cave/com.raytheon.uf.viz.spellchecker/src/com/raytheon/uf/viz/spellchecker/jobs/SpellCheckJob.java @@ -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 * * * @author wldougher @@ -92,6 +102,8 @@ public class SpellCheckJob extends Job implements ISpellingProblemCollector { private String line; + private Collection 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 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 problemsList; + problemsList = new ArrayList(); + if (!problems.isEmpty()) { + problemsList.addAll(problems); + Collections.sort(problemsList, new Comparator() { + @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 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; + } +} diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/HazardUtils.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/HazardUtils.py index 96fc3c1d9c..40a2117bd1 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/HazardUtils.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/HazardUtils.py @@ -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: diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py index 175258851a..7de4a77e93 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/utilities/SmartScript.py @@ -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()) diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java index e57a625632..bb17d8089f 100644 --- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java +++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java @@ -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. * * * @@ -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 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,8 +4383,11 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, searchReplaceDlg.setEditMode(inEditMode); } - if (originalText != null) { - textEditor.setText(originalText); + // 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; } diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java index 3f656d523c..e129cdb1ce 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Area.java @@ -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. * * * @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 areasMap = new HashMap(); - try { Geometry precisionReducedArea = PolygonUtil .reducePrecision(warnArea); @@ -340,25 +368,74 @@ public class Area { String hatchedAreaSource = config.getHatchedAreaSource() .getAreaSource(); + + 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"); + } + + long t0 = System.currentTimeMillis(); for (AreaSourceConfiguration asc : config.getAreaSources()) { + boolean ignoreUserData = asc.getAreaSource().equals( + hatchedAreaSource) == false; if (asc.getType() == AreaType.INTERSECT) { List geoms = new ArrayList(); - 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); + 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()); + executor.allowCoreThreadTimeOut(true); + intersectionExecutor = executor; + } } - - if (intersect.isEmpty() == false && filtered == true) { - geoms.add(intersect); + Geometry waPoly = toPolygonal(warnArea); + GeospatialData[] features = warngenLayer.getGeodataFeatures( + asc.getAreaSource(), localizedSite); + List> callables = new ArrayList<>(features.length); + for (GeospatialData f : features) { + callables.add(new FeatureIntersection(waPoly, f)); + } + try { + List> futures = intersectionExecutor.invokeAll(callables); + int fi = 0; + for (Future 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); + } } } @@ -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 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 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 { + 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 out = new ArrayList(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 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 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 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 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 converFeAreaToPartList(String feArea) { diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java index e728ab8a79..3373fa53cf 100644 --- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java +++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java @@ -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. * * * @@ -220,6 +221,127 @@ public class TemplateRunner { return officeCityTimezone; } + private static Set determineTimezones(WarngenLayer warngenLayer, + AffectedAreas[] areas, Geometry warningArea) throws VizException { + Map intersectSize = new HashMap(); + double minSize = 1.0E-3d; + Set timeZones = new HashSet(); + 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 intersectSize = new HashMap(); - String[] oneLetterTZ; - double minSize = 1.0E-3d; if ((areas != null) && (areas.length > 0)) { - Set timeZones = new HashSet(); - 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 timeZones = determineTimezones(warngenLayer, areas, warningArea); Map officeCityTimezone = createOfficeTimezoneMap(); String cityTimezone = null; diff --git a/cm/AWIPS2_NWS/edex/gov.noaa.nws.ost.edex.plugin.stq/src/gov/noaa/nws/ost/edex/plugin/stq/SpotRequestParser.java b/cm/AWIPS2_NWS/edex/gov.noaa.nws.ost.edex.plugin.stq/src/gov/noaa/nws/ost/edex/plugin/stq/SpotRequestParser.java index 3cdb014f0d..4f887072e1 100644 --- a/cm/AWIPS2_NWS/edex/gov.noaa.nws.ost.edex.plugin.stq/src/gov/noaa/nws/ost/edex/plugin/stq/SpotRequestParser.java +++ b/cm/AWIPS2_NWS/edex/gov.noaa.nws.ost.edex.plugin.stq/src/gov/noaa/nws/ost/edex/plugin/stq/SpotRequestParser.java @@ -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"); diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HRRR.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HRRR.xml index d43d2be031..098f3f02cc 100755 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HRRR.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HRRR.xml @@ -116,8 +116,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 @@ -387,8 +387,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwAK.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwAK.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwAK.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwAK.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwEast.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwEast.xml index 3840b3f55e..4060df3621 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwEast.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwEast.xml @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwHI.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwHI.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwHI.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwHI.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwSJU.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwSJU.xml index 3840b3f55e..4060df3621 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwSJU.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwSJU.xml @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwWest.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwWest.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwWest.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-arwWest.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmAK.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmAK.xml index 3840b3f55e..b9ac5038d4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmAK.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmAK.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmEast.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmEast.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmEast.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmEast.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmHI.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmHI.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmHI.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmHI.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmSJU.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmSJU.xml index 3840b3f55e..4060df3621 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmSJU.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmSJU.xml @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmWest.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmWest.xml index 3840b3f55e..38c905e848 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmWest.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/HiResW-nmmWest.xml @@ -223,8 +223,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -273,8 +273,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -476,8 +476,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn202.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn202.xml index 3ce0469f17..b4c88ecf3f 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn202.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn202.xml @@ -156,8 +156,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn203.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn203.xml index 0e06263460..4117a6cfb5 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn203.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn203.xml @@ -195,8 +195,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn211.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn211.xml index f5db1cec71..5daa5aaf64 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn211.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn211.xml @@ -301,8 +301,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn213.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn213.xml index 543d6b6ed4..71de01f84b 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn213.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn213.xml @@ -195,8 +195,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -247,8 +247,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn225.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn225.xml index de23a200e7..0b929d0953 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn225.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/avn225.xml @@ -211,8 +211,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -264,8 +264,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex185.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex185.xml index 28f73e85bc..3a905e0680 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex185.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex185.xml @@ -165,8 +165,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex186.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex186.xml index 28f73e85bc..3a905e0680 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex186.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/dgex186.xml @@ -165,8 +165,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta207.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta207.xml index 6c6fe6bbc4..4c266df4d7 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta207.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta207.xml @@ -222,8 +222,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -299,8 +299,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta211.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta211.xml index b9d1fac7ec..26665e2520 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta211.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta211.xml @@ -222,8 +222,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -298,8 +298,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta218.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta218.xml index db3e04e1f6..889ac34ce4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta218.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta218.xml @@ -367,8 +367,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -476,8 +476,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -670,8 +670,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta242.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta242.xml index db3e04e1f6..889ac34ce4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta242.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/eta242.xml @@ -367,8 +367,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -476,8 +476,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -670,8 +670,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/fcst.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/fcst.xml index c060409809..0cd02a81b8 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/fcst.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/fcst.xml @@ -760,9 +760,9 @@ sli lifted index - degrees Kelvin - -20000.0 - 20000.0 + degrees Celsius + -20.0 + 20.0 -99999.0 0 SFC diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs160.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs160.xml index 11b0a73104..0054728c26 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs160.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs160.xml @@ -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 --> @@ -357,8 +358,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -444,8 +445,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs161.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs161.xml index 11b0a73104..0054728c26 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs161.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs161.xml @@ -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 --> @@ -357,8 +358,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -444,8 +445,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs20km.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs20km.xml index e054767ad7..5850df77ca 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs20km.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs20km.xml @@ -384,8 +384,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -471,8 +471,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs212.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs212.xml index 0ee4ad35f3..3012fb448c 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs212.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs212.xml @@ -351,8 +351,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -438,8 +438,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs213.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs213.xml index f4e8f7ee49..7529ff6213 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs213.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs213.xml @@ -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 --> @@ -231,8 +232,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -274,8 +275,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs254.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs254.xml index 11b0a73104..0054728c26 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs254.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/gfs254.xml @@ -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 --> @@ -357,8 +358,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -444,8 +445,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/laps.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/laps.xml index 193ccadd14..51bab3d205 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/laps.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/laps.xml @@ -844,8 +844,8 @@ sli lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta215.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta215.xml index 519399c05b..eb759d3063 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta215.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta215.xml @@ -4,6 +4,7 @@ Date Ticket# Engineer Description 04/17/2013 #1913 randerso Corrected heli level + 06/13/2016 #17308 bhunder Corrected LI units --> @@ -238,8 +239,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -304,8 +305,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta217.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta217.xml index 99d0e0089f..76a27d60ca 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta217.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mesoEta217.xml @@ -4,6 +4,7 @@ Date Ticket# Engineer Description 04/17/2013 #1913 randerso Corrected heli level + 06/13/2016 #17308 bhunder Corrected LI units --> @@ -182,8 +183,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 50.0 @@ -362,8 +363,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mm5.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mm5.xml index 20d9e52736..c31ddda799 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mm5.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/mm5.xml @@ -815,8 +815,8 @@ sli lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/roc_rams.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/roc_rams.xml index 131f20fdd9..724519d249 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/roc_rams.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/roc_rams.xml @@ -830,8 +830,8 @@ sli lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/rsmMerc10km.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/rsmMerc10km.xml index f524a45ff9..bd5cbf5b89 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/rsmMerc10km.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/rsmMerc10km.xml @@ -213,8 +213,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 20.0 @@ -279,8 +279,8 @@ pli Parcel lifted index - K - degree_Kelvin + C + degree_Celsius parcLftInd -20.0 50.0 @@ -309,8 +309,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc130.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc130.xml index 1767c0c2c6..47d3079ada 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc130.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc130.xml @@ -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 --> @@ -122,8 +123,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 20.0 @@ -597,8 +598,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc211.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc211.xml index 368f82db12..e9696e1d78 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc211.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc211.xml @@ -242,8 +242,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 @@ -379,8 +379,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc236.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc236.xml index 79a60dc99d..3ac9b72746 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc236.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/ruc236.xml @@ -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 --> @@ -91,8 +92,8 @@ bli Best lifted index - K - degree_Kelvin + C + degree_Celsius bestLftInd -20.0 20.0 @@ -456,8 +457,8 @@ sli Surface lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/sfm.xml b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/sfm.xml index 2ee706e5dd..4a0a58acf5 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/sfm.xml +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/grid/parameterInfo/sfm.xml @@ -594,8 +594,8 @@ sli lifted index - K - degree_Kelvin + C + degree_Celsius LftInd -20.0 20.0 diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-AK-20KM.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-AK-20KM.xml new file mode 100755 index 0000000000..66cf814904 --- /dev/null +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-AK-20KM.xml @@ -0,0 +1,36 @@ + + + + GFS-AK-20KM + Grid over Alaska - Double Resolution grid (polar + stereographic) + 35.0 + -190.0 + LowerLeft + 277 + 225 + 22.5 + 22.5 + km + 6371229.0 + 6371229.0 + -150.0 + diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-PAC-20KM.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-PAC-20KM.xml index 936179db48..a2ff8d0edd 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-PAC-20KM.xml +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/grids/GFS-PAC-20KM.xml @@ -24,14 +24,14 @@ -45.0 110.0 LowerLeft - 737 - 661 + 837 + 725 20.0 20.0 km 6371229.0 6371229.0 20.0 - 60.232 - 250.967 + 65.345 + 270.000 diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml index 29736f127e..b69cb22d35 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml @@ -203,6 +203,30 @@ + + + GFS215 +
7
+ 0 + 215 + + 81 + 96 + +
+ + + + GFS217 +
7
+ 0 + GFS-AK-20KM + + 81 + 96 + +
+ GFS20-PAC diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/GeometryUtil.java b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/GeometryUtil.java index f6b75ef327..0ecebc50b1 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/GeometryUtil.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/GeometryUtil.java @@ -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). * * * @@ -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 intersection = new ArrayList( + 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 intersections, boolean ignoreUserData) { if (g1 instanceof GeometryCollection) { diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/VM_global_library.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/VM_global_library.vm index 615ce86cc9..1918d76c49 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/VM_global_library.vm +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/VM_global_library.vm @@ -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 ## diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.vm index 6a6712aa1b..243f4dc22f 100755 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.vm +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.vm @@ -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! diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.xml index 58c707bae6..16fa0469b6 100755 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.xml +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/extremeWindWarningFollowup.xml @@ -74,7 +74,8 @@ turned on unless the corresponding .vm file is turned on in a given template's . 30 - + +warnReason diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.vm index af5baddfd6..ac7683d35d 100755 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.vm +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.vm @@ -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 diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.xml index be16eb0a0a..1e52601341 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.xml +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/impactSevereWeatherStatement.xml @@ -167,7 +167,6 @@ turned on unless the corresponding .vm file is turned on in a given template's . - @@ -101,7 +102,7 @@ turned on unless the corresponding .vm file is turned on in a given template's . - + @@ -135,7 +136,7 @@ turned on unless the corresponding .vm file is turned on in a given template's . - + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/specialMarineWarningFollowup.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/specialMarineWarningFollowup.vm index 8cc3a94151..a3ccb0431f 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/specialMarineWarningFollowup.vm +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/specialMarineWarningFollowup.vm @@ -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 ####################################################################### diff --git a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/ScanUtils.java b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/ScanUtils.java index 9c98131123..62bfc51db1 100644 --- a/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/ScanUtils.java +++ b/edexOsgi/com.raytheon.uf.common.monitor/src/com/raytheon/uf/common/monitor/scan/ScanUtils.java @@ -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() * * * @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); } /** diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/src/com/raytheon/uf/edex/plugin/ffmp/common/FFMPProcessor.java b/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/src/com/raytheon/uf/edex/plugin/ffmp/common/FFMPProcessor.java index 98be8971b0..7fb5547a8f 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/src/com/raytheon/uf/edex/plugin/ffmp/common/FFMPProcessor.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.ffmp/src/com/raytheon/uf/edex/plugin/ffmp/common/FFMPProcessor.java @@ -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() * * * @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]; } } diff --git a/rpms/awips2.cave/Installer.cave/component.spec b/rpms/awips2.cave/Installer.cave/component.spec index 7072009b3f..88037262e9 100644 --- a/rpms/awips2.cave/Installer.cave/component.spec +++ b/rpms/awips2.cave/Installer.cave/component.spec @@ -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 diff --git a/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template b/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template index 0c90e0b0dd..3eb0172cfa 100644 --- a/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template +++ b/rpms/awips2.core/Installer.ldm/patch/etc/pqact.conf.template @@ -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