Merge branch 'master_14.3.1' (14.3.1-22m) into omaha_14.4.1

Conflicts:
	cave/com.raytheon.viz.volumebrowser/localization/menus/xml/fieldsMenus.xml
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java
	edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/ohdlib/GagePP.java
	edexOsgi/com.raytheon.uf.common.derivparam/utility/common_static/base/derivedParameters/definitions/T.xml
	edexOsgi/com.raytheon.uf.tools.cli/impl/src/textdb/TextDB.py

Former-commit-id: c8b5d89c2e202e8bb4ad59d9ced8882ec8c2a6c1
This commit is contained in:
Steve Harris 2014-09-29 12:58:56 -05:00
commit 3b6a8a1447
90 changed files with 4694 additions and 774 deletions

View file

@ -0,0 +1,22 @@
<?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.
-->
<DerivedParameter abbreviation="GVV1hr" name="Mean 1hr Geometric Vertical Velocity" unit="m/s" />

View file

@ -18,5 +18,8 @@
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
further_licensing_information.
-->
<DerivedParameter unit="" name="Max Lightning Threat (flashes/km^2)" abbreviation="LTNG">
<DerivedParameter unit="" name="Max 1hr Lightning Threat (flashes/km^2)" abbreviation="LTNG">
<Method name="Alias">
<Field abbreviation="LTNG1hr"/>
</Method>
</DerivedParameter>

View file

@ -0,0 +1,26 @@
<?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.
-->
<DerivedParameter abbreviation="MAXUPHL" name="Max 1hr Updraft Helicity" unit="m^2/s^2" >
<Method name="Alias" >
<Field abbreviation="MXUPHL1hr" />
</Method>
</DerivedParameter>

View file

@ -18,7 +18,7 @@
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
further_licensing_information.
-->
<DerivedParameter abbreviation="MAXDVV" name="Max Downdraft Vertical Velocity" unit="m/s" >
<DerivedParameter abbreviation="MXDVV" name="Max 1hr Downdraft Vertical Velocity" unit="m/s" >
<Method name="Alias">
<Field abbreviation="MAXDVV1hr"/>
</Method>

View file

@ -18,7 +18,7 @@
See_the_AWIPS_II_Master_Rights_File_("Master_Rights_File.pdf")_for
further_licensing_information.
-->
<DerivedParameter abbreviation="MAXUVV" name="Max Updraft Vertical Velocity" unit="m/s" >
<DerivedParameter abbreviation="MXUVV" name="Max 1hr Updraft Vertical Velocity" unit="m/s" >
<Method name="Alias">
<Field abbreviation="MAXUVV1hr"/>
</Method>

View file

@ -36486,8 +36486,6 @@ asseverates
asseverating
asseveration
asseveration's
asshole
assholes
assiduity
assiduity's
assiduous
@ -43045,14 +43043,6 @@ bullring
bullring's
bullrings
bulls
bullshit
bullshit's
bullshits
bullshitted
bullshitter
bullshitters
bullshitting
bullshitting's
bullwhip
bullwhip's
bullwhips
@ -46512,9 +46502,6 @@ chickening
chickenpox
chickenpox's
chickens
chickenshit
chickenshit's
chickenshits
chickpea
chickpea's
chickpeas
@ -51166,12 +51153,6 @@ coolly
coolness
coolness's
cools
coon
coon's
coons
coonskin
coonskin's
coonskins
coop
coop's
cooped
@ -53416,9 +53397,6 @@ cunning
cunninger
cunningest
cunningly
cunt
cunt's
cunts
cup
cup's
cupboard
@ -68596,15 +68574,6 @@ ftps
fuchsia
fuchsia's
fuchsias
fuck
fucked
fucker
fucker's
fuckers
fuckhead
fuckheads
fucking
fucks
fuddle
fuddled
fuddles
@ -75273,8 +75242,6 @@ horseradish
horseradish's
horseradishes
horses
horseshit
horseshit's
horseshoe
horseshoe's
horseshoed
@ -89871,10 +89838,6 @@ mother's
motherboard
motherboards
mothered
motherfucker
motherfucker's
motherfuckers
motherfucking
motherhood
motherhood's
mothering
@ -91702,9 +91665,6 @@ niggardliness
niggardliness's
niggardly
niggards
nigger
nigger's
niggers
niggle
niggled
niggler
@ -114184,21 +114144,8 @@ shirtwaist
shirtwaist's
shirtwaists
shirty
shit
shite
shites
shitfaced
shithead
shithead's
shitheads
shitload
shits
shitted
shittier
shittiest
shitting
shitting's
shitty
shiv
shiv's
shiver
@ -134581,9 +134528,6 @@ woozily
wooziness
wooziness's
woozy
wop
wop's
wops
word
word's
wordage

View file

@ -319,6 +319,7 @@
# ------------ ---------- ----------- --------------------------
# 02APR2014 17211 zhao (code obtained from the listserver via Virgil that implements a new rule regarding CB, TS etc)
# May 12, 2014 16928 zhao Modified check_prev_time()
# Sep 17, 2014 16928 zhao Added a line break "\n" to message 25 (since it appears together with message 49)
#
#
import exceptions, re, time, types
@ -356,7 +357,7 @@ or precipitation event (NWSI 10-813, Appendix C, 1.2.9.4)""",
22: """Invalid start hour""",
23: """Invalid day""",
24: """Issue and valid times do not match""",
25: """Group time period not within TAF forecast period""",
25: """Group time period not within TAF forecast period\n""",
26: """Only PROB30 is allowed""",
27: """The PROB group shall not be used in the first
9 hours of the valid TAF forecast

View file

@ -109,6 +109,7 @@ import com.vividsolutions.jts.geom.LineString;
* and generateExistingTrackInfo()
* 07-24-2014 3429 mapeters Updated deprecated drawLine() calls.
* 08-21-2014 DR 15700 Qinglu Lin handle the situation where frameTime is null in paintTrack().
* 09-09-2014 RM #657 Qinglu Lin handle StormTrackState.trackType is null.
*
* </pre>
*
@ -693,7 +694,8 @@ public class StormTrackDisplay implements IRenderable {
}
if (state.geomChanged) {
if (StormTrackState.trackType.equals("lineOfStorms") && state.justSwitchedToLOS) {
if (StormTrackState.trackType != null && StormTrackState.trackType.equals("lineOfStorms")
&& state.justSwitchedToLOS) {
GeodeticCalculator gc = new GeodeticCalculator();
Coordinate[] coords = state.dragMeGeom.getCoordinates();
gc.setStartingGeographicPoint(coords[0].x, coords[0].y);
@ -720,7 +722,8 @@ public class StormTrackDisplay implements IRenderable {
state.lineWidth, state.lineStyle);
paintLabels(target, paintProps);
}
if (StormTrackState.trackType.equals("lineOfStorms") && state.justSwitchedToLOS) {
if (StormTrackState.trackType != null && StormTrackState.trackType.equals("lineOfStorms")
&& state.justSwitchedToLOS) {
state.angle = StormTrackState.oneStormAngle;
}
}
@ -800,7 +803,7 @@ public class StormTrackDisplay implements IRenderable {
currentState.pointMoved = false;
currentState.originalTrack = false;
moved = true;
if (StormTrackState.trackType.equals("lineOfStorms") &&
if (StormTrackState.trackType != null && StormTrackState.trackType.equals("lineOfStorms") &&
currentState.justSwitchedToLOS) {
currentState.justSwitchedToLOS = false;
}
@ -1211,7 +1214,7 @@ public class StormTrackDisplay implements IRenderable {
double angle = state.angle;
if(!state.justSwitchedToOS) {
if (StormTrackState.trackType.equals("oneStorm")) {
if (StormTrackState.trackType != null && StormTrackState.trackType.equals("oneStorm")) {
StormTrackState.oneStormAngle = angle;
}
}

View file

@ -49,6 +49,7 @@ import com.vividsolutions.jts.geom.Point;
* 06-24-2013 DR 16317 D. Friedman Handle "motionless" track.
* 04-24-2014 DR 16356 Qinglu Lin Added newWarnGen, oneStormAngle, justSwitchedToLOS,
* justSwitchedToOS, and trackType.
* 06-24-2014 DR 17436 Qinglu Lin Assigned "unknown" to trackType.
*
* </pre>
*
@ -208,7 +209,7 @@ public class StormTrackState {
public boolean justSwitchedToOS = false;
public static String trackType = null;
public static String trackType = "unknown";
/** Compute the coordinate of the storm center at the time defined by dataTime via interpolation. */
public boolean compuateCurrentStormCenter(Coordinate coord, DataTime dateTime) {

View file

@ -0,0 +1,375 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# Erase - version 1.1
#
# Erase a feature - by "deleting" what is inside the editArea, and "filling
# in" with something "reasonable" based on the data outside the editArea.
# The "filling in" is done by performing an objective analysis using the
# "points around the outside of the editArea" as the "data points", and a
# a first guess of a "flat field". The results of the analysis are then
# returned INSIDE the editArea, with the data outside the editArea unchanged.
#
# Uses the serp routine of the ObjAnal utility to perform the analysis.
# Automatically "thins" the number of control points if the editArea is
# so large that it would affect performance.
#
# This "quick" version considers Topography in the objective analysis, and
# uses that analysis completely within the editArea. Thus, it can run
# immediately without pausing to ask the user for input. The EraseSmooth
# tool does the same, but without considering Topography. The ErasePartial
# allows the user to specify the topography influence and the "percentage"
# of erasing that is desired.
#
# Author: Tim Barker - SOO Boise, ID
# 2011-01-13 - version 1.0 - Original Implementation
# 2011-02-18 - version 1.1 - AWIPS-2 Port
#
# ----------------------------------------------------------------------------
ToolType = "numeric"
WeatherElementEdited = "variableElement"
ScreenList=["SCALAR","VECTOR"]
#
# Set elevFactor and percent directly
# rather than asking the user to provide them
#
elevFactor=36.0
percent=100.0
#
#
#
from numpy import *
import SmartScript,ObjAnal,copy,types
class Tool (SmartScript.SmartScript):
def __init__(self, dbss):
self._dbss=dbss
SmartScript.SmartScript.__init__(self, dbss)
def preProcessTool(self,varDict):
self.OA = ObjAnal.ObjAnal(self._dbss)
return
def execute(self, editArea, Topo, variableElement, variableElement_GridInfo, varDict):
"Erase Feature with Topo effects"
#
# Get a grid containing all points within 1 pixel of
# editArea (out1)
#
mask=self.encodeEditArea(editArea)*100
smooth1=self.smoothpm(mask,1)
out1=logical_and(greater(smooth1,0),less(mask,50))
#
# get list of all x,y coords that are on the edge
#
xl=[]
yl=[]
for iy in range(Topo.shape[0]):
for ix in range(Topo.shape[1]):
if out1[iy,ix]>0.5:
xl.append(ix)
yl.append(iy)
#
# Thin the points (if needed)
#
roughMax=250
if len(xl)>roughMax:
thinamt=float(len(xl))/float(roughMax)
(xpts,ypts)=self.thinpts(xl,yl,thinamt)
else:
xpts=xl
ypts=yl
#
# Figure out if vector, and if so, which piece (or pieces)
# of vector need to be modified. Use the doAnal routine
# to do the analysis.
#
wxType=variableElement_GridInfo.getGridType().toString()
#
# For SCALAR elements - just use doAnal to do the analysis
#
if wxType=="SCALAR":
finalGrid=self.doAnal(variableElement,xpts,ypts,elevFactor,Topo,mask,percent)
#
# For VECTOR elements - split apart the mag/dir of the incoming grid
#
elif wxType=="VECTOR":
(origMag,origDir)=variableElement
vecteditstring=self.getVectorEditMode()
#
# If only magnitude - use doAnal to do a scalar analysis on
# the magnitude, and use the original direction
#
if (vecteditstring=="Magnitude Only"):
finalMag=self.doAnal(origMag,xpts,ypts,elevFactor,Topo,mask,percent)
finalGrid=(finalMag,origDir)
#
# For "Dir Only", or "Both Mag/Dir" - do TWO analyses (one for
# U component, other for V component)
#
else:
(origU,origV)=self.MagDirToUV(origMag,origDir)
finalU=self.doAnal(origU,xpts,ypts,elevFactor,Topo,mask,percent)
finalV=self.doAnal(origV,xpts,ypts,elevFactor,Topo,mask,percent)
(finalMag,finalDir)=self.UVToMagDir(finalU,finalV)
#
# If "Dir Only", then return the new dir with the original
# magnitude
#
if (vecteditstring=="Direction Only"):
finalGrid=(origMag,finalDir)
#
# If "Both Mag/Dir", then return the full result of the
# combined U/V analyses
#
else:
finalGrid=(finalMag,finalDir)
#
# Return finalGrid
#
return finalGrid
#-----------------------------------------------------------------
#
# Do the scalar analysis - only replacing values inside the
# mask editArea
#
def doAnal(self,origGrid,xpts,ypts,elevFactor,Topo,mask,percent):
#
# Get values of the current grid on the points
#
xlist=[]
ylist=[]
zlist=[]
hlist=[]
for i in range(len(xpts)):
xp=xpts[i]
yp=ypts[i]
xlist.append(xp)
ylist.append(yp)
zlist.append(origGrid[yp,xp])
hlist.append(Topo[yp,xp])
#
# Do the analysis
#
analGrid=self.OA.Serp(zlist,xlist,ylist,hlist,elevFactor,Topo)
#
# Substitude the analysis values inside the editArea
#
pct=percent/100.0
pctold=1.0-pct
new=(analGrid*pct)+(origGrid*pctold)
finalGrid=where(mask,new,origGrid)
#
# Return the modified grid
#
return finalGrid
#-------------------------------------------------------------------
# Given a list of x,y coordinates of points - thin the list
# so that no points are closer than "num" gridpoints to another
#
def thinpts(self,xl,yl,num):
xc=copy.copy(xl)
yc=copy.copy(yl)
xpts=[]
ypts=[]
xp=xc[0]
yp=yc[0]
xpts.append(xp)
ypts.append(yp)
while len(xc)>0:
dlist=self.within(xp,yp,xc,yc,num)
dlist.sort()
dlist.reverse()
for i in range(len(dlist)):
del xc[dlist[i]]
del yc[dlist[i]]
del dlist
if len(xc)>0:
(xnear,ynear)=self.nearest(xp,yp,xc,yc)
xp=xnear
yp=ynear
xpts.append(xp)
ypts.append(yp)
#return
return(xpts,ypts)
#-------------------------------------------------------------------
# Return x,y of point nearest xp,yp
#
def nearest(self,xp,yp,xc,yc):
dist=9.0e10
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<dist:
xnear=xc[i]
ynear=yc[i]
return(xnear,ynear)
#-------------------------------------------------------------------
# Return list of point indices that are within num points of xp,yp
#
def within(self,xp,yp,xc,yc,num):
num2=num**2
clist=[]
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<num2:
clist.append(i)
return clist
#=======================================================================
#
# smoothpm - smooths grid by averaging over plus and minus k
# gridpoints, which means an average over a square 2k+1
# gridpoints on a side. If mask is specified, only
# smooth over the points that have mask=1, not any others.
#
# Near the edges it can't average over plus and minus
# - since some points would be off the grid - so it
# averages over all the points it can. For example, on
# the edge gridpoint - it can only come inside k points -
# so the average is over only k+1 points in that direction
# (though over all 2k+1 points in the other direction -
# if possible)
#
# Much faster by using the cumsum function in numeric.
# Total across the 2k+1 points is the cumsum at the last
# point minus the cumsum at the point before the first
# point. Only edge points need special handling - and
# cumsum is useful here too.
#
def smoothpm(self,grid,k,mask=None):
k=int(k) # has to be integer number of gridpoints
if (k<1): # has to be a positive number of gridpoints
return grid
(ny,nx)=grid.shape
k2=k*2
#
# Remove the minimum from the grid so that cumsum over a full
# row or column of the grid doesn't get so big that precision
# might be lost.
#
fullmin=minimum.reduce(minimum.reduce(grid))
gridmin=grid-fullmin
#
# No mask is simpler
#
if mask is None:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mid=grid*0.0
c=cumsum(gridmin,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]/float(jk+1)
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]/float(jk+1)
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])/float(k2+1)
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/float(jk+1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/float(jk+1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/float(k2+1)
#
# Add the minimum back in
#
out=out+fullmin
#
# Mask makes it a bit more difficult - have to find out how many
# points were in each cumsum - and have to deal with possible
# divide-by-zero errors
#
else:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mask=clip(mask,0,1)
gridmin1=where(mask,gridmin,0)
mid=grid*0.0
midd=grid*0.0
c=cumsum(gridmin1,0)
d=cumsum(mask,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]
midd[j,:]=d[jk,:]
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]
midd[nym1-j,:]=d[nym1]
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])
midd[nym1-j,:]=d[nym1,:]-d[jk2,:]
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])
midd[k+1:ny-k,:]=d[k2+1:,:]-d[:-k2-1,:]
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
d=cumsum(midd,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/maximum(d[:,jk],1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/maximum(d[:,nxm1],1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/maximum((d[:,nxm1]-d[:,jk2]),1)
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/maximum((d[:,k2+1:]-d[:,:-k2-1]),1)
#
# Add the minimum back in
#
out=where(mask,out+fullmin,grid)
return out

View file

@ -0,0 +1,377 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# ErasePartial - version 1.1
#
# Erase a feature - by "deleting" what is inside the editArea, and "filling
# in" with something "reasonable" based on the data outside the editArea.
# The "filling in" is done by performing an objective analysis using the
# "points around the outside of the editArea" as the "data points", and a
# a first guess of a "flat field". The results of the analysis are then
# returned INSIDE the editArea, with the data outside the editArea unchanged.
#
# Uses the serp routine of the ObjAnal utility to perform the analysis.
# Automatically "thins" the number of control points if the editArea is
# so large that it would affect performance.
#
# This version allows the user to specify the topography influence and
# the "percentage" of erasing that is desired. The "quick" version Erase
# sets the topography influence at 36.0 and percentage to 100%, so that
# the tool can run without user interaction. The EraseSmooth sets the
# topography value at 0, and the percentage at 100%, and also runs without
# user interaction.
#
# Author: Tim Barker - SOO Boise, ID
# 2011-01-13 - version 1.0 - Original Implementation
# 2011-02-18 - version 1.1 - AWIPS-2 Port
#
# ----------------------------------------------------------------------------
ToolType = "numeric"
WeatherElementEdited = "variableElement"
ScreenList=["SCALAR","VECTOR"]
#
# Ask user to set topography factor and percentage to erase
#
VariableList=[("Topography Factor:",36.0,"scale",[0.0,100.0]),
("Percentage Erase:",100.0,"scale",[0.0,100.0]),
]
#
#
#
from numpy import *
import SmartScript,ObjAnal,copy
class Tool (SmartScript.SmartScript):
def __init__(self, dbss):
self._dbss=dbss
SmartScript.SmartScript.__init__(self, dbss)
def preProcessTool(self,varDict):
self.OA = ObjAnal.ObjAnal(self._dbss)
return
def execute(self, editArea, Topo, variableElement, variableElement_GridInfo, varDict):
"Erase Feature with Topo effects"
elevFactor=varDict["Topography Factor:"]
percent=varDict["Percentage Erase:"]
#
# Get a grid containing all points within 1 pixel of
# editArea (out1)
#
mask=self.encodeEditArea(editArea)*100
smooth1=self.smoothpm(mask,1)
out1=logical_and(greater(smooth1,0),less(mask,50))
#
# get list of all x,y coords that are on the edge
#
xl=[]
yl=[]
for iy in range(Topo.shape[0]):
for ix in range(Topo.shape[1]):
if out1[iy,ix]>0.5:
xl.append(ix)
yl.append(iy)
#
# Thin the points (if needed)
#
roughMax=250
if len(xl)>roughMax:
thinamt=float(len(xl))/float(roughMax)
(xpts,ypts)=self.thinpts(xl,yl,thinamt)
else:
xpts=xl
ypts=yl
#
# Figure out if vector, and if so, which piece (or pieces)
# of vector need to be modified. Use the doAnal routine
# to do the analysis.
#
wxType=variableElement_GridInfo.getGridType().toString()
#
# For SCALAR elements - just use doAnal to do the analysis
#
if wxType=="SCALAR":
finalGrid=self.doAnal(variableElement,xpts,ypts,elevFactor,Topo,mask,percent)
#
# For VECTOR elements - split apart the mag/dir of the incoming grid
#
elif wxType=="VECTOR":
(origMag,origDir)=variableElement
vecteditstring=self.getVectorEditMode()
#
# If only magnitude - use doAnal to do a scalar analysis on
# the magnitude, and use the original direction
#
if (vecteditstring=="Magnitude Only"):
finalMag=self.doAnal(origMag,xpts,ypts,elevFactor,Topo,mask,percent)
finalGrid=(finalMag,origDir)
#
# For "Dir Only", or "Both Mag/Dir" - do TWO analyses (one for
# U component, other for V component)
#
else:
(origU,origV)=self.MagDirToUV(origMag,origDir)
finalU=self.doAnal(origU,xpts,ypts,elevFactor,Topo,mask,percent)
finalV=self.doAnal(origV,xpts,ypts,elevFactor,Topo,mask,percent)
(finalMag,finalDir)=self.UVToMagDir(finalU,finalV)
#
# If "Dir Only", then return the new dir with the original
# magnitude
#
if (vecteditstring=="Direction Only"):
finalGrid=(origMag,finalDir)
#
# If "Both Mag/Dir", then return the full result of the
# combined U/V analyses
#
else:
finalGrid=(finalMag,finalDir)
#
# Return finalGrid
#
return finalGrid
#-----------------------------------------------------------------
#
# Do the scalar analysis - only replacing values inside the
# mask editArea
#
def doAnal(self,origGrid,xpts,ypts,elevFactor,Topo,mask,percent):
#
# Get values of the current grid on the points
#
xlist=[]
ylist=[]
zlist=[]
hlist=[]
for i in range(len(xpts)):
xp=xpts[i]
yp=ypts[i]
xlist.append(xp)
ylist.append(yp)
zlist.append(origGrid[yp,xp])
hlist.append(Topo[yp,xp])
#
# Do the analysis
#
analGrid=self.OA.Serp(zlist,xlist,ylist,hlist,elevFactor,Topo)
#
# Substitude the analysis values inside the editArea
#
pct=percent/100.0
pctold=1.0-pct
new=(analGrid*pct)+(origGrid*pctold)
finalGrid=where(mask,new,origGrid)
#
# Return the modified grid
#
return finalGrid
#-------------------------------------------------------------------
# Given a list of x,y coordinates of points - thin the list
# so that no points are closer than "num" gridpoints to another
#
def thinpts(self,xl,yl,num):
xc=copy.copy(xl)
yc=copy.copy(yl)
xpts=[]
ypts=[]
xp=xc[0]
yp=yc[0]
xpts.append(xp)
ypts.append(yp)
while len(xc)>0:
dlist=self.within(xp,yp,xc,yc,num)
dlist.sort()
dlist.reverse()
for i in range(len(dlist)):
del xc[dlist[i]]
del yc[dlist[i]]
del dlist
if len(xc)>0:
(xnear,ynear)=self.nearest(xp,yp,xc,yc)
xp=xnear
yp=ynear
xpts.append(xp)
ypts.append(yp)
#return
return(xpts,ypts)
#-------------------------------------------------------------------
# Return x,y of point nearest xp,yp
#
def nearest(self,xp,yp,xc,yc):
dist=9.0e10
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<dist:
xnear=xc[i]
ynear=yc[i]
return(xnear,ynear)
#-------------------------------------------------------------------
# Return list of point indices that are within num points of xp,yp
#
def within(self,xp,yp,xc,yc,num):
num2=num**2
clist=[]
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<num2:
clist.append(i)
return clist
#=======================================================================
#
# smoothpm - smooths grid by averaging over plus and minus k
# gridpoints, which means an average over a square 2k+1
# gridpoints on a side. If mask is specified, only
# smooth over the points that have mask=1, not any others.
#
# Near the edges it can't average over plus and minus
# - since some points would be off the grid - so it
# averages over all the points it can. For example, on
# the edge gridpoint - it can only come inside k points -
# so the average is over only k+1 points in that direction
# (though over all 2k+1 points in the other direction -
# if possible)
#
# Much faster by using the cumsum function in numeric.
# Total across the 2k+1 points is the cumsum at the last
# point minus the cumsum at the point before the first
# point. Only edge points need special handling - and
# cumsum is useful here too.
#
def smoothpm(self,grid,k,mask=None):
k=int(k) # has to be integer number of gridpoints
if (k<1): # has to be a positive number of gridpoints
return grid
(ny,nx)=grid.shape
k2=k*2
#
# Remove the minimum from the grid so that cumsum over a full
# row or column of the grid doesn't get so big that precision
# might be lost.
#
fullmin=minimum.reduce(minimum.reduce(grid))
gridmin=grid-fullmin
#
# No mask is simpler
#
if mask is None:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mid=grid*0.0
c=cumsum(gridmin,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]/float(jk+1)
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]/float(jk+1)
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])/float(k2+1)
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/float(jk+1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/float(jk+1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/float(k2+1)
#
# Add the minimum back in
#
out=out+fullmin
#
# Mask makes it a bit more difficult - have to find out how many
# points were in each cumsum - and have to deal with possible
# divide-by-zero errors
#
else:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mask=clip(mask,0,1)
gridmin1=where(mask,gridmin,0)
mid=grid*0.0
midd=grid*0.0
c=cumsum(gridmin1,0)
d=cumsum(mask,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]
midd[j,:]=d[jk,:]
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]
midd[nym1-j,:]=d[nym1]
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])
midd[nym1-j,:]=d[nym1,:]-d[jk2,:]
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])
midd[k+1:ny-k,:]=d[k2+1:,:]-d[:-k2-1,:]
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
d=cumsum(midd,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/maximum(d[:,jk],1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/maximum(d[:,nxm1],1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/maximum((d[:,nxm1]-d[:,jk2]),1)
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/maximum((d[:,k2+1:]-d[:,:-k2-1]),1)
#
# Add the minimum back in
#
out=where(mask,out+fullmin,grid)
return out

View file

@ -0,0 +1,375 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# EraseSmooth - version 1.1
#
# Erase a feature - by "deleting" what is inside the editArea, and "filling
# in" with something "reasonable" based on the data outside the editArea.
# The "filling in" is done by performing an objective analysis using the
# "points around the outside of the editArea" as the "data points", and a
# a first guess of a "flat field". The results of the analysis are then
# returned INSIDE the editArea, with the data outside the editArea unchanged.
#
# Uses the serp routine of the ObjAnal utility to perform the analysis.
# Automatically "thins" the number of control points if the editArea is
# so large that it would affect performance.
#
# This "quick" version does not consider Topography in the objective
# analysis, and uses that analysis completely within the editArea. Thus,
# it can run immediately without pausing to ask the user for input. The
# Erase tool does the same (but considers Topography). The ErasePartial
# allows the user to specify the topography influence and the "percentage"
# of erasing that is desired.
#
# Author: Tim Barker - SOO Boise, ID
# 2011-01-13 - version 1.0 - Original Implementation
# 2011-02-18 - version 1.1 - AWIPS-2 port
#
# ----------------------------------------------------------------------------
ToolType = "numeric"
WeatherElementEdited = "variableElement"
ScreenList=["SCALAR","VECTOR"]
#
# Set elevFactor and percent directly
# rather than asking the user to provide them
#
elevFactor=0.0
percent=100.0
#
#
#
from numpy import *
import SmartScript,ObjAnal,copy
class Tool (SmartScript.SmartScript):
def __init__(self, dbss):
self._dbss=dbss
SmartScript.SmartScript.__init__(self, dbss)
def preProcessTool(self,varDict):
self.OA = ObjAnal.ObjAnal(self._dbss)
return
def execute(self, editArea, Topo, variableElement, variableElement_GridInfo, varDict):
"Erase Feature with Topo effects"
#
# Get a grid containing all points within 1 pixel of
# editArea (out1)
#
mask=self.encodeEditArea(editArea)*100
smooth1=self.smoothpm(mask,1)
out1=logical_and(greater(smooth1,0),less(mask,50))
#
# get list of all x,y coords that are on the edge
#
xl=[]
yl=[]
for iy in range(Topo.shape[0]):
for ix in range(Topo.shape[1]):
if out1[iy,ix]>0.5:
xl.append(ix)
yl.append(iy)
#
# Thin the points (if needed)
#
roughMax=250
if len(xl)>roughMax:
thinamt=float(len(xl))/float(roughMax)
(xpts,ypts)=self.thinpts(xl,yl,thinamt)
else:
xpts=xl
ypts=yl
#
# Figure out if vector, and if so, which piece (or pieces)
# of vector need to be modified. Use the doAnal routine
# to do the analysis.
#
wxType=variableElement_GridInfo.getGridType().toString()
#
# For SCALAR elements - just use doAnal to do the analysis
#
if wxType=="SCALAR":
finalGrid=self.doAnal(variableElement,xpts,ypts,elevFactor,Topo,mask,percent)
#
# For VECTOR elements - split apart the mag/dir of the incoming grid
#
elif wxType=="VECTOR":
(origMag,origDir)=variableElement
vecteditstring=self.getVectorEditMode()
#
# If only magnitude - use doAnal to do a scalar analysis on
# the magnitude, and use the original direction
#
if (vecteditstring=="Magnitude Only"):
finalMag=self.doAnal(origMag,xpts,ypts,elevFactor,Topo,mask,percent)
finalGrid=(finalMag,origDir)
#
# For "Dir Only", or "Both Mag/Dir" - do TWO analyses (one for
# U component, other for V component)
#
else:
(origU,origV)=self.MagDirToUV(origMag,origDir)
finalU=self.doAnal(origU,xpts,ypts,elevFactor,Topo,mask,percent)
finalV=self.doAnal(origV,xpts,ypts,elevFactor,Topo,mask,percent)
(finalMag,finalDir)=self.UVToMagDir(finalU,finalV)
#
# If "Dir Only", then return the new dir with the original
# magnitude
#
if (vecteditstring=="Direction Only"):
finalGrid=(origMag,finalDir)
#
# If "Both Mag/Dir", then return the full result of the
# combined U/V analyses
#
else:
finalGrid=(finalMag,finalDir)
#
# Return finalGrid
#
return finalGrid
#-----------------------------------------------------------------
#
# Do the scalar analysis - only replacing values inside the
# mask editArea
#
def doAnal(self,origGrid,xpts,ypts,elevFactor,Topo,mask,percent):
#
# Get values of the current grid on the points
#
xlist=[]
ylist=[]
zlist=[]
hlist=[]
for i in range(len(xpts)):
xp=xpts[i]
yp=ypts[i]
xlist.append(xp)
ylist.append(yp)
zlist.append(origGrid[yp,xp])
hlist.append(Topo[yp,xp])
#
# Do the analysis
#
analGrid=self.OA.Serp(zlist,xlist,ylist,hlist,elevFactor,Topo)
#
# Substitude the analysis values inside the editArea
#
pct=percent/100.0
pctold=1.0-pct
new=(analGrid*pct)+(origGrid*pctold)
finalGrid=where(mask,new,origGrid)
#
# Return the modified grid
#
return finalGrid
#-------------------------------------------------------------------
# Given a list of x,y coordinates of points - thin the list
# so that no points are closer than "num" gridpoints to another
#
def thinpts(self,xl,yl,num):
xc=copy.copy(xl)
yc=copy.copy(yl)
xpts=[]
ypts=[]
xp=xc[0]
yp=yc[0]
xpts.append(xp)
ypts.append(yp)
while len(xc)>0:
dlist=self.within(xp,yp,xc,yc,num)
dlist.sort()
dlist.reverse()
for i in range(len(dlist)):
del xc[dlist[i]]
del yc[dlist[i]]
del dlist
if len(xc)>0:
(xnear,ynear)=self.nearest(xp,yp,xc,yc)
xp=xnear
yp=ynear
xpts.append(xp)
ypts.append(yp)
#return
return(xpts,ypts)
#-------------------------------------------------------------------
# Return x,y of point nearest xp,yp
#
def nearest(self,xp,yp,xc,yc):
dist=9.0e10
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<dist:
xnear=xc[i]
ynear=yc[i]
return(xnear,ynear)
#-------------------------------------------------------------------
# Return list of point indices that are within num points of xp,yp
#
def within(self,xp,yp,xc,yc,num):
num2=num**2
clist=[]
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<num2:
clist.append(i)
return clist
#=======================================================================
#
# smoothpm - smooths grid by averaging over plus and minus k
# gridpoints, which means an average over a square 2k+1
# gridpoints on a side. If mask is specified, only
# smooth over the points that have mask=1, not any others.
#
# Near the edges it can't average over plus and minus
# - since some points would be off the grid - so it
# averages over all the points it can. For example, on
# the edge gridpoint - it can only come inside k points -
# so the average is over only k+1 points in that direction
# (though over all 2k+1 points in the other direction -
# if possible)
#
# Much faster by using the cumsum function in numeric.
# Total across the 2k+1 points is the cumsum at the last
# point minus the cumsum at the point before the first
# point. Only edge points need special handling - and
# cumsum is useful here too.
#
def smoothpm(self,grid,k,mask=None):
k=int(k) # has to be integer number of gridpoints
if (k<1): # has to be a positive number of gridpoints
return grid
(ny,nx)=grid.shape
k2=k*2
#
# Remove the minimum from the grid so that cumsum over a full
# row or column of the grid doesn't get so big that precision
# might be lost.
#
fullmin=minimum.reduce(minimum.reduce(grid))
gridmin=grid-fullmin
#
# No mask is simpler
#
if mask is None:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mid=grid*0.0
c=cumsum(gridmin,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]/float(jk+1)
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]/float(jk+1)
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])/float(k2+1)
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/float(jk+1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/float(jk+1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/float(k2+1)
#
# Add the minimum back in
#
out=out+fullmin
#
# Mask makes it a bit more difficult - have to find out how many
# points were in each cumsum - and have to deal with possible
# divide-by-zero errors
#
else:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mask=clip(mask,0,1)
gridmin1=where(mask,gridmin,0)
mid=grid*0.0
midd=grid*0.0
c=cumsum(gridmin1,0)
d=cumsum(mask,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]
midd[j,:]=d[jk,:]
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]
midd[nym1-j,:]=d[nym1]
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])
midd[nym1-j,:]=d[nym1,:]-d[jk2,:]
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])
midd[k+1:ny-k,:]=d[k2+1:,:]-d[:-k2-1,:]
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
d=cumsum(midd,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/maximum(d[:,jk],1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/maximum(d[:,nxm1],1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/maximum((d[:,nxm1]-d[:,jk2]),1)
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/maximum((d[:,k2+1:]-d[:,:-k2-1]),1)
#
# Add the minimum back in
#
out=where(mask,out+fullmin,grid)
return out

View file

@ -0,0 +1,786 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# SVN: $Revision: 130 $ $Date: 2010-07-30 17:45:24 +0000 (Fri, 30 Jul 2010) $
#
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# Serp - version 2.6 (AWIPS-2)
#
# Changes the existing field by asking the user to set values at control
# points, then fitting a surface to all the changes (using "serpentine"
# curves), and adding that change grid onto the existing grid. The new
# grid will exactly match the values specified at the control points.
#
# When run over an edit area, only control points "inside" the edit area
# are used. In addition, many "bogus" control points with "no change" are
# added around the edge of the edit area, so that the changes made inside
# blend in nicely to the areas outside the edit area that are not changed.
#
# Original Serpentine Algorithm Author: Les Colin - WFO Boise, ID
# Python implmentation: Tim Barker - SOO Boise, ID
#
# History:---------------------------------------------------------------------
# 2012/03/27 - version 2.6 : Tim Barker : making clearer GMSG-style config
# syntax. And fixing bad version in latest_stable.
# 2012/03/04 - version 2.5 : Tim Barker : changed GMSG-style config syntax
# again.
# 2012/02/25 - version 2.4 : Tim Barker : GMSG-style config added, Fixed:
# problems when using current samples, issues with parm
# precision, cleanup of code for readability, remove last global
# passing thru to GUI class instead.
# 2011/03/14 - version 2.3 : Tim Barker : Fix issues with getGridCell now
# returning floats
# 2011/03/05 - version 2.2 : Tim Barker : Adding features that were in the
# AWIPS-1 version 1.15
# 2010/07/30 - verison 2.0 : Paul Jendrowski : Preliminary AWIPS 2 version
#==============================================================================
#
#
#
ToolType="numeric"
WeatherElementEdited = "variableElement"
ScreenList = ["SCALAR","VECTOR"]
#
# Imports
#
from numpy import *
import ObjAnal
import SmartScript
import copy
import LogStream
from math import log10
import Tkinter
#
# Get site configuration
#
import SerpConfig as SC
#
# Set defauls if not set in site configuration
#
if "Locations" not in SC.Config:
SC.Config["Locations"]={"Bad Config 1":[("Bad Config 1",40.0,-110.0),
("Bad Config 2",40.1,-110.0)],
"Bad Config 2":[("Bad Config 3",40.2,-110.0),
("Bad Config 4",40.3,-110.0)]}
if "DefaultGroup" not in SC.Config:
SC.Config["DefaultGroup"]="Bad Config 1"
if "MaxPointsInColumn" not in SC.Config:
SC.Config["MaxPointsInColumn"]=10
if "ElevationDefault" not in SC.Config:
SC.Config["ElevationDefault"]="On"
#
# The initial tool dialog - where major options are set
#
VariableList=[]
VariableList.append(("Options for Serp Tool","","label"))
keys=["Current Samples"]
for key in SC.Config["Locations"].keys():
keys.append(key)
VariableList.append(("Sample Set:",SC.Config["DefaultGroup"],"radio",keys))
VariableList.append(("Elevation Adjustment",SC.Config["ElevationDefault"],"radio",["On","Off"]))
VariableList.append(("Elevation Factor",36,"numeric"))
#
# The actual Tool
#
class Tool (SmartScript.SmartScript):
def __init__(self,dbss):
self._dbss=dbss
SmartScript.SmartScript.__init__(self,dbss)
self.tkroot=None
#
# Global variables used throughout
#
self.guiInfo={}
self.guiInfo['vectedit']=0
self.guiInfo['minvalue']=0
self.guiInfo['maxvalue']=100
self.guiInfo['resolution']=0
self.guiInfo['masterlabel']="xxx"
def preProcessTool(self,varDict):
self.OA = ObjAnal.ObjAnal(self._dbss)
self.setname=varDict["Sample Set:"]
if varDict["Elevation Adjustment"]=="On":
self.elevfactor=varDict["Elevation Factor"]
else:
self.elevfactor=0.0
if self.elevfactor<1:
self.elevfactor=0.0
#---------------------------------------------------------------------------
#
def execute(self, Topo, variableElement,variableElement_GridInfo, WEname,
GridTimeRange, editArea):
#
# get variable type, get the vector edit mode, change the variable
# name if we are modifying only a part of a vector, get the min/max
# values for the sliders
#
wxType=variableElement_GridInfo.getGridType().toString()
UpdatedName=self.getVectEdit(WEname,wxType)
self.getResolution(variableElement_GridInfo)
self.getMinMaxValue(variableElement_GridInfo)
self.getMasterLabel(GridTimeRange,UpdatedName)
#
# setup mask for editArea
#
editAreaMask=self.setupEditAreaMask(editArea)
#
# if user wants the current sample set, set up the
# locations array with those values
#
if self.setname=="Current Samples":
err=self.addCurrentSamples(Topo)
if (err==1):
self.statusBarMsg("No sample points defined","U")
self.cancel()
#
# setup sliders with current value at each point
# and save the current values for later
#
err=self.setInitValues(wxType,variableElement,editAreaMask,Topo)
if (err==1):
self.statusBarMsg("No control points defined","U")
self.cancel()
#
# Run the dialog which is a new Tkinter root window every time execute runs.
# The dialog will halt execution of the main processing until the dialog
# window is destroyed. The values from the GUI will be in an attribute of
# the ControlValues instance.
#
dialog=ControlValues(self.guiInfo, SC.Config["MaxPointsInColumn"], "Set Control Values")
dialog.mainloop()
if (dialog.result!="OK"):
self.cancel()
#
# If the user pressed OK, get the changes and get the
# remoteness, the average min distance to other control
# points, and the distance weights from each control point
# to all other gridpoints (all values that will be used
# later in the serp algorithm)
#
self.getChangeValues(self.guiInfo['vectedit'],
dialog.Values,
self.guiInfo['InitValues'],
self.InitDirs,
self.InitSpeeds
)
#
# Handle adding no-change points around the outside of the
# editArea, if the tool is not operating on the whole grid.
#
self.handleEditArea(editAreaMask)
#
# Calculate the change grid
#
zval=self.OA.Serp(self.zlist,self.xloclist,self.yloclist,self.hloclist,
self.elevfactor,Topo)
#
# add result to the original values -
# OR - for vectors, modify the speed/dir
#
absmax=variableElement_GridInfo.getMaxValue()
absmin=variableElement_GridInfo.getMinValue()
if wxType=='SCALAR': # scalar
return clip(variableElement+zval,absmin,absmax)
if wxType=='VECTOR': # vector
speed=variableElement[0]
direc=variableElement[1]
if (self.guiInfo['vectedit']==1):
newspd=speed
newdir=direc+zval
newdir=where(greater(newdir,360),subtract(newdir,360),newdir)
newdir=where(less(newdir,0),add(newdir,360),newdir)
elif (self.guiInfo['vectedit']==0):
newspd=clip(speed+zval,absmin,absmax)
newdir=direc
else:
newspd=clip(speed+zval,absmin,absmax)
zval=self.OA.Serp(self.ylist,self.xloclist,self.yloclist,self.hloclist,
self.elevfactor,Topo)
newdir=direc+zval
newdir=where(greater(newdir,360),subtract(newdir,360),newdir)
newdir=where(less(newdir,0),add(newdir,360),newdir)
return (newspd,newdir)
#---------------------------------------------------------------------------
#
# Make label for controlpoint dialog with timerange of grid
#
def getMasterLabel(self,GridTimeRange,WEname):
startday=GridTimeRange.startTime().day
starthour=GridTimeRange.startTime().hour
endday=GridTimeRange.endTime().day
endhour=GridTimeRange.endTime().hour
self.guiInfo["masterlabel"]="Set %s for %d / %2.2dZ --> %d / %2.2dZ" % (WEname,
startday,starthour,endday,endhour)
return
#---------------------------------------------------------------------------
#
# Get the vector edit mode (and modify WEname if needed),
# vectedit=0 if a scalar or a vector modifying only magnitude
# vectedit=1 if a vector modifying direction only
# vectedit=2 if a vector modifying both
#
def getVectEdit(self,WEname,wxType):
self.guiInfo["vectedit"]=0
if (wxType=='VECTOR'):
vecteditstring=self.getVectorEditMode()
if (vecteditstring=="Magnitude Only"):
self.guiInfo["vectedit"]=0
WEname+="Spd"
if (vecteditstring=="Direction Only"):
self.guiInfo["vectedit"]=1
WEname+="Dir"
if (vecteditstring=="Both"):
self.guiInfo["vectedit"]=2
return(WEname)
#---------------------------------------------------------------------------
#
# Get the resolution of changes (i.e. 0.01 for QPF, 0.1 for SnowAmount)
# by using the parm precision information
#
def getResolution(self,variableElement_GridInfo):
precision=variableElement_GridInfo.getPrecision()
if (precision==0):
self.guiInfo["resolution"]=1.0
else:
self.guiInfo["resolution"]=1.0/(10**precision)
return
#---------------------------------------------------------------------------
#
# Get the minimum/maximum value for the sliders from the variable
# max/min limits
#
def getMinMaxValue(self,variableElement_GridInfo):
self.guiInfo["minvalue"]=variableElement_GridInfo.getMinValue()
self.guiInfo["maxvalue"]=variableElement_GridInfo.getMaxValue()
if (self.guiInfo["vectedit"]==1):
self.guiInfo["minvalue"]=0
self.guiInfo["maxvalue"]=360
return
#---------------------------------------------------------------------------
#
# Add the current sample point lat/lon to the Locations array
# return an err of 1 if no sample points are currently specified
# return an err of 0 if some sample points were found
#
def addCurrentSamples(self,Topo):
shape1=Topo.shape
ymax=shape1[0]-1
xmax=shape1[1]-1
self.samplePoints = self.getSamplePoints(None)
curpoints=[]
for sample in self.samplePoints:
(x,y)=sample
if (x<0)or(x>xmax)or(y<0)or(y>ymax):
LogStream.logEvent("serp:sample point at %d,%d is off GFE grid - ignored"%(x,y))
continue
(lat,lon)=self.getLatLon(x,y)
label="%5.2f %7.2f" % (lat,lon)
curpoints.append((label,lat,lon))
if (len(curpoints)<1):
return 1
SC.Config["Locations"]["Current Samples"]=curpoints
return 0
#---------------------------------------------------------------------------
#
# Limit direction changes to +/- 180 degrees
#
def limitDirChange(self,dirchg):
while dirchg>180:
dirchg=dirchg-360
while dirchg<-180:
dirchg=dirchg+360
return dirchg
#---------------------------------------------------------------------------
#
# setup InitValues array with current values at points,
# as well as xloclist, yloclist, hloclist with location/elevation at points
#
def setInitValues(self,wxType,variableElement,editAreaMask,Topo):
self.xloclist=[]
self.yloclist=[]
self.hloclist=[]
self.guiInfo['InitValues']=[]
self.guiInfo['Labels']=[]
self.InitSpeeds=[]
self.InitDirs=[]
for i in range(len(SC.Config["Locations"][self.setname])):
(name,lat,lon)=SC.Config["Locations"][self.setname][i]
(x,y)=self.getGridCell(lat,lon)
if ((x is None)or(y is None)):
msg="serp:point %s ignored because it is off the GFE grid"%name
LogStream.logEvent(msg)
continue
#
# Ignore sites not on the GFE grid
#
xint=int(round(x,0)+0.5)
yint=int(round(y,0)+0.5)
if (editAreaMask[yint,xint]<0.5):
LogStream.logEvent("serp:point %s ignored because it is not in editArea"%name)
continue
#
# ignore sites at a gridpoint already included
#
if ((xint in self.xloclist) and (yint in self.yloclist)):
skip=0
for j in range(len(self.xloclist)):
if ((xint==self.xloclist[j])and(yint==self.yloclist[j])):
skip=1
continue
if (skip==1):
LogStream.logEvent("serp:point %s ignored because gridpoint is already a control point"%name)
continue
#
# append location to control point list
#
self.guiInfo['Labels'].append(name)
elev=Topo[yint,xint]
self.hloclist.append(elev)
self.xloclist.append(xint)
self.yloclist.append(yint)
#
# get initial value at control points
#
if wxType=='SCALAR':
current=self.round(variableElement[yint,xint],"Nearest",self.guiInfo['resolution'])
else:
if (self.guiInfo['vectedit']==0):
current=self.round(variableElement[0][yint,xint],"Nearest",self.guiInfo['resolution'])
elif (self.guiInfo['vectedit']==1):
current=self.round(variableElement[1][yint,xint],"Nearest",self.guiInfo['resolution'])
else:
curspd=variableElement[0][yint,xint]
curdir=variableElement[1][yint,xint]
self.InitSpeeds.append(curspd)
self.InitDirs.append(curdir)
current="%3d@%-3d" % (int(curdir+0.5),int(curspd+0.5))
self.guiInfo['InitValues'].append(current)
#
# return error if no points in control point list
#
if (len(self.xloclist)<1):
return 1
return 0
#---------------------------------------------------------------------------
#
# get change values at every point (zlist), if a vector change - also get ylist
#
def getChangeValues(self,vectedit,Values,InitValues,InitDirs,InitSpeeds):
self.zlist=[];
self.ylist=[];
for i in range(len(InitValues)):
if (vectedit==2):
valreturn=Values[i]
(dirstr,spdstr)=valreturn.split("@")
dir1=int(dirstr)
spd1=int(spdstr)
dirchg=self.limitDirChange(dir1-InitDirs[i])
spdchg=spd1-InitSpeeds[i]
self.zlist.append(spdchg)
self.ylist.append(dirchg)
else:
change=Values[i]-InitValues[i]
if (vectedit==1):
change=self.limitDirChange(change)
self.zlist.append(change)
#------------------------------------------------------------------------------
#
# setupEditAreaMask - sets up a mask for gridpoints inside the editArea
#
def setupEditAreaMask(self,editArea):
if editArea is None:
mask=self.getTopo()*0
else:
mask=self.encodeEditArea(editArea)
return mask
#------------------------------------------------------------------------------
#
# handleEditArea - if an editArea is specified, then it adds in "bogus"
# control points that specify "no change" just outside the border of
# the editArea
#
def handleEditArea(self,editAreaMask):
#
# If editArea include all gridpoints - then no bogus points are
# needed
#
Topo=self.getTopo()
allpts=add.reduce(add.reduce(less(Topo*0.0,5)))
numpts=add.reduce(add.reduce(editAreaMask))
if numpts==allpts:
return
#
# make out1 a grid that is 1 for all pixels just outside the
# editArea
#
mask=editAreaMask*100
smooth1=self.smoothpm(mask,1)
out1=logical_and(greater(smooth1,0),less(mask,50))
#
# get list of all x,y coords that are on the edge
#
xl=[]
yl=[]
for iy in range(Topo.shape[0]):
for ix in range(Topo.shape[1]):
if out1[iy,ix]>0.5:
xl.append(ix)
yl.append(iy)
#
# Thin the points (if needed)
#
roughMax=250
if len(xl)>roughMax:
thinamt=float(len(xl))/float(roughMax)
(xpts,ypts)=self.thinpts(xl,yl,thinamt)
else:
xpts=xl
ypts=yl
#
# We can simply add these points to the list of points.
# Normally, we would have to be careful to make sure that
# a duplicate point did not exist. But here, all the normal
# control points are inside the editArea, and all these
# added "bogus" points are outside the editArea, so they are
# guaranteed to not be a duplicate of the others
#
for i in range(len(xpts)):
elev=Topo[ypts[i],xpts[i]]
self.hloclist.append(elev)
self.xloclist.append(xpts[i])
self.yloclist.append(ypts[i])
self.zlist.append(0.0)
self.ylist.append(0.0)
#
#
#
return
#-------------------------------------------------------------------
# Given a list of x,y coordinates of points - thin the list
# so that no points are closer than "num" gridpoints to another
#
def thinpts(self,xl,yl,num):
xc=copy.copy(xl)
yc=copy.copy(yl)
xpts=[]
ypts=[]
xp=xc[0]
yp=yc[0]
xpts.append(xp)
ypts.append(yp)
while len(xc)>0:
dlist=self.within(xp,yp,xc,yc,num)
dlist.sort()
dlist.reverse()
for i in range(len(dlist)):
del xc[dlist[i]]
del yc[dlist[i]]
del dlist
if len(xc)>0:
(xnear,ynear)=self.nearest(xp,yp,xc,yc)
xp=xnear
yp=ynear
xpts.append(xp)
ypts.append(yp)
return(xpts,ypts)
#-------------------------------------------------------------------
# Return x,y of point nearest xp,yp
#
def nearest(self,xp,yp,xc,yc):
dist=9.0e10
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<dist:
xnear=xc[i]
ynear=yc[i]
return(xnear,ynear)
#-------------------------------------------------------------------
# Return list of point indices that are within num points of xp,yp
#
def within(self,xp,yp,xc,yc,num):
num2=num**2
clist=[]
for i in range(len(xc)):
dif2=((xc[i]-xp)**2)+((yc[i]-yp)**2)
if dif2<num2:
clist.append(i)
return clist
#=======================================================================
#
# smoothpm - smooths grid by averaging over plus and minus k
# gridpoints, which means an average over a square 2k+1
# gridpoints on a side. If mask is specified, only
# smooth over the points that have mask=1, not any others.
#
# Near the edges it can't average over plus and minus
# - since some points would be off the grid - so it
# averages over all the points it can. For example, on
# the edge gridpoint - it can only come inside k points -
# so the average is over only k+1 points in that direction
# (though over all 2k+1 points in the other direction -
# if possible)
#
# Much faster by using the cumsum function in numpy.
# Total across the 2k+1 points is the cumsum at the last
# point minus the cumsum at the point before the first
# point. Only edge points need special handling - and
# cumsum is useful here too.
#
def smoothpm(self,grid,k,mask=None):
k=int(k) # has to be integer number of gridpoints
if (k<1): # has to be a positive number of gridpoints
return grid
(ny,nx)=grid.shape
k2=k*2
#
# Remove the minimum from the grid so that cumsum over a full
# row or column of the grid doesn't get so big that precision
# might be lost.
#
fullmin=minimum.reduce(minimum.reduce(grid))
gridmin=grid-fullmin
#
# No mask is simpler
#
if mask is None:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mid=grid*0.0
c=cumsum(gridmin,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]/float(jk+1)
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]/float(jk+1)
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])/float(k2+1)
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/float(jk+1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/float(jk+1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/float(jk+1)
#
# The really fast part
#
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/float(k2+1)
#
# Add the minimum back in
#
out=out+fullmin
#
# Mask makes it a bit more difficult - have to find out how many
# points were in each cumsum - and have to deal with possible
# divide-by-zero errors
#
else:
#
# Average over the first (y) dimension - making the 'mid' grid
#
mask=clip(mask,0,1)
gridmin1=where(mask,gridmin,0)
mid=grid*0.0
midd=grid*0.0
c=cumsum(gridmin1,0)
d=cumsum(mask,0)
nym1=ny-1
midy=int((ny-1.0)/2.0)
ymax=min(k+1,midy+1)
for j in range(ymax): # handle edges
jk=min(j+k,nym1)
jk2=max(nym1-j-k-1,-1)
mid[j,:]=c[jk,:]
midd[j,:]=d[jk,:]
if jk2==-1:
mid[nym1-j,:]=c[nym1,:]
midd[nym1-j,:]=d[nym1]
else:
mid[nym1-j,:]=(c[nym1,:]-c[jk2,:])
midd[nym1-j,:]=d[nym1,:]-d[jk2,:]
if ((k+1)<=(ny-k)): # middle
mid[k+1:ny-k,:]=(c[k2+1:,:]-c[:-k2-1,:])
midd[k+1:ny-k,:]=d[k2+1:,:]-d[:-k2-1,:]
#
# Average over the second (x) dimension - making the 'out' grid
#
c=cumsum(mid,1)
d=cumsum(midd,1)
out=grid*0.0
nxm1=nx-1
midx=int((nx-1.0)/2.0)
xmax=min(k+1,midx+1)
for j in range(xmax): # handle edges
jk=min(j+k,nxm1)
jk2=max(nxm1-j-k-1,-1)
out[:,j]=c[:,jk]/maximum(d[:,jk],1)
if jk2==-1:
out[:,nxm1-j]=c[:,nxm1]/maximum(d[:,nxm1],1)
else:
out[:,nxm1-j]=(c[:,nxm1]-c[:,jk2])/maximum((d[:,nxm1]-d[:,jk2]),1)
if ((k+1)<=(nx-k)): # middle
out[:,k+1:nx-k]=(c[:,k2+1:]-c[:,:-k2-1])/maximum((d[:,k2+1:]-d[:,:-k2-1]),1)
#
# Add the minimum back in
#
out=where(mask,out+fullmin,grid)
return out
#=======================================================================
#
# Custom dialog that provides sliders or entries for each control point
#
import AppDialog
class ControlValues(AppDialog.AppDialog):
# Use custom __init__ method to get the guiInfo with the labels and initial
# values for the sliders.
def __init__(self, guiInfo, MaxPointsInColumn, title="Tk", **kwargs):
self.guiInfo=guiInfo
self.MaxPointsInColumn=MaxPointsInColumn
self.result=None
AppDialog.AppDialog.__init__(self, **kwargs)
self.title(title)
def setChanges(self,master):
decimal=abs(int(math.log10(self.guiInfo['resolution'])))
places=int(math.log10(
max(self.guiInfo['maxvalue'], abs(self.guiInfo['minvalue']))
)
)+1
if decimal==0:
for i in range(len(self.ChangeVals)):
self.ChangeVals[i].set("(%+*d)"%(places,
self.Values[i].get()-self.guiInfo['InitValues'][i]))
else:
for i in range(len(self.ChangeVals)):
self.ChangeVals[i].set("(%+*.*f)"%(places+decimal+1,
decimal,self.Values[i].get()-self.guiInfo['InitValues'][i]))
def body(self,master):
masterlabel=self.guiInfo['masterlabel']
#
# get number of rows/columns for dialog
# based on number of points - trying to balance it as much as
# possible without going over the MaxPointsInColumn value
#
numpoints=len(self.guiInfo['Labels'])
numcols=(int((numpoints-1)/self.MaxPointsInColumn))+1
numrows=(int((numpoints-1)/numcols))+1
#
# Masterlabel at top of dialog
#
frame =Tkinter.Frame(master)
frame.pack(side=Tkinter.TOP)
Tkinter.Label(frame,text=masterlabel).pack(side=Tkinter.TOP,fill=Tkinter.X,expand=1)
#
# grid of scale or entry widgets
#
num=0
self.ScaleIDs=[]
self.ChangeVals=[]
self.Values=[]
for col in range(numcols):
fc=Tkinter.Frame(frame)
for row in range(numrows):
if (num>=len(self.guiInfo['Labels'])):
continue
fr=Tkinter.Frame(fc,relief=Tkinter.GROOVE,borderwidth=1)
lab=Tkinter.Label(fr,text=self.guiInfo['Labels'][num])
# Make Tkinter variables for use as widget variables
# textvar to show delta from original value
tkStrVar=Tkinter.StringVar()
tkStrVar.set('(0)')
self.ChangeVals.append(tkStrVar)
# The slider values
tkDblVar=Tkinter.DoubleVar()
tkDblVar.set(self.guiInfo['InitValues'][num])
self.Values.append(tkDblVar)
if (self.guiInfo['vectedit']==2):
lab.grid(row=0,column=0,sticky=Tkinter.EW)
self.ScaleIDs.append(Tkinter.Entry(fr,width=7))
self.ScaleIDs[num].delete(0,Tkinter.END)
self.ScaleIDs[num].insert(Tkinter.END,self.guiInfo['InitValues'][num])
self.ScaleIDs[num].grid(row=1,column=0)
else:
lab.grid(row=0,column=0,columnspan=2,sticky=Tkinter.EW)
self.ScaleIDs.append(
Tkinter.Scale(fr, orient=Tkinter.HORIZONTAL,
from_=self.guiInfo['minvalue'],
to=self.guiInfo['maxvalue'],
resolution=self.guiInfo['resolution'],
variable=self.Values[num],
command=self.setChanges,
length=175
))
val=self.guiInfo['InitValues'][num]
self.ScaleIDs[num].set(val)
self.ScaleIDs[num].grid(row=1,column=0,sticky=Tkinter.EW)
chg=Tkinter.Label(fr,textvariable=self.ChangeVals[num])
chg.grid(row=1,column=1,sticky=Tkinter.S)
fr.columnconfigure(1,minsize=60)
fr.pack(side=Tkinter.TOP,fill=Tkinter.X)
num=num+1
fc.pack(side=Tkinter.LEFT,fill=Tkinter.Y,expand=0)
# AppDialog wants a widget returned from body to set the focus to.
return frame
def ok(self, event=None):
"""Process the Ok button. The ok method in AppDialog destroys the window
before running the apply method. Need to run apply first to get the
data from the slider widgets."""
if self.validate():
self.apply()
self.result="OK"
self.destroy()
def apply(self):
"""Retrieve the values from the scale widgets into attribute Values."""
self.Values=[]
for num in range(len(self.guiInfo['Labels'])):
self.Values.append(self.ScaleIDs[num].get())

View file

@ -0,0 +1,149 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# SerpConfig.py
#
# Config information for the Serp tool.
#
# ----------------------------------------------------------------------------
Config = {}
#
# Locations should be a dictionary, with keynames that are "group names" and
# values that are lists of point information for points in that group.
# For each point in the list, a tuple with 3 values is necessary, with a
# ("name",lat,lon).
#
# The tool will automatically provide a group of "Current Samples". If you
# ONLY want that group, and no pre-defined groups, then make an empty
# dictionary like: Config["Locations"]={}
#
Config["Locations"]={
"Zone Cities": [("Boise", 43.57, -116.22 ),
("Ontario", 44.02, -117.01 ),
("Caldwell", 43.64, -116.64 ),
("Mountain Home", 43.05, -115.87 ),
("Twin Falls", 42.50, -114.45 ),
("Jerome", 42.73, -114.45 ),
("Council", 44.73, -116.43 ),
("Cambridge", 44.57, -116.68 ),
("McCall", 44.88, -116.10 ),
("Idaho City", 43.83, -115.83 ),
("Fairfield", 43.30, -114.80 ),
("Baker", 44.83, -117.82 ),
("Burns", 43.60, -118.95 ),
("Rome", 42.58, -117.88 ),
],
"RAWS+ZoneCities":[("Boise", 43.57, -116.22 ),
("Ontario", 44.02, -117.01 ),
("Caldwell", 43.64, -116.64 ),
("Mountain Home", 43.05, -115.87 ),
("Twin Falls", 42.50, -114.45 ),
("Jerome", 42.73, -114.45 ),
("Council", 44.73, -116.43 ),
("Cambridge", 44.57, -116.68 ),
("McCall", 44.88, -116.10 ),
("Idaho City", 43.83, -115.83 ),
("Fairfield", 43.30, -114.80 ),
("Baker", 44.83, -117.82 ),
("Burns", 43.60, -118.95 ),
("Rome", 42.58, -117.88 ),
("Ski Hill", 44.940,-116.188),
("Weiser River", 44.848,-116.428),
("Snake River", 45.100,-116.737),
("Lodgepole", 45.379,-115.189),
("TeaPot", 44.904,-115.738),
("Bearskin Creek", 44.385,-115.550),
("Pine Creek", 44.250,-116.199),
("Little Anderson", 44.091,-115.881),
("Town Creek", 43.944,-115.917),
("Wagontown", 43.573,-115.327),
("Lucky Peak", 43.588,-115.992),
("Dead Indian Ridge", 44.326,-117.169),
("Horse Butte", 42.417,-115.228),
("Brace Flat", 42.352,-116.692),
("Triangle", 42.829,-116.589),
("Twin Buttes", 42.691,-115.195),
("Pole Creek", 42.069,-115.786),
("Sho-Pai", 42.018,-116.213),
("Deer Haven", 43.174,-115.152),
("Bull Springs", 42.080,-114.485),
("Riddle Mountain", 43.101,-118.498),
("Wagontire", 43.343,-119.881),
("Sage Hen", 43.514,-119.294),
("Basque Hills", 42.255,-118.968),
("Fish Fin Rim", 42.47, -119.18 ),
("P Hill", 42.823,-118.935),
("Bald Moutain", 43.557,-118.407),
("Foster Flat", 42.974,-119.246),
("Moon Hill", 42.859,-118.679),
("Little McCoy Creek",42.708,-118.510),
("Grassy Mountain", 42.626,-117.395),
("Kelsay Butte", 43.901,-117.987),
("Owyhee Ridge", 43.518,-117.240),
("Red Butte", 43.536,-117.835),
("Alkali Flat", 44.087,-117.226),
("Flagstaff Hill", 44.814,-117.729),
("Elk Creek", 44.758,-117.971),
("Yellowpine", 44.526,-118.323),
],
}
#
# "DefaultGroup" is a string with the name of the default sample group. It
# must match one of the sample group labels specified in "Locations" above OR
# be "Current Samples" (that group is provided automatically)
#
Config["DefaultGroup"] = "Zone Cities"
#
# "MaxPointsInColumn" is an integer number, with the max points to list in
# each column of the dialog before another column is started. However, once
# another column is added, the number of points in each column is calculated
# to be as equal as possible.
#
Config["MaxPointsInColumn"]=10
#
# "ElevationDefault" is a string with either "On" or "Off". This sets the
# default state of elevation effects when the dialog starts up.
#
Config["ElevationDefault"]="On"
#
#==============================================================================
#
# The following empty code is here to fool the ifpServer into
# thinking it's a tool. This is so that the configuration will
# appear right next to the primary tool.
#
# DO NOT CHANGE THE LINES BELOW
#
ToolType = "numeric"
WeatherElementEdited = "None"
from numpy import *
HideTool = 1
import SmartScript
class Tool (SmartScript.SmartScript):
def __init__(self, dbss):
SmartScript.SmartScript.__init__(self, dbss)
def execute(self):
return

View file

@ -0,0 +1,259 @@
##
# 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.
##
# ----------------------------------------------------------------------------
# This software is in the public domain, furnished "as is", without technical
# support, and with no warranty, express or implied, as to its usefulness for
# any purpose.
#
# serpFile - version 2.0
#
# Does the equivalent of the plain 'serp' tool - but gets the location
# and control point information from a file. Thus, this tool needs no
# user input and can be run as part of a cronjob, etc.
#
# The file is a comma delimited file where each data line contains a
# station ID (ignored), a latitude, a longitude, and a data value.
# Typical data lines might look like this:
#
# BOI,43.57,-116.22,50.5
# TWF,42.48,-114.48,43 # comment about this line
#
# To make the file more readable, you can have comment lines which
# start with a # character or are simply whitespace.
#
# Any lines with less than 4 comma delimited values are ignored. Lines
# with more than 4 comma delimited values are potentially used - but
# fields after the first 4 are ignored.
#
# Stations located off the GFE grid are ignored.
#
# Multiple sites lying on the same GFE gridpoint are ignored (only
# the first one is used - and a status bar message is produced
# which tells you that the second (or more) station is being ignored).
#
# No timeRange checking is done - the tool simply operates on the
# current grid, using the values supplied in the file and stores the
# results back into the same grid. Clipping is performed so that the
# values of the new grid do not exceed the allowable values for the
# grid.
#
# This works for SCALAR grids only - not vectors or weather/discrete
# elements
#
# Author: Tim Barker - SOO BOI (serp tool is from Les Colin)
# 2014/06/11 - Modified a couple of things to make it cleaner in A2
# 2010/08/05 - updated to use ObjAnal utility
# 2003/10/16 - original implementation based on serp tool
#=======================================================================
# START OF CONFIGURATION SECTION
#
# The filename to read
#
FILENAME="/tmp/lsrinfo.dat"
#
# If you wish to include elevation adjustment (so that adjustments
# are based on elevation differences as well as horizontal distance
# from the point) then set elevation_factor to a non-zero value.
#
# elevation_factor should be in units of feet/km.
#
# If you set it to 1, then 1 foot of elevation difference is
# equivalent to 1km of horizontal distance (this means
# that elevation is VERY important in the analysis).
#
# if you set it to 1000, then 1000 feet of elevation
# difference is equal to 1 km of horizontal distance
# (this means that elevation is NOT important to the
# analysis).
#
# To turn off elevation completely - set the elevation_factor to zero.
# which is the default
#
# A value of 36 feet/km seems work reasonably well for including SOME
# influence of elevation - but not too much.
#
elevation_factor=0.0
#
# END OF CONFIGURATION SECTION
#=======================================================================
ToolType = "numeric"
WeatherElementEdited = "variableElement"
ScreenList = ["SCALAR"]
import numpy as np
import SmartScript
import ObjAnal
import os,re
class Tool (SmartScript.SmartScript):
def __init__(self, dbss):
SmartScript.SmartScript.__init__(self, dbss)
self._dbss=dbss
def execute(self, Topo, variableElement, variableElement_GridInfo, varDict):
"Match specified points to values in file using objective analysis"
print "Tool serp_file starting"
#
# Setup the utility
#
self.OA=ObjAnal.ObjAnal(self._dbss)
#
# value limits for grid being edited
#
self.valmax=variableElement_GridInfo.getMaxValue()
self.valmin=variableElement_GridInfo.getMinValue()
#
# read data lines from file
#
filename=FILENAME
datalines=self.readFILE(filename)
if len(datalines)<1:
msg="No data in file %s, so grid left unchanged"%(filename)
self.statusBarMsg(msg,"S")
print msg
self.cancel()
#
# setup data locations from file
#
valuelist=self.getDataLocations(datalines,variableElement,Topo)
if (len(valuelist)<1):
msg="No valid data in file %s, so grid left unchanged"%(filename)
self.statusBarMsg(msg,"S")
print msg
self.cancel()
#
#
#
new=self.OA.ObjectiveAnalysis(valuelist,variableElement,"serp",
elevfactor=elevation_factor)
#
# clip to grid min/max
#
newclip=np.clip(new,self.valmin,self.valmax)
print "Tool serp_file complete"
return newclip
#=================================================================
#
# Read data values from the data lines
#
def getDataLocations(self,datalines,variableElement,Topo):
#
# setup storage for location info
#
valuelist=[]
self.xloclist=[]
self.yloclist=[]
#
# decode data lines into location info
#
for line in datalines:
(id,latstr,lonstr,valuestr)=line.split(",",3)
latstr=re.sub('[^-0123456789.]','',latstr)
lonstr=re.sub('[^-0123456789.]','',lonstr)
valuestr=re.sub(',.*$','',valuestr) # get rid of any more comma-delimited things at end of line
valuestr=re.sub('#.*$','',valuestr) # get rid of any inline comments at end of field
valuestr=re.sub('[^-0123456789.]','',valuestr) # get rid of non-numeric characters in remaining value
latf=float(latstr)
lonf=float(lonstr)
if (latf<-90.0)or(latf>90.0)or(lonf<-180.0)or(lonf>180.0):
msg="Invalid lat/lon ignored: %s"%line
self.statusBarMsg(msg,"S")
print msg
continue
#
# make sure point is on grid
#
(x,y)=self.getGridCell(latf,lonf)
if ((x is None)or(y is None)):
msg="Data for %s ignored (%6.3f,%8.3f) - location not on GFE grid" % (id,latf,lonf)
self.statusBarMsg(msg,"S")
print msg
continue
xint=int(x)
yint=int(y)
#
# Make sure point has not already been specified
#
if len(self.xloclist)>0:
skip=0
for i in range(len(self.xloclist)):
if ((self.xloclist[i]==xint) and (self.yloclist[i]==yint)):
msg="Data for %s ignored - data for this GFE gridpoint already specified"%(id)
self.statusBarMsg(msg,"S")
print msg
skip=1
break
if skip==1:
continue
#
# Make sure value is valid
#
valf=float(valuestr)
if (valf<self.valmin):
msg="%s value of %.3f clipped to allowable range of %f-%f"%(id,valf,self.valmin,self.valmax)
self.statusBarMsg(msg,"S")
print msg
valf=float(self.valmin)
if (valf>self.valmax):
msg="%s value of %.3f clipped to allowable range of %f-%f"%(id,valf,self.valmin,self.valmax)
self.statusBarMsg(msg,"S")
print msg
valf=float(self.valmax)
#
# add it to list
#
valuelist.append((id,xint,yint,Topo[yint,xint],valf))
self.xloclist.append(xint)
self.yloclist.append(yint)
return valuelist
#===================================================================
# readFILE - read specified FILE returning only data lines where
# 4 or more comma delimited values occur
#
def readFILE(self,filename):
datalines=[]
#
# make sure the file exists
#
if (not os.path.exists(filename)):
msg="Could not find file %s" % (filename)
self.statusBarMsg(msg,"S")
print msg
return datalines
#
# read the file
#
filespec=file(filename,'r')
lines=filespec.readlines()
filespec.close()
#
# get only data lines
#
for line in lines:
stripline=line.strip() # ignore whitespace at begin/end
if len(stripline)<1:
continue
if line[0:1]=="#": # ignore comment lines
continue
pieces=stripline.split(",",3)
if len(pieces)!=4: # ignore lines with less than 4 comma fields
continue
datalines.append(stripline)
return datalines

File diff suppressed because it is too large Load diff

View file

@ -10,6 +10,7 @@ package com.raytheon.viz.mpe.ui;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 9, 2011 rgeorge Initial creation
* Jun 30, 2014 17457 snaples Updated getCv_use to return name
*
* </pre>
*
@ -149,9 +150,7 @@ public enum DisplayFieldData {
* @return the cv_use
*/
public String getCv_use() {
if (cv_use == null) {
cv_use = name().toUpperCase();
}
cv_use = name().toUpperCase();
return cv_use;
}

View file

@ -107,6 +107,7 @@ import com.raytheon.viz.ui.editor.IMultiPaneEditor;
* Feb 02, 2014 16201 snaples Added saved data flag support
* Feb 04, 2014 16410 lbousaidi changed the first letter of the month to lower case.
* Feb 19, 2014 2628 mpduff Change cast from short to int when creating color bar.
* Jun 30, 2014 17457 snaples Added default case to switch in getXmrgfile.
*
* </pre>
*
@ -967,7 +968,6 @@ public class MPEDisplayManager {
public static XmrgFile getXmrgFile(DisplayFieldData fieldData, Date date) {
AppsDefaults appsDefaults = AppsDefaults.getInstance();
String dirname = appsDefaults.getToken(fieldData.getDirToken());
String cv_use = fieldData.getCv_use();
String fileNamePrefix = fieldData.getFileNamePrefix();
String prismType = null;
String dateFormatString = MPEDateFormatter.yyyyMMddHH;
@ -991,6 +991,8 @@ public class MPEDisplayManager {
prismType = "min_temp";
dateFormatString = MPEDateFormatter.MMM;
break;
default:
break;
}
String dateString = MPEDateFormatter.format(date, dateFormatString);

View file

@ -20,6 +20,7 @@
package com.raytheon.viz.texteditor.qc;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@ -59,6 +60,7 @@ import com.raytheon.viz.texteditor.util.VtecUtil;
* 21 MAY 2013 16200 Qinglu Lin Prevent countyOrZoneCounter from being increased for a line
* that has no word County/Parish/Municipality in it.
* 13 MAY 2014 17177 Qinglu Lin Updated runQC().
* 15 SEP 2014 529 mgamazaychikov Create firstBulletImmediateCauseQCExclusions list and add IC to it.
*
* </pre>
*
@ -86,6 +88,9 @@ public class TextSegmentCheck implements IQCCheck {
}
}
// List of immediate causes to be excluded from quality control check in the first bullet
private static List<String> firstBulletImmediateCauseQCExclusions = Arrays.asList("ER", "MC", "UU", "IC");
@Override
public String runQC(String header, String body, String nnn) {
int countyOrZoneCounter = 0;
@ -362,8 +367,9 @@ public class TextSegmentCheck implements IQCCheck {
}
if (insideFirstBullet) {
if (ic != null && !ic.equals("ER") && !ic.equals("MC")
&& !ic.equals("UU") && checkIC) {
if (ic != null
&& !firstBulletImmediateCauseQCExclusions.contains(ic)
&& checkIC) {
boolean validIC = false;
for (String causes : QualityControl.getImmediateCauses()) {
if (causes.startsWith(ic)

View file

@ -53,6 +53,14 @@
key="REFD" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived Composite"
key="REFC" indentText="true" />
<contribute xsi:type="menuItem" menuText="CAPPI"
key="REFD" indentText="true" />
<contribute xsi:type="menuItem" menuText="MAX 1hr CAPPI"
key="MXREF" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived VIL"
key="VILIQ" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived Echo Top"
key="RETOP" indentText="true" />
<contribute xsi:type="menuItem" menuText="CAPPI" key="REFD"
indentText="true" />
<contribute xsi:type="menuItem" menuText="MAX 1hr CAPPI"

View file

@ -32,9 +32,9 @@
<contribute xsi:type="menuItem" menuText="MSLP Grad Vec"
key="PGrd1" indentText="false" />
<contribute xsi:type="menuItem" menuText="Max Updraft VV"
key="MAXUVV" indentText="true" />
key="MXUVV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Downdraft VV"
key="MAXDVV" indentText="true" />
key="MXDVV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Updraft Helicity"
key="MAXUPHL" indentText="true" />
<contribute xsi:type="menuItem" menuText="Most Unstable BL Parcel Level"

View file

@ -29,6 +29,8 @@
indentText="false" />
<contribute xsi:type="menuItem" menuText="Geometric Vert Velocity"
key="GVV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Mean 1hr Geometric Vert Velocity"
key="GVV1hr" indentText="true" />
<contribute xsi:type="menuItem" menuText="Vert Velocity"
key="VV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Wind Gust" key="Gust"

View file

@ -1225,6 +1225,8 @@
levelTwoValue="0" />
<DatabaseLevel levelName="BL" levelOneValue="180"
levelTwoValue="0" />
<DatabaseLevel levelName="BL" levelOneValue="255"
levelTwoValue="0" />
<DatabaseLevel levelName="FHAG" levelOneValue="0"
levelTwoValue="30" />
</Level>

View file

@ -83,7 +83,9 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
* Apr 29, 2014 3033 jsanchez Updated method to retrieve files in localization.
* May 16, 2014 DR 17365 D. Friedman Reduce precision of warning area to avoid topology errors.
* Jun 30, 2014 DR 17447 Qinglu lin Updated findAffectedAreas().
* Jul 22, 23014 3419 jsanchez Cleaned up converFeAreaToPartList.
* Jul 22, 2014 3419 jsanchez Cleaned up converFeAreaToPartList.
* Sep 14, 2014 ASM #641 dhuffman Filtered out cases where Areas do not match Zones by using
* refactored WarngenLayer::filterArea.
* </pre>
*
* @author chammack
@ -327,13 +329,21 @@ public class Area {
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);
if (intersect.isEmpty() == false) {
filtered = false;
if (!intersect.isEmpty()) {
filtered = warngenLayer.filterArea(f, intersect, asc);
}
if (intersect.isEmpty() == false && filtered == true) {
geoms.add(intersect);
}
}

View file

@ -78,6 +78,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Aug 28, 2014 ASM #15658 D. Friedman Add marine zones.
* Aug 29, 2014 ASM #15551 Qinglu Lin Sort watches by ETN and filter out ActiveTableRecord
* with act of CAN and EXP in processRecords().
* Sep 12, 2014 ASM #15551 Qinglu Lin Prevent a county's WOU from being used while its
* corresponding WCN is canceled or expired.
*
* </pre>
*
@ -307,6 +309,8 @@ public class WatchUtil {
InstantiationException {
List<ActiveTableRecord> records = new ArrayList<ActiveTableRecord>(
response.getNumResults());
Map<Pair<String, String>, Set<String>> removedUgczones = new HashMap<Pair<String, String>, Set<String>>();
Set<String> ugczones = null;
for (Map<String, Object> result : response.getResults()) {
WarningAction action = WarningAction.valueOf(String.valueOf(result
.get(ACTION)));
@ -316,7 +320,7 @@ public class WatchUtil {
* fixed the underlying system. request.addConstraint("act", new
* RequestConstraint("CAN", ConstraintType.NOT_EQUALS));
*/
if (action != WarningAction.CAN || action != WarningAction.EXP) {
if (action != WarningAction.CAN && action != WarningAction.EXP) {
ActiveTableRecord record = entityClass.newInstance();
record.setIssueTime((Calendar) result.get(ISSUE_TIME_FIELD));
record.setStartTime((Calendar) result.get(START_TIME_FIELD));
@ -327,6 +331,37 @@ public class WatchUtil {
record.setEtn(String.valueOf(result.get(ETN)));
record.setAct(String.valueOf(result.get(ACTION)));
records.add(record);
} else {
Pair<String, String> key = new Pair<String, String>(null, null);
key.setFirst(String.valueOf(result.get(ETN)));
key.setSecond(String.valueOf(result.get(PHEN_SIG_FIELD)));
ugczones = removedUgczones.get(key);
if (ugczones == null) {
ugczones = new HashSet<String>();
}
ugczones.add(String.valueOf(result.get(UGC_ZONE_FIELD)));
removedUgczones.put(key, ugczones);
}
}
// remove ActiveTableRecord from records whose etn, ugcZone, and phensig is same as
// canceled or expired.
String etn, ugczone, phensig;
for (Pair<String, String> etnPhensig: removedUgczones.keySet()) {
ugczones = removedUgczones.get(etnPhensig);
etn = etnPhensig.getFirst();
phensig = etnPhensig.getSecond();
Iterator<String> iter = ugczones.iterator();
while (iter.hasNext()) {
ugczone = iter.next();
Iterator<ActiveTableRecord> iterator = records.iterator();
while (iterator.hasNext()) {
ActiveTableRecord atr = iterator.next();
if (atr.getEtn().equals(etn) && atr.getUgcZone().equals(ugczone) &&
atr.getPhensig().equals(phensig)) {
iterator.remove();
}
}
}
}
@ -361,9 +396,6 @@ public class WatchUtil {
Map<Watch, List<String>> map = new HashMap<Watch, List<String>>();
// For each watch event, get the end time and list of active zones
for (ActiveTableRecord ar : activeTableRecords) {
if (ar.getAct().equals("CAN") || ar.getAct().equals("EXP")) {
continue;
}
/*
* Currently reports all zones in the watch even if a given zone is
* not in the warning polygon. If the logic is changed to only show

View file

@ -1,25 +1,24 @@
package com.raytheon.viz.warngen.gui;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 09/18/2014 ASM #15465 Qinglu Lin Ignore the info after "/" if any.
*
* </pre>
*/
public class BackupData {
public String site;
public String office;
private static final Pattern cwaBackUp = Pattern
.compile("([A-Z]{3})/([A-Z\\s/-]{1,})");
public BackupData(String cwa) {
cwa = cwa.trim();
String[] parts = cwa.split("/");
site = parts[0];
office = parts[1];
Matcher m = cwaBackUp.matcher(cwa);
if (m.find()) {
site = m.group(1);
office = m.group(2);
if (cwa.contains("/")) {
String[] parts = cwa.split("/");
site = parts[0];
} else {
site = cwa;
}
}
}

View file

@ -217,14 +217,20 @@ import com.vividsolutions.jts.io.WKTReader;
* 04/23/2014 DR 16356 Qinglu Lin Updated initializeState() and added reset().
* 04/28,2014 3033 jsanchez Properly handled back up configuration (*.xml) files. Set backupSite to null when backup site is not selected.
* 05/16/2014 DR 17365 D. Friedman Check if moved vertex results in polygon valid in both lat/lon and local coordinates.
* 07/24/2014 3429 mapeters Updated deprecated drawLine() calls.
* 08/01/2014 3471 mapeters Updated deprecated createShadedShape() calls.
* 06/23/2014 DR16322 m.gamazaychikov Fix Warngen unloading previously loaded maps.
* 07/01/2014 DR 17450 D. Friedman Use list of templates from backup site.
* 07/24/2014 3429 mapeters Updated deprecated drawLine() calls.
* 07/28/2014 DR 17475 Qinglu Lin Updated populateStrings() and findLargestQuadrant(), removed findLargestGeometry(),
* added createAreaAndCentroidMaps() and movePopulatePt(), updated paintText() to center W.
* 08/01/2014 3471 mapeters Updated deprecated createShadedShape() calls.
* 08/20/2014 3353 rferrel Generating Geo Spatial data set no longer on the UI thread.
* 08/20/2014 ASM #16703 D. Friedman Make geo feature types for watches explicit
* 09/10/2014 ASM #16730 D. Friedman Fix NPE.
* 09/14/2014 ASM #641 dhuffman To facilitate Area.java need to filter the differences between Areas and Zones,
* refactored filterCheck and added a new siginature version of filterArea.
* 09/15/2014 3353 rferrel No longer have null parent shell for the GenerateGeoDataSetDialog.
* 09/17/2014 ASM #15465 Qinglu Lin get backupOfficeShort and backupOfficeLoc from backup WFO config.xml, and pop up AlertViz if
* any of them is missing.
* </pre>
*
* @author mschenke
@ -236,6 +242,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
.getHandler(WarngenLayer.class);
String uniqueFip = null;
String backupOfficeShort = null;
String backupOfficeLoc = null;
Map<String, Double> geomArea = new HashMap<String, Double>();
@ -354,9 +362,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
private Set<String> getAllFipsInArea(Geometry warningArea) {
Set<String> fipsIds = new HashSet<String>();
for (int n = 0; n < warningArea.getNumGeometries(); ++n) {
Geometry area = warningArea.getGeometryN(n);
fipsIds.add(getFips(area));
if (warningArea != null) {
for (int n = 0; n < warningArea.getNumGeometries(); ++n) {
Geometry area = warningArea.getGeometryN(n);
fipsIds.add(getFips(area));
}
}
return fipsIds;
}
@ -369,11 +379,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
private Set<String> mapsToLoad;
private Set<String> preloadedMaps;
private final MapManager manager;
public CustomMaps() {
super("Loading WarnGen Maps");
manager = MapManager.getInstance(descriptor);
preloadedMaps=new HashSet<String>();
}
@Override
@ -390,7 +403,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
if (toLoad != null) {
for (String loaded : customMaps) {
manager.unloadMap(loaded);
if (!preloadedMaps.contains(loaded)) {
manager.unloadMap(loaded);
}
}
for (String load : toLoad) {
@ -406,6 +421,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
public void loadCustomMaps(Collection<String> maps) {
for (String map : maps) {
if (manager.isMapLoaded(map)) {
preloadedMaps.add(map);
}
}
synchronized (this) {
mapsToLoad = new HashSet<String>(maps);
}
@ -1472,6 +1492,32 @@ public class WarngenLayer extends AbstractStormTrackResource {
dialogConfig.setDefaultTemplate(dc.getDefaultTemplate());
dialogConfig.setMainWarngenProducts(dc.getMainWarngenProducts());
dialogConfig.setOtherWarngenProducts(dc.getOtherWarngenProducts());
backupOfficeShort = dc.getWarngenOfficeShort();
backupOfficeLoc = dc.getWarngenOfficeLoc();
if (backupSite != null) {
boolean shortTag = false;
boolean locTag = false;
String infoType = null;
if (backupOfficeShort == null || backupOfficeShort.trim().length() == 0) {
shortTag = true;
}
if (backupOfficeLoc == null || backupOfficeLoc.trim().length() == 0) {
locTag = true;
}
if (shortTag && locTag) {
infoType = "warngenOfficeShort and warngenOfficeLoc";
} else {
if (shortTag) {
infoType = "warngenOfficeShort";
} else if (locTag) {
infoType = "warngenOfficeLoc";
}
}
if (infoType != null) {
statusHandler.handle(Priority.CRITICAL, "Info for " + infoType + " in " + backupSite +
"'s config.xml is missing.");
}
}
}
}
@ -2139,17 +2185,28 @@ public class WarngenLayer extends AbstractStormTrackResource {
*/
private boolean filterCheck(Geometry areaToConsider, Geometry wholeArea,
double areaInMetersSq) {
return filterCheck(
areaToConsider,
wholeArea,
areaInMetersSq,
getConfiguration().getHatchedAreaSource().getInclusionPercent(),
getConfiguration().getHatchedAreaSource().getInclusionArea(),
getConfiguration().getHatchedAreaSource().getInclusionAndOr());
}
private boolean filterCheck(Geometry areaToConsider, Geometry wholeArea,
double areaInMetersSq, double inclusionPercent,
double inclusionArea, String inclusionAndOr) {
double ratio = areaToConsider.getArea() / wholeArea.getArea();
double ratioInPercent = ratio * 100.;
double areaInKmSqOfIntersection = meterSqToKmSq.convert(areaInMetersSq
* ratio);
boolean percentOk = ratioInPercent >= getConfiguration()
.getHatchedAreaSource().getInclusionPercent();
boolean areaOk = areaInKmSqOfIntersection > getConfiguration()
.getHatchedAreaSource().getInclusionArea();
return getConfiguration().getHatchedAreaSource().getInclusionAndOr()
.equalsIgnoreCase("AND") ? percentOk && areaOk : percentOk
boolean percentOk = ratioInPercent >= inclusionPercent;
boolean areaOk = areaInKmSqOfIntersection > inclusionArea;
return inclusionAndOr.matches("AND") ? percentOk && areaOk : percentOk
|| areaOk;
}
@ -2173,6 +2230,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
return filterCheck(featureAreaToConsider, geom, areaOfGeom);
}
public boolean filterArea(GeospatialData feature,
Geometry featureAreaToConsider, AreaSourceConfiguration asc) {
double areaOfGeom = (Double) feature.attributes.get(AREA);
return filterCheck(featureAreaToConsider, feature.geometry, areaOfGeom,
asc.getInclusionPercent(), asc.getInclusionArea(),
asc.getInclusionAndOr());
}
private boolean filterAreaSecondChance(GeospatialData feature,
Geometry featureAreaToConsider, boolean localCRS) {
Geometry geom = localCRS ? (Geometry) feature.attributes
@ -3691,4 +3756,12 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
}
public String getBackupOfficeShort() {
return backupOfficeShort;
}
public String getBackupOfficeLoc() {
return backupOfficeLoc;
}
}

View file

@ -144,6 +144,7 @@ import com.vividsolutions.jts.io.WKTReader;
* Aug 15, 2014 DR15701 mgamazaychikov Removed static field watchUtil.
* Aug 28, 2014 ASM #15551 Qinglu Lin Replaced 1200 PM/1200 AM by NOON/MIDNIGHT, removed days in
* included tornado/severe thunderstorm watch message.
* Sep 18, 2014 ASM #15465 Qinglu Lin For backup, get officeShort and officeLoc from backup WFO's config.xml.
* </pre>
*
* @author njensen
@ -261,8 +262,8 @@ public class TemplateRunner {
if (backupData != null) {
context.remove("officeLoc");
context.remove("officeShort");
context.put("officeLoc", backupData.office);
context.put("officeShort", backupData.office);
context.put("officeLoc", warngenLayer.getBackupOfficeLoc());
context.put("officeShort", warngenLayer.getBackupOfficeShort());
context.put("backupSite", warngenLayer.getDialogConfig()
.getWarngenOfficeShort());
}
@ -877,37 +878,7 @@ public class TemplateRunner {
System.out.println("velocity time: "
+ (System.currentTimeMillis() - tz0));
String watches[] = {"TORNADO WATCH", "SEVERE THUNDERSTORM WATCH"};
int index1 = -1, index2 = -1, index1ToUse = -1;
String doubleDollar = "$$";
boolean firstTime = true;
for (String s: watches) {
index1 = script.indexOf(s, 0);
if (index1 > 0) {
index2 = script.indexOf(doubleDollar, index1);
}
if (firstTime && index1 > -1) {
index1ToUse = index1;
firstTime = false;
}
}
String days[] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
String substring = "", text;
if (index1ToUse > -1 && index2 > -1) {
substring = script.substring(index1ToUse, index2).toUpperCase();
// remove day
for (String day: days) {
substring = substring.replaceAll(day + " ", "");
}
// replace 1200 PM/1200 AM with NOON/MIDNIGHT
substring = substring.replaceAll("1200 PM", "NOON");
substring = substring.replaceAll("1200 AM", "MIDNIGHT");
// concatenate strings
text = script.substring(0, index1ToUse - 1);
text = text + " " + substring + script.substring(index2, script.length());
} else {
text = script.toString();
}
String text = script.toString();
WarningTextHandler handler = WarningTextHandlerFactory.getHandler(
selectedAction, text, config.getAutoLockText());
String handledText = handler.handle(text, areas, cancelareas,

View file

@ -37,6 +37,7 @@ import com.raytheon.viz.texteditor.TextWarningConstants;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 06182008 bwoodle additional format method overloads, javadocs.
* Sep 12, 2014 ASM RM#15551 Qinglu Lin Added formatUseNoonMidnight().
*
* </pre>
*
@ -45,6 +46,8 @@ import com.raytheon.viz.texteditor.TextWarningConstants;
*/
public class DateUtil {
Pattern timePtrn = Pattern.compile("(1200\\s(AM|PM))");
/**
* Format a date for the severe weather warnings templates
*
@ -107,6 +110,28 @@ public class DateUtil {
return str;
}
public String formatUseNoonMidnight(Date date, DateFormat format, int interval, String tz) {
return formatUseNoonMidnight(date, format, interval, getTimeZoneFromString(tz));
}
public String formatUseNoonMidnight(Date date, DateFormat format, int interval, TimeZone tz) {
String str;
Date workingDate = date;
if (interval > 0) {
workingDate = roundDate(date, interval);
}
synchronized (format) {
format.setTimeZone(tz);
str = format.format(workingDate);
}
Matcher m = timePtrn.matcher(str);
if(m.find()) {
str = str.replace("1200 AM", "MIDNIGHT");
str = str.replace("1200 PM", "NOON");
}
return str;
}
/**
* Format a date for the severe weather warnings templates
*

View file

@ -0,0 +1,128 @@
#!/bin/bash
#
# Clean up platform and users dictionaries.
# 09/10/2014 lshi
#
#platform dictionary(lx, px): /awips2/cave/etc/spelldict
#user EDEX dictionary(dx): /awips2/edex/data/utility/cave_static/user/USER/seplldict
#user CAVE dictionary(lx/px/dx): /home/USER/caveData/etc/user/USER/spelldict
#dx (one of dx):
#remove all users' CAVE dictionary
#cleanup all users' EDEX dictionary
#
#all others:
#clean up platform dictionary
#
user=$(whoami)
host=$(hostname)
edex_user_dir=/awips2/edex/data/utility/cave_static/user/
cave_etc=/awips2/cave/etc
run_type=0
FNAME="spelldict"
clean () {
lines=`cat $1 |wc -l`
size=`cat $1 |wc -c`
MSG="$1, size=$size, #line=$lines:"
LASTWD=$(grep 'zymurgy' $1)
if [ $size -eq 1290760 ]
then
remove $1
# elif [ $lines -gt 135553 ]
# then
# [ $run_type == 1 ] && (cp $1 "$1.bak";
# sed -n "135554,${lines}p" "$1.bak" > $1)
# let "newlines=${lines}-135553"
# echo $MSG modified, \#line=$(( lines-135553 ))
elif [ "$LASTWD" ]
then
line=$(sed -n "/^$LASTWD/=" $1)
# echo line=$line
[ $run_type == 1 ] && (cp -p $1 "$1.bak"; sed "1, /^$LASTWD/d" "$1.bak" > $1)
echo $MSG "modified, #line=$(( lines-line ))"
else
echo $MSG unchanged
fi
}
remove () {
lines=`cat $1 |wc -l`
size=`cat $1 |wc -c`
if [ $run_type == 1 ]
then
cp -p $1 "$1.bak"
[[ $1 == ${cave_etc}* ]] && cat /dev/null > $1 || rm -f $1
fi
action=$([[ $1 == ${cave_etc}* ]] && echo emptied || echo removed )
echo "$1, size=$size, #line=$lines: $action"
}
usage () {
echo "Option: -dryrun: dry run; -run: do it"
exit 0
}
[ $# = 0 ] && usage
[ $1 == -run ] && run_type=1
[ $1 == -dryrun ] && run_type=2
[ $run_type == 0 ] && usage
echo "run_type=$run_type"
wstype=xxx
[ $# == 2 ] && wstype=$2
if [ -d $edex_user_dir ] && [ $wstype != -lx ]
then
echo "Clean up users' dictionaries ..."
if [ $user != root ]
then
echo "You must run this script as the user 'root'."
exit 1
fi
for d in $(ls -d /home/*);
do
f=$d/caveData/etc/user/$(basename $d)/$FNAME
[ -f $f ] && remove $f
done
for f in `find $edex_user_dir -maxdepth 2 -name $FNAME`;
do
clean $f
done
fi
if [ -d $cave_etc ] && [ $wstype != -dx ]
then
f=$cave_etc/$FNAME
echo "Clean up the platform dictionary ${f} ..."
if [ $user != awips ] && [ $user != root ]
then
echo "You must run this script as the user 'awips' or 'root'."
exit 1
fi
if [ -f $f ]
then
clean $f
else
cat /dev/null > $f
chown awips $f
chgrp fxalpha $f
chmod 644 $f
echo $f: created, size=0
fi
fi
if [ ! -d $edex_user_dir ] && [ ! -d $cave_etc ]
then
echo "Please run this script on a 'dx', 'lx', px or 'xt' workstation. "
exit 1
fi
exit 0

View file

@ -36,7 +36,6 @@
<name>HPE</name>
<center>9</center>
<subcenter>0</subcenter>
<grid>303</grid>
<process>
<id>165</id>
</process>
@ -46,7 +45,6 @@
<name>BHPE</name>
<center>9</center>
<subcenter>0</subcenter>
<grid>303</grid>
<process>
<id>166</id>
</process>

View file

@ -54,6 +54,7 @@ import com.raytheon.uf.edex.decodertools.time.TimeTools;
* 02 Feb 2012 #15845 lbousaidi added check for data that comes in as -999
* 07 May 2013 #15880 lbousaidi changed pPE parameter because it was inserting to the
* wrong hour field.
* 15 Sep 2014 #17129 lbousaidi add a fix for the top of hour issue for hourlypp.
* 18 Sep 2014 #3627 mapeters Updated deprecated {@link TimeTools} usage.
* </pre>
*
@ -566,7 +567,7 @@ public class GagePP {
if (rec.getPhysicalElement().getCode().charAt(1) == 'C'
&& minute >= MINUTES_PER_HOUR - pOptions.getIntpc()
|| (pPE.charAt(1) == 'P'
|| (rec.getPhysicalElement().getCode().charAt(1) == 'P'
&& minute >= MINUTES_PER_HOUR - pOptions.getIntlppp())) {
hour++;
dt.add(Calendar.HOUR_OF_DAY, 1);

View file

@ -13,7 +13,7 @@
##### Qinglu Lin 03-17-2014 DR 16309. Updated inserttorwatches and insertsvrwatches.
##### Qinglu Lin 05-21-2014 DR 16309. Updated inserttorwatches and insertsvrwatches by changing 'FOR##' to 'FOR ##'.
##### D. Friedman 08-28-2014 ASM #15658. Add marine watch wording.
##### Qinglu Lin 08-29-2014 ASM #15551. Overhauled inserttorwatches and insertsvrwatches.
##### Qinglu Lin 09-15-2014 ASM #15551. Overhauled inserttorwatches and insertsvrwatches, added until.
####################################################################################################
#*
Mile Marker Test Code
@ -200,25 +200,35 @@ ${drainage.name}##
#end
#end
#set($etns = [])
#set($lastTime = "")
#set($currTime = "")
#set($lastEtn = "")
#set($lastEndTime = "")
#set($count = 0)
#foreach(${watch} in ${tornadoWatches})
#if($lastEtn != "" && ${watch.etn} != ${lastEtn})
#set($success = $etns.add(${watch.etn}))
#end
#foreach(${watch} in ${tornadoWatches})
#set($count = $count + 1)
#if(${lastEtn} != "" && ${watch.etn} != ${lastEtn})
. ##
#end
#set($endTime = ${watch.endTime})
#if(${watch.etn} == ${lastEtn})
#if(${endTime} == ${lastEndTime})
...##
#else
...UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#end
#else
A TORNADO WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#if(${watch.etn} != ${lastEtn})
#set($lastTime = "#until(${endTime}, ${timeFormat}, ${secondtimezone}, ${watch})")
A TORNADO WATCH${ALSO} REMAINS IN EFFECT ${lastTime}##
#set($ALSO = " ALSO")
#else
#if(!$foreach.hasNext() || ${watch.etn} != $etns.get(${count}))
AND ##
#else
...##
#end
#set($currTime = "#until(${endTime}, ${timeFormat}, ${secondtimezone}, ${watch})")
#if(${currTime} != ${lastTime})
${currTime}##
#set($lastTime = ${currTime})
#end
#if(${secondtimezone})
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end
#if(!${watch.marineAreas})
#areaFormat(${watch.partOfState} true false true)${watch.state}##
@ -226,7 +236,6 @@ A TORNADO WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${t
#formatMarineAreas(${watch.marineAreas})
#end
#set($lastEtn = ${watch.etn})
#set($lastEndTime = ${watch.endTime})
#end
#if(${lastEtn} != "")
.
@ -234,6 +243,14 @@ A TORNADO WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${t
#end
########END MACRO
#macro(until $endTime $timeFormat $secondtimezone $watch)
UNTIL ${dateUtil.formatUseNoonMidnight(${endTime}, ${timeFormat.clock}, 15, ${localtimezone})}##
#if(${secondtimezone})
/${dateUtil.formatUseNoonMidnight(${watch.getEndTime()}, ${timeFormat.clock}, 15, ${secondtimezone})}/##
#end
FOR ##
#end
#macro(insertsvrwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($svrWatches = [])
#set($ALSO = "")
@ -244,25 +261,35 @@ A TORNADO WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${t
#end
#end
#set($etns = [])
#set($lastTime = "")
#set($currTime = "")
#set($lastEtn = "")
#set($lastEndTime = "")
#set($count = 0)
#foreach(${watch} in ${svrWatches})
#if($lastEtn != "" && ${watch.etn} != ${lastEtn})
#set($success = $etns.add(${watch.etn}))
#end
#foreach(${watch} in ${svrWatches})
#set($count = $count + 1)
#if(${lastEtn} != "" && ${watch.etn} != ${lastEtn})
. ##
#end
#set($endTime = ${watch.endTime})
#if(${watch.etn} == ${lastEtn})
#if(${endTime} == ${lastEndTime})
...##
#else
...UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#end
#else
A SEVERE THUNDERSTORM WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#if(${watch.etn} != ${lastEtn})
#set($lastTime = "#until(${endTime}, ${timeFormat}, ${secondtimezone}, ${watch})")
A SEVERE THUNDERSTORM WATCH${ALSO} REMAINS IN EFFECT ${lastTime}##
#set($ALSO = " ALSO")
#else
#if(!$foreach.hasNext() || ${watch.etn} != $etns.get(${count}))
AND ##
#else
...##
#end
#set($currTime = "#until(${endTime}, ${timeFormat}, ${secondtimezone}, ${watch})")
#if(${currTime} != ${lastTime})
${currTime}##
#set($lastTime = ${currTime})
#end
#if(${secondtimezone})
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end
#if(!${watch.marineAreas})
#areaFormat(${watch.partOfState} true false true)${watch.state}##
@ -270,7 +297,6 @@ A SEVERE THUNDERSTORM WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${e
#formatMarineAreas(${watch.marineAreas})
#end
#set($lastEtn = ${watch.etn})
#set($lastEndTime = ${watch.endTime})
#end
#if(${lastEtn} != "")
.

View file

@ -2,18 +2,19 @@
## AIRPORT WEATHER WARNING TEMPLATE ##
## EXAMPLE TEMPLATE USING HUNTSVILLE PRODUCT ##
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED EVAN BOOKBINDER 9-18-2013 Implemented config.vm
## UPDATED EVAN BOOKBINDER 9-18-2013 Implemented config.vm ##
## MIKE DANGELO 06-25-2014 removed bullet format/went to free form text per request of local offices, moved ugcline per local examples ##
##################################################################
##
#parse("config.vm")
${WMOId} ${vtecOffice} 000000 ${BBBId}
AWW${siteId}
${ugcline}
#if(${productClass}=="T")
TEST...AIRPORT WEATHER WARNING...TEST##
#else
AIRPORT WEATHER WARNING##
AIRPORT WEATHER WARNING
#end
NATIONAL WEATHER SERVICE ${officeShort}
#backupText(${backupSite})
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@ -22,21 +23,6 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
${ugcline}
#foreach (${area} in ${areas})
${area.name}##
#if(${includeStateAbbreviation}==true)
${area.stateabbr}##
#end
-##
#end
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#######################################################################
## Set initial variables for initial issuance
#######################################################################
@ -77,12 +63,10 @@ ${site}
#if(${list.contains(${bullets}, "cancelAWW")})
!** GIVE REASON FOR CANCELLATION **!
#else
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
FOR THE FOLLOWING THREATS...
@ -91,23 +75,23 @@ FOR THE FOLLOWING THREATS...
## Sites can add or modify threats by changing the code below
###################################################################
#if(${list.contains(${bullets}, "wind")})
* WIND GUSTS 30 KNOTS OR HIGHER.
WIND GUSTS 30 KNOTS OR HIGHER.
#end
#if(${list.contains(${bullets}, "lightning")})
* CLOUD TO GROUND LIGHTNING WITHIN 5 NM OF THE AIRPORT.
CLOUD TO GROUND LIGHTNING WITHIN 5 NM OF THE AIRPORT.
#end
#if(${list.contains(${bullets}, "hail")})
* HAIL OF 1/2 INCH OR GREATER.
HAIL OF 1/2 INCH OR GREATER.
#end
#if(${list.contains(${bullets}, "freezingRain")})
* ONSET OF FREEZING RAIN.
THE ONSET OF FREEZING RAIN.
#end
#if(${list.contains(${bullets}, "sleetSnow")})
* ONSET OF ACCUMULATING SLEET OR SNOW.
THE ONSET OF ACCUMULATING SLEET OR SNOW.
#end
@ -119,16 +103,16 @@ FOR THE FOLLOWING THREATS...
## If sites do not want watches in their AWW product comment out the
## section below
#######################################################################
#if(${list.contains(${includedWatches}, "TO.A")} && ${list.contains(${bullets}, "includeTorWatches")})
#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")} && ${list.contains(${bullets}, "includeSvrWatches")})
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
###printcoords(${areaPoly}, ${list})
## #printcoords(${areaPoly}, ${list})
$$

View file

@ -3,13 +3,14 @@
<!-- Customized by Phil Kurimski WFO DTX 12 April 2012
Updated by Phil Kurimski 12 September 2012 OB12.9.1-12
Updated Evan Bookbinder 5-5-13 to change units per Directive
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 09-19-2013 added geospatialConfig.xml - used ZONE as default
-->
<warngenConfig>
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
ANY pointSource/areaSource/pathcastConfig OVERRIDES TO THAT FILE CAN BE
PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
PLACED IN FULL BELOW THE INCLUDE LINE BELOW. CHANGE TO "geospatialConfig_COUNTY.xml" if desired
-->
<include file="geospatialConfig_ZONE.xml"/>
<!-- Include Various geospatial XML files to create their objects. These are *NOT*
@ -26,12 +27,13 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<!-- Maps to load on template selection. Refer to 'Maps' menu in CAVE.
The various menu items are also the different maps
that can be loaded with each template. -->
that can be loaded with each template. -->
<maps>
<map>ACARS Airport Locations</map>
<map>County Warning Areas</map>
<map>Forecast Zones</map>
</maps>
<!-- Followups: VTEC actions of allowable followups when this template is selected -->
<followups>
<followup>COR</followup>
@ -48,11 +50,11 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->

View file

@ -17,6 +17,9 @@
## Mike Rega 01-17-2014 added GP Alaska changes 14.2.1 ##
## Mike Dangelo 1/24/2014 made many changes for first bullet to match 10-922 ##
## Mike Rega 02-27-2014 changed hycType IJ to match 10-922 ##
## Phil Kurimski 06-24-2014 altered urbanCTA for more succinct words ##
## and poor drainage wording OB14.2.2-9 ##
## Evan Bookbinder 09-5-2014 added automated guage verbiage ##
###################################################################################
#parse("config.vm")
#if(${action} == "EXT")
@ -91,7 +94,7 @@
#set($advType = "HYDROLOGIC ADVISORY FOR RAPID RISES FOR...")
#end
#elseif(${list.contains(${bullets}, "poorDrainage")})
#set($advType = "FLOOD ADVISORY FOR MINOR FLOODING FOR POOR DRAINAGE AREAS FOR...")
#set($advType = "FLOOD ADVISORY FOR MINOR FLOODING IN POOR DRAINAGE AREAS FOR...")
#if(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD ADVISORY FOR POOR DRAINAGE AREAS FOR...")
#end
@ -208,7 +211,7 @@ ${advType}
#set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} WHICH WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA.")
#end
#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "actual")})
#set($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA.")
#set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA.")
#end
#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
#set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA.")
@ -269,7 +272,7 @@ ${advType}
#end
#### added by GP
#if(${list.contains(${bullets}, "onlyGauge")})
#set($report = "REPORTING GAUGES INDICATE !**EVENT TYPE**!." )
#set($report = "GAUGE REPORTS INDICATED !**EVENT TYPE**!." )
#end
### GP end
* ##
@ -290,13 +293,14 @@ THIS IS A TEST MESSAGE. ##
############# IF TRACK IS ENABLED AND stormPosition SELECTED ###############################################
#if(${list.contains(${bullets},"stormPosition")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
#if(${stormType} == "line")
...A LINE OF THUNDERSTORMS PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#else
...A THUNDERSTORM PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceCell})
#set($phenom="")
#if(${stormType} == "line" && ${list.contains(${bullets}, "thunder")})
#set($phenom="A LINE OF THUNDERSTORMS PRODUCING ")
#elseif(${list.contains(${bullets}, "thunder")})
#set($phenom="A THUNDERSTORM PRODUCING ")
#end
...${phenom}HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#if(${movementSpeed} < ${landStationary} || ${stationary})
...AND IS STATIONARY. ##
#else
@ -387,7 +391,7 @@ MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHER
#end
#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
#if(${list.contains(${bullets}, "ruralCTA")})

View file

@ -12,7 +12,10 @@
Mike Dangelo 09-18-2013 to optionally allow <trackEnabled>=true for pathcasting, and add pointMarker.xml 'include'
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 01-17-2014 added Alaska GP changes for 14.2.1
Mike Dangelo 1/23/2014 added IC and advType group to bottom of bullets (for info only, they are locked anyway, no need to have it at the top)
Mike Dangelo 1/23/2014 added IC and advType group to bottom of bullets (for info only, they are locked anyway, no need to have it at the top)
Phil Kurimski 06-24-2014 Put types of warnings and IC back at the top (forecasters rely on this when choosing a con statement
to determine what warning they are following up!)
Fixed Gauge reports source selection
-->
@ -104,9 +107,6 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<bullet bulletText="*********** PRIMARY CAUSE *********** " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain (default)" bulletDefault="true" bulletGroup="ic" parseString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM."/>
@ -114,6 +114,9 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR."/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" bulletDefault="true" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
@ -123,13 +126,13 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<bullet bulletName="satelliteEstimates" bulletText="Satellite Estimates" bulletGroup="advSource" parseString="SATELLITE ESTIMATES"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="source" parseString="GAUGE REPORTS "/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="advSource" parseString="GAUGE REPORTS"/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" bulletDefault="true" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="advEvent" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="advEvent" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -154,43 +157,12 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="Y">
<bullets>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
<bullet bulletName="trainedSpotters" bulletText="Trained spotters reported" bulletGroup="advSource" parseString="TRAINED WEATHER SPOTTERS REPORTED"/>
<bullet bulletName="public" bulletText="Public reported" bulletGroup="advSource" parseString="THE PUBLIC REPORTED"/>
<bullet bulletName="lawEnforcement" bulletText="Local law enforcement reported" bulletGroup="advSource" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="source" parseString="GAUGE REPORTS "/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" bulletDefault="true" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="advEvent" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="advEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
<bullet bulletName="rain3" bulletText="Three inches so far" bulletGroup="rainAmt" parseString="THREE INCHES OF RAIN HAVE ALREADY FALLEN"/>
<bullet bulletName="rainEdit" bulletText="User defined amount" bulletGroup="rainAmt" parseString="INCHES OF RAIN HAVE FALLEN"/>
<bullet bulletText="*********** ADDITIONAL INFO ***********" bulletType="title"/>
<bullet bulletName="listofcities" bulletDefault="true" bulletText="Select for a list of cities" bulletGroup="pcast"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<!-- <bullet bulletName="pathcast" bulletText="* Use storm track for pathcast (for thunderstorms) *" bulletGroup="pcast" parseString="OVER THE FOLLOWING LOCATIONS..."/> -->
<bullet bulletName="addRainfall" bulletText="Additional rainfall of XX inches expected" parseString="ADDITIONAL RAINFALL"/>
<bullet bulletName="specificPlace" bulletText="Specify location" parseString="FLOODING IS OCCURING"/>
<bullet bulletName="drainages" bulletText="Automated list of drainages" parseString="THIS INCLUDES THE FOLLOWING STREAMS AND DRAINAGES" loadMap="River Drainage Basins"/>
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<bullet bulletName="advisoryMeansCTA" bulletText="A flood advisory means" parseString="A FLOOD ADVISORY MEANS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="general (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="***** PRIMARY CAUSE (locked) *****" bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -198,20 +170,9 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, the advType and optType are locked, just for display -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="general (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXT" phen="FA" sig="Y">
<bullets>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
@ -220,13 +181,13 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="lawEnforcement" bulletText="Local law enforcement reported" bulletGroup="advSource" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="source" parseString="GAUGE REPORTS "/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="advSource" parseString="GAUGE REPORTS"/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" bulletDefault="true" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="advEvent" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="advEvent" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -248,7 +209,16 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<bullet bulletName="advisoryMeansCTA" bulletText="A flood advisory means" parseString="A FLOOD ADVISORY MEANS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXT" phen="FA" sig="Y">
<bullets>
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="general (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="***** PRIMARY CAUSE (locked) *****" bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -256,16 +226,45 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, the advType and optType are locked, just for display -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="general (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
<bullet bulletName="trainedSpotters" bulletText="Trained spotters reported" bulletGroup="advSource" parseString="TRAINED WEATHER SPOTTERS REPORTED"/>
<bullet bulletName="public" bulletText="Public reported" bulletGroup="advSource" parseString="THE PUBLIC REPORTED"/>
<bullet bulletName="lawEnforcement" bulletText="Local law enforcement reported" bulletGroup="advSource" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="advSource" parseString="GAUGE REPORTS"/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" bulletDefault="true" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="advEvent" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
<bullet bulletName="rain3" bulletText="Three inches so far" bulletGroup="rainAmt" parseString="THREE INCHES OF RAIN HAVE ALREADY FALLEN"/>
<bullet bulletName="rainEdit" bulletText="User defined amount" bulletGroup="rainAmt" parseString="INCHES OF RAIN HAVE FALLEN"/>
<bullet bulletText="*********** ADDITIONAL INFO ***********" bulletType="title"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="&quot;LOCATIONS&quot;,&quot;INCLUDE...&quot;"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<!-- <bullet bulletName="pathcast" bulletText="* Use storm track for pathcast (for thunderstorms) *" bulletGroup="pcast" parseString="OVER THE FOLLOWING LOCATIONS..."/> -->
<bullet bulletName="addRainfall" bulletText="Additional rainfall of XX inches expected" parseString="ADDITIONAL RAINFALL"/>
<bullet bulletName="specificPlace" bulletText="Specify location" parseString="FLOODING IS OCCURING"/>
<bullet bulletName="drainages" bulletText="Automated list of drainages" parseString="THIS INCLUDES THE FOLLOWING STREAMS AND DRAINAGES" loadMap="River Drainage Basins"/>
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<bullet bulletName="advisoryMeansCTA" bulletText="A flood advisory means" parseString="A FLOOD ADVISORY MEANS"/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -9,6 +9,7 @@
## Mike Dangelo 9-18-2013 added initial position and pathcasting options
## Evan Bookbinder 9-18-2013 implemented config.vm ##
## Mike Rega 1-18-2014 added Alaska GP changes for 14.2.1 ##
## Phil Kurimski 06-24-2014 altered urbanCTA for more succinct words ##
##################################################################################
#parse("config.vm")
#if(${action} == "EXT")
@ -147,7 +148,7 @@
#end
#### added by GP
#if(${list.contains(${bullets}, "onlyGauge")})
#set ($report = "REPORTING GAUGES INDICATE !**EVENT TYPE**!." )
#set ($report = "GAUGE REPORTS INDICATED !**EVENT TYPE**!." )
#end
### GP end
##########################################
@ -280,13 +281,14 @@ THIS IS A TEST MESSAGE. ##
############# IF TRACK IS ENABLED AND stormPosition SELECTED ###############################################
#if(${list.contains(${bullets},"stormPosition")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
#if(${stormType} == "line")
...A LINE OF THUNDERSTORMS PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#else
...A THUNDERSTORM PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceCell})
#set($phenom="")
#if(${stormType} == "line" && ${list.contains(${bullets}, "thunder")})
#set($phenom="A LINE OF THUNDERSTORMS PRODUCING ")
#elseif(${list.contains(${bullets}, "thunder")})
#set($phenom="A THUNDERSTORM PRODUCING ")
#end
...${phenom}HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#if(${movementSpeed} < ${landStationary} || ${stationary})
...AND IS STATIONARY. ##
#else
@ -594,7 +596,7 @@ MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHER
#end
#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
#if(${list.contains(${bullets}, "ruralCTA")})

View file

@ -13,6 +13,8 @@
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
Mike Dangelo 1/23/2014 added IC and advType group to bottom of bullets (for info only, they are locked anyway, no need to have it at the top)
Phil Kurimski 06-24-2014 Put types of warnings and IC back at the top (forecasters rely on this when choosing a con statement
to determine what warning they are following up!)
-->
<warngenConfig>
@ -83,12 +85,12 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
</bulletActionGroup>
<bulletActionGroup action="CAN" phen="FA" sig="Y">
<bullets>
<bullet bulletName="recedingWater" bulletText="Receding water" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
<bullet bulletText="*********** HYDROLOGIC CONDITION (If applicable) *********** " bulletType="title"/>
<bullet bulletName="rapidRiver" bulletText="Rapid river rises" bulletGroup="hyCond" parseString="FOR RAPID RIVER RISES" showString="RAPID RIVER RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="hyCond" parseString="MINOR FLOODING OF POOR DRAINAGE AREAS" showString="MINOR FLOODING OF POOR DRAINAGE AREAS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="***** PRIMARY CAUSE ***** (locked) " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -96,23 +98,22 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, advType is locked, this is for display only -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRiver" bulletText="Rapid river rises" bulletGroup="hyCond" parseString="FOR RAPID RIVER RISES" showString="RAPID RIVER RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="hyCond" parseString="MINOR FLOODING OF POOR DRAINAGE AREAS" showString="MINOR FLOODING OF POOR DRAINAGE AREAS"/>
<bullet bulletText="****** CANCELLATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Receding water" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXP" phen="FA" sig="Y">
<bullets>
<bullet bulletName="recedingWater" bulletText="Water receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="***** PRIMARY CAUSE ***** (locked) " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -120,17 +121,32 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, advType is locked, this is for display only -->
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<bullet bulletText="******* EXPIRATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Water receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>
</bulletActionGroup>
<bulletActionGroup action="CON" phen="FA" sig="Y">
<bullets>
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="CON" phen="FA" sig="Y">
<bullets>
<bullet bulletText="***** PRIMARY CAUSE ***** (locked) " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="RS" bulletText="Excessive rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
@ -139,13 +155,13 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="lawEnforcement" bulletText="Local law enforcement reported" bulletGroup="advSource" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="source" parseString="GAUGE REPORTS "/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="advSource" parseString="GAUGE REPORTS"/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="advEvent" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="advEvent" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -167,7 +183,16 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<bullet bulletName="advisoryMeansCTA" bulletText="A flood advisory means" parseString="A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="Y">
<bullets>
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="***** PRIMARY CAUSE ***** (locked) " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -175,20 +200,6 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, advType is locked, this is for display only -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="Y">
<bullets>
<bullet bulletText="*********** SOURCE (choose 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="advSource" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="advSource" parseString="AUTOMATED "/>
@ -197,7 +208,7 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="lawEnforcement" bulletText="Local law enforcement reported" bulletGroup="advSource" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="emergencyManagement" bulletText="Emergency management reported" bulletGroup="advSource" parseString="EMERGENCY MANAGEMENT REPORTED"/>
<!-- added by GP -->
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="source" parseString="GAUGE REPORTS "/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="advSource" parseString="GAUGE REPORTS"/>
<!-- GP end -->
<bullet bulletText="*********** EVENT (choose one) *********** " bulletType="title"/>
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="advEvent" parseString="&quot;THUNDERSTORM&quot;,&quot;-CAUSING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
@ -205,7 +216,7 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="actual" bulletText="Minor flooding occurring" bulletGroup="advEvent" parseString="&quot;CAUSING&quot;,&quot;FLOODING&quot;,&quot;-RAPID RIVER RISES&quot;,&quot;-MINOR FLOODING OF POOR DRAINAGE&quot;"/>
<bullet bulletName="rapidRiver" bulletText="Rapid river rises" bulletGroup="advEvent" parseString="RAPID RIVER RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="advEvent" parseString="MINOR FLOODING OF POOR DRAINAGE AREAS"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="advEvent" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (OPTIONAL) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -227,21 +238,6 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<bullet bulletName="advisoryMeansCTA" bulletText="A flood advisory means" parseString="A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="***** PRIMARY CAUSE ***** (locked) " bulletType="title"/>
<bullet bulletName="ER" bulletText="Excessive rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="SM" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="RS" bulletText="Excessive rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="IJ" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="IC" bulletText="Ice jam and rain" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="DR" bulletText="Dam Gate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<!-- similarly, advType is locked, this is for display only -->
<bullet bulletText="**** TYPE OF ADVISORY (locked) ****" bulletType="title"/>
<bullet bulletName="general" bulletText="General (minor flooding)" bulletGroup="advType" parseString="&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;" showString="&quot;-HYDROLOGIC&quot;,&quot;-ARROYO&quot;,&quot;-SMALL STREAM FLOOD ADVISORY&quot;,&quot;FLOOD ADVISORY&quot;"/>
<bullet bulletName="small" bulletText="Small stream" bulletGroup="advType" parseString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;" showString="&quot;-URBAN AND&quot;,&quot;-ARROYO&quot;,&quot;SMALL STREAM FLOOD ADVISORY&quot;"/>
<bullet bulletName="uss" bulletText="Urban and small stream" bulletGroup="advType" parseString="URBAN AND SMALL STREAM FLOOD ADVISORY" showString="URBAN AND SMALL STREAM FLOOD ADVISORY"/>
<bullet bulletName="arroyo" bulletText="Arroyo and small stream" bulletGroup="advType" parseString="ARROYO" showString="ARROYO"/>
<bullet bulletName="hydrologic" bulletText="Hydrologic" bulletGroup="advType" parseString="HYDROLOGIC ADVISORY" showString="HYDROLOGIC ADVISORY"/>
<bullet bulletText="*********** OPTIONAL SPECIFIC TYPE (locked) *********** " bulletType="title"/>
<bullet bulletName="rapidRises" bulletText="Rapid river rises" bulletGroup="optType" parseString="FOR RAPID RISES" showString="FOR RAPID RISES"/>
<bullet bulletName="poorDrainage" bulletText="Minor flooding for poor drainage" bulletGroup="optType" parseString="MINOR FLOODING IN POOR DRAINAGE AREAS" showString="MINOR FLOODING IN POOR DRAINAGE AREAS"/>

View file

@ -9,6 +9,8 @@
## Evan Bookbinder 9-18-2013 implemented config.vm
## Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
## Mike Rega 02-26-2014 changed MND to IMMEDIATE BROADCAST
## Phil Kurimski 06-24-2014 rewrote code for storm position to account for non-thunderstorm events
## Evan Bookbinder 9-5-2014 corrected first bullet wording if hycType and urban/small stream were selected
#################################### SET SOME VARIABLES ###################################
#parse("config.vm")
##
@ -20,13 +22,6 @@
#set($extend = false)
#end
##
#if(${list.contains(${bullets}, "smallstreams")})
#set($advType = "FLOOD WARNING FOR SMALL STREAMS IN...")
#elseif(${list.contains(${bullets}, "urbansmallstreams")})
#set($advType = "FLOOD WARNING FOR URBAN AREAS AND SMALL STREAMS IN...")
#else
#set($advType = "FLOOD WARNING FOR...")
#end
#set($ic = "ER")
#set($hycType = "")
#if(${list.contains(${bullets}, "er")})
@ -60,6 +55,21 @@
#set($ic = "UU")
#set($hycType = "")
#end
#if(${list.contains(${bullets}, "smallstreams")})
#if(${hycType} != "")
#set($advType = "FLOOD WARNING FOR SMALL STREAMS FOR...")
#else
#set($advType = "FLOOD WARNING FOR SMALL STREAMS IN...")
#end
#elseif(${list.contains(${bullets}, "urbansmallstreams")})
#if(${hycType} != "")
#set($advType = "FLOOD WARNING FOR URBAN AREAS AND SMALL STREAMS FOR...")
#else
#set($advType = "FLOOD WARNING FOR URBAN AREAS AND SMALL STREAMS IN...")
#end
#else
#set($advType = "FLOOD WARNING FOR...")
#end
##
${WMOId} ${vtecOffice} 000000 ${BBBId}
FLW${siteId}
@ -211,13 +221,14 @@ THIS IS A TEST MESSAGE. ##
############# IF TRACK IS ENABLED AND stormPosition SELECTED ###############################################
#if(${list.contains(${bullets},"stormPosition")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
#if(${stormType} == "line")
...A LINE OF THUNDERSTORMS PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#else
...A THUNDERSTORM PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceCell})
#set($phenom="")
#if(${stormType} == "line" && ${list.contains(${bullets}, "thunder")})
#set($phenom="A LINE OF THUNDERSTORMS PRODUCING ")
#elseif(${list.contains(${bullets}, "thunder")})
#set($phenom="A THUNDERSTORM PRODUCING ")
#end
...${phenom}HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#if(${movementSpeed} < ${landStationary} || ${stationary})
...AND IS STATIONARY. ##
#else

View file

@ -14,6 +14,8 @@
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
Mike Dangelo 1/23/2014 added IC group to bottom of COR and EXT bullets (it's locked anyway, no need to have it at the top)
Phil Kurimski 06-24-2014 Put types of warnings and IC back at the top (forecasters rely on this when choosing a con statement
to determine what warning they are following up!)
-->
<warngenConfig>
@ -127,7 +129,7 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="plainRain" bulletText="Heavy rainfall (no thunder)" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-REPORTED FLOODING&quot;"/>
<bullet bulletName="floodOccurring" bulletText="Flooding occurring" bulletGroup="event" parseString="&quot;REPORTED FLOODING&quot;"/>
<bullet bulletName="genericFlood" bulletText="Generic (provide reasoning)" bulletGroup="event"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="event" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN AMOUNT (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -154,6 +156,21 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="W">
<bullets>
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="rs" bulletText="Rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="ij" bulletText="Ice Jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="ic" bulletText="Ice Jam/Rain/SnowMelt" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="mc" bulletText="Multiple Causes" bulletGroup="ic" parseString=".MC." showString=".MC."/>
<bullet bulletName="uu" bulletText="Unknown Cause" bulletGroup="ic" parseString=".UU." showString=".UU."/>
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<bullet bulletText="*********** SOURCE (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="source" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="source" parseString="AUTOMATED "/>
@ -169,7 +186,7 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="plainRain" bulletText="Heavy rainfall (no thunder)" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-REPORTED FLOODING&quot;"/>
<bullet bulletName="floodOccurring" bulletText="Flooding occurring" bulletGroup="event" parseString="&quot;REPORTED FLOODING&quot;"/>
<bullet bulletName="genericFlood" bulletText="Generic (provide reasoning)" bulletGroup="event"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="event" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN AMOUNT (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -194,7 +211,14 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXT" phen="FA" sig="W">
<bullets>
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -206,16 +230,7 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXT" phen="FA" sig="W">
<bullets>
<bullet bulletText="*********** SOURCE (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletText="*********** SOURCE (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="source" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="source" parseString="AUTOMATED "/>
<bullet bulletName="trainedSpotters" bulletText="Trained spotters reported" bulletGroup="source" parseString="TRAINED WEATHER SPOTTERS REPORTED"/>
@ -230,7 +245,7 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="plainRain" bulletText="Heavy rainfall (no thunder)" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-REPORTED FLOODING&quot;"/>
<bullet bulletName="floodOccurring" bulletText="Flooding occurring" bulletGroup="event" parseString="&quot;REPORTED FLOODING&quot;"/>
<bullet bulletName="genericFlood" bulletText="Generic (provide reasoning)" bulletGroup="event"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="event" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN AMOUNT (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -255,23 +270,6 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="rs" bulletText="Rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="ij" bulletText="Ice Jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="ic" bulletText="Ice Jam/Rain/SnowMelt" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="mc" bulletText="Multiple Causes" bulletGroup="ic" parseString=".MC." showString=".MC."/>
<bullet bulletName="uu" bulletText="Unknown Cause" bulletGroup="ic" parseString=".UU." showString=".UU."/>
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -12,6 +12,8 @@
## Mike Rega 1-18-2014 added Alaska GP changes for 14.2.1
## Mike Rega 2-27-2014 changed headline items to match 10-922
## Mike Rega 4-23-2014 fixed MND blank line
## Phil Kurimski 6-24-2014 put type of warning in headline and changed CAN/EXP wording per 10-922 directive
## Evan Bookbinder 9-5-2014 corected advType inclusion in the headline
#################################### SET SOME VARs ###################################
#parse("config.vm")
#set($hycType = "")
@ -35,6 +37,8 @@
#elseif(${ic} == "UU")
#set($hycType = "")
#set($floodReason = "")
#elseif(${ic} == "ER")
#set($hycType = "")
#elseif(${ic} == "DM")
#set($hycType = "A LEVEE FAILURE")
#set($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.")
@ -45,6 +49,13 @@
#set($hycType = "A GLACIER-DAMMED LAKE OUTBURST")
#set($floodReason = " FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST WILL CONTINUE.")
#end
#if(${list.contains(${bullets}, "smallstreams")})
#set($advType = "FOR SMALL STREAMS ")
#elseif(${list.contains(${bullets}, "urbansmallstreams")})
#set($advType = "FOR URBAN AREAS AND SMALL STREAMS ")
#else
#set($advType = "")
#end
##
######################################################################################
${WMOId} ${vtecOffice} 000000 ${BBBId}
@ -114,13 +125,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
############################
### CREATE PHRASING DEPENDING ON WHETHER WE ISSUE EXP PRIOR TO EXPIRATION TIME OR NOT
#if(${now.compareTo(${expire})} >= 0 && ${action}=="EXP" )
#set($expcanHLTag = "HAS EXPIRED")
#set($expcanHLTag = "HAS EXPIRED FOR")
#set($expcanBODYTag = "HAS BEEN ALLOWED TO EXPIRE")
#elseif(${action}=="EXP")
#set($expcanHLTag = "WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}")
#set($expcanBODYTag = "WILL BE ALLOWED TO EXPIRE")
#elseif(${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
#set($expcanHLTag = "IS CANCELLED")
#set($expcanHLTag = "HAS BEEN CANCELLED FOR")
#set($expcanBODYTag = "HAS BEEN CANCELLED")
#end
################################
@ -128,39 +139,31 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
################################
#if(${action}=="EXP" || ${action}=="CAN")
...THE FLOOD WARNING FOR ##
#### modified by GP
#if(${hycType} != "" && ${alaska} != "true")
<L>${hycType}</L> IN ##
#end
#if(${hycType} != "" && ${alaska} == "true")
<L>${hycType}</L> ##
...THE FLOOD WARNING ${advType}##
#if(${hycType} != "")
FOR <L>${hycType}</L> ##
#end
#if(${alaska}=="true")
!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! ${expcanHLTag}...
${expcanHLTag} !**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
#elseif(${wrZoneCounty}=="true")
#headlineLocList(${affectedCounties} true true true false) ${expcanHLTag}...
${expcanHLTag} #headlineLocList(${affectedCounties} true true true false)...
#else
#headlineLocList(${areas} true true true false) ${expcanHLTag}...
${expcanHLTag} #headlineLocList(${areas} true true true false)...
#end
### GP end
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE FLOOD WARNING FOR ##
### added by GP
#if(${hycType} != "" && ${alaska} != "true")
<L>${hycType}</L> IN ##
#end
#if(${hycType} != "" && ${alaska} == "true")
<L>${hycType}</L> ##
...THE FLOOD WARNING ${advType}##
#if(${hycType} != "")
FOR <L>${hycType}</L> ##
#end
#if(${alaska}=="true")
!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! ${expcanHLTag}...
${expcanHLTag} !**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
#elseif(${wrZoneCounty}=="true")
#headlineLocList(${cancelaffectedCounties} true true true false) ${expcanHLTag}...
${expcanHLTag} #headlineLocList(${cancelaffectedCounties} true true true false)...
#else
#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
${expcanHLTag} #headlineLocList(${cancelareas} true true true false)...
#end
### GP end
#end
@ -241,7 +244,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
THIS IS A TEST MESSAGE.##
#end
...A FLOOD WARNING ##
...A FLOOD WARNING ${advType}##
#if(${hycType} != "")
FOR <L>${hycType}</L> ##
#end
@ -299,13 +302,14 @@ THIS IS A TEST MESSAGE. ##
############# IF TRACK IS ENABLED AND stormPosition SELECTED ###############################################
#if(${list.contains(${bullets},"stormPosition")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
#if(${stormType} == "line")
...A LINE OF THUNDERSTORMS PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#else
...A THUNDERSTORM PRODUCING HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceCell})
#set($phenom="")
#if(${stormType} == "line" && ${list.contains(${bullets}, "thunder")})
#set($phenom="A LINE OF THUNDERSTORMS PRODUCING ")
#elseif(${list.contains(${bullets}, "thunder")})
#set($phenom="A THUNDERSTORM PRODUCING ")
#end
...${phenom}HEAVY RAIN WAS LOCATED ##
#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine})
#if(${movementSpeed} < ${landStationary} || ${stationary})
...AND IS STATIONARY. ##
#else

View file

@ -11,6 +11,8 @@
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
Mike Dangelo 1/23/2014 added IC group to bottom of CON bullets (it's locked anyway, no need to have it at the top)
Phil Kurimski 06-24-2014 Put types of warnings and IC back at the top (forecasters rely on this when choosing a con statement
to determine what warning they are following up!)
-->
<warngenConfig>
@ -93,10 +95,10 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
</bulletActionGroup>
<bulletActionGroup action="CAN" phen="FA" sig="W">
<bullets>
<bullet bulletText="****** CANCELLATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Receding water" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -108,19 +110,17 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="****** CANCELLATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Receding water" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXP" phen="FA" sig="W">
<bullets>
<bullet bulletText="******* EXPIRATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Water receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -132,15 +132,28 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="******* EXPIRATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Water receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>
</bulletActionGroup>
<bulletActionGroup action="CON" phen="FA" sig="W">
<bullets>
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="rs" bulletText="Rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="ij" bulletText="Ice Jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="ic" bulletText="Ice Jam/Rain/Snowmelt" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="mc" bulletText="Multiple Causes" bulletGroup="ic" parseString=".MC." showString=".MC."/>
<bullet bulletName="uu" bulletText="Unknown Cause" bulletGroup="ic" parseString=".UU." showString=".UU."/>
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<bullet bulletText="*********** SOURCE (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="source" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="source" parseString="AUTOMATED "/>
@ -156,7 +169,7 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="plainRain" bulletText="Heavy rainfall (no thunder)" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-REPORTED FLOODING&quot;"/>
<bullet bulletName="floodOccurring" bulletText="Flooding occurring" bulletGroup="event" parseString="&quot;REPORTED FLOODING&quot;"/>
<bullet bulletName="genericFlood" bulletText="Generic (provide reasoning)" bulletGroup="event"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="event" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -182,7 +195,14 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="W">
<bullets>
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
@ -194,15 +214,6 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR" phen="FA" sig="W">
<bullets>
<bullet bulletText="*********** SOURCE (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="source" parseString="DOPPLER RADAR"/>
<bullet bulletName="dopplerGauge" bulletText="Doppler radar and automated gauges" bulletGroup="source" parseString="AUTOMATED "/>
@ -218,7 +229,7 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="plainRain" bulletText="Heavy rainfall (no thunder)" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;,&quot;-REPORTED FLOODING&quot;"/>
<bullet bulletName="floodOccurring" bulletText="Flooding occurring" bulletGroup="event" parseString="&quot;REPORTED FLOODING&quot;"/>
<bullet bulletName="genericFlood" bulletText="Generic (provide reasoning)" bulletGroup="event"/>
<!-- <bullet bulletName="stormPosition" bulletText="* Thunderstorm(s): use dot to specify initial position *" bulletGroup="event" parseString="LOCATED"/> -->
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" bulletGroup="addEvent" parseString="LOCATED"/> -->
<bullet bulletText="*********** RAIN SO FAR (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="rain1" bulletText="One inch so far" bulletGroup="rainAmt" parseString="ONE INCH OF RAIN HAS ALREADY FALLEN"/>
<bullet bulletName="rain2" bulletText="Two inches so far" bulletGroup="rainAmt" parseString="TWO INCHES OF RAIN HAVE ALREADY FALLEN"/>
@ -244,23 +255,6 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT"/>
<!-- This next section really serves no purpose but to display the Primary Cause (IC in HVTEC). The IC items are locked and cannot be changed. -->
<bullet bulletText="*** PRIMARY CAUSE *** (locked)" bulletType="title"/>
<bullet bulletName="er" bulletText="Excessive Rain" bulletGroup="ic" parseString=".ER." showString=".ER."/>
<bullet bulletName="sm" bulletText="Snowmelt" bulletGroup="ic" parseString=".SM." showString=".SM."/>
<bullet bulletName="rs" bulletText="Rain and snowmelt" bulletGroup="ic" parseString=".RS." showString=".RS."/>
<bullet bulletName="ij" bulletText="Ice Jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="ic" bulletText="Ice Jam/Rain/Snowmelt" bulletGroup="ic" parseString=".IC." showString=".IC."/>
<bullet bulletName="mc" bulletText="Multiple Causes" bulletGroup="ic" parseString=".MC." showString=".MC."/>
<bullet bulletName="uu" bulletText="Unknown Cause" bulletGroup="ic" parseString=".UU." showString=".UU."/>
<bullet bulletName="dm" bulletText="Levee Failure" bulletGroup="ic" parseString=".DM." showString=".DM."/>
<bullet bulletName="dr" bulletText="Dam Floodgate Release" bulletGroup="ic" parseString=".DR." showString=".DR."/>
<bullet bulletName="go" bulletText="Glacial Lake Outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<!-- similarly, the type of warning is locked -->
<bullet bulletText="**** TYPE OF WARNING (locked) ****" bulletType="title"/>
<bullet bulletName="generic" bulletText="Flood warning: generic" bulletGroup="ttt" parseString="FLOOD WARNING FOR..." showString="FLOOD WARNING FOR..."/>
<bullet bulletName="smallstreams" bulletText="Flood warning for small streams" bulletGroup="ttt" parseString="FLOOD WARNING FOR SMALL STREAMS" showString="FLOOD WARNING FOR SMALL STREAMS" />
<bullet bulletName="urbansmallstreams" bulletText="Flood warning for urban areas and small stream" bulletGroup="ttt" parseString="FLOOD WARNING FOR URBAN" showString="FLOOD WARNING FOR URBAN"/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -3,6 +3,7 @@
## If you have any questions please contact Evan Bookbinder - WFO EAX
## CREATED 9/20/2013
## Edited by Mike Rega 01-17-2014 added Alaska changes for 14.12.1
## Edited by Evan Bookbinder 09-16-2014 Changes for 2015 Impact-based warnings
############################################################################
### SET LAND REFERENCE DISTANCE UNITS
#set($landDistanceUnits = "MILES")
@ -66,3 +67,12 @@
### SET IF A WESTERN REGION WFO THAT USES MIXED ZONES / COUNTIES IN FLOOD PRODUCTS
### default is false
#set($wrZoneCounty = false)
###
### CHANGES BELOW ANTICIPATED FOR 2015 IBW EXPERIMENT.
###
#set($svrHailConsiderableThreshold = 1.75)
#set($svrHailExtremeThreshold = 4)
#set($svrWindConsiderableThreshold = 80)
#set($svrWindExtremeThreshold = 100)
#set($svrDamageConsiderablePhrase = "SEVERE DAMAGE THREAT...CONSIDERABLE")
#set($svrDamageExtremePhrase = "SEVERE DAMAGE THREAT...EXTREME")

View file

@ -1,17 +1,21 @@
#*
CREATED 09-20-2013 BY EVAN BOOKBINDER
UPDATED 6-26-14 EVAN BOOKBINDER TO HANDLE MARINE EVENTS
Right now DSS for marine events is restricted to IBW SMWs where
#set($marine = "true") is explicitly created at the top of the .vm file
dbTable list should include the pointSource objects created in
dssEvents.xml
*#
#if ($dss_events)
#set($size = ${list.size($dss_events)})
#if(${marine})
#if (($dss_events_marine))
#set($size = ${list.size($dss_events_marine)})
#if ($size > 0)
PEOPLE ATTENDING ##
#set($counter = 1)
#foreach($dss in $dss_events)
#foreach($dss in $dss_events_marine)
#if($counter < $size)
${dss.name}...##
#set($counter = $counter + 1)
@ -25,4 +29,25 @@ ${dss.name} ##
SHOULD SEEK SAFE SHELTER IMMEDIATELY!
#end
#end
#end
#elseif (($dss_events))
#set($size = ${list.size($dss_events)})
#if ($size > 0)
PEOPLE ATTENDING ##
#set($counter = 1)
#foreach($dss in $dss_events)
#if($counter < $size)
${dss.name}...####
#set($counter = $counter + 1)
#elseif($counter == $size)
#if($size > 1)
AND ##
#end
${dss.name} ##
#end
#end
SHOULD SEEK SAFE SHELTER IMMEDIATELY!
#end
#end

View file

@ -1,24 +1,10 @@
<!--
CREATED 9-20-2013 BY EVAN BOOKBINDER
CREATED 6-25-14 BY EVAN BOOKBINDER
Take Real-Time DSS Events from the mapdata.warngen_dss postGres table
(as generated by software created by Evan Bookbinder (EAX) and Phil Kurimski (DTX)),
and include them in our warning polygons.
<pointSource variable="dss">
<pointSource>warngen_dss</pointSource>
<pointField>NAME</pointField>
<searchMethod>TRACK</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>10</maxResults>
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
</sortBy>
</pointSource>
-->
<pointSource variable="dss_events">
<pointSource>warngen_dss</pointSource>
<pointField>NAME</pointField>
@ -28,5 +14,32 @@
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
<sort>warngenlev</sort>
</sortBy>
<filter>
<mapping key="WARNGENLEV">
<constraint constraintValue="1,3" constraintType="IN" />
</mapping>
</filter>
</pointSource>
<pointSource variable="dss_events_marine">
<pointSource>warngen_dss</pointSource>
<pointField>NAME</pointField>
<searchMethod>TRACK</searchMethod>
<withinPolygon>true</withinPolygon>
<maxResults>10</maxResults>
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
<sort>warngenlev</sort>
</sortBy>
<filter>
<mapping key="WARNGENLEV">
<constraint constraintValue="2,3" constraintType="IN" />
</mapping>
</filter>
</pointSource>
-->

View file

@ -2,30 +2,39 @@
## FIRE WARNING TEMPLATE ##
## VERSION 1.1 ##
## CREATED BOOKBINDER/DANGELO - 2-07-12 - Initial OB12 Write ##
## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
## Mike Dangelo 6-25-2014 turned off auto-lock in xml and added specific lock tags herein to facilitate editing the agency name in the MND header. ##
###############################################################################
#parse("config.vm")
${WMOId} ${vtecOffice} 000000 ${BBBId}
FRW${siteId}
${ugcline}
<L>${ugcline}</L>
BULLETIN - EAS ACTIVATION REQUESTED
<L>BULLETIN - EAS ACTIVATION REQUESTED</L>
#if(${productClass}=="T")
TEST...FIRE WARNING...TEST
<L>TEST...FIRE WARNING...TEST</L>
#else
FIRE WARNING
<L>FIRE WARNING</L>
#end
!** ENTER AUTHORIZING AGENCY HERE **!
RELAYED BY NATIONAL WEATHER SERVICE ${officeShort}
#set($requestedBy = "!** ENTER REQUESTING AGENCY NAME HERE **!")
#if(${list.contains(${bullets}, "agency1")})
#set($requestedBy = "EXAMPLE AGENCY 1")
#end
#if(${list.contains(${bullets}, "agency2")})
#set($requestedBy = "EXAMPLE AGENCY 2")
#end
REQUESTED BY ${requestedBy}
<L>RELAYED BY NATIONAL WEATHER SERVICE ${officeShort}</L>
#backupText(${backupSite})
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## end of addition
<L>${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}</L>
#if(${productClass}=="T")
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
THE FOLLOWING MESSAGE IS BEING TRANSMITTED AT THE REQUEST OF !** ENTER AUTHORIZING AGENCY HERE **!.
THE FOLLOWING MESSAGE IS BEING TRANSMITTED AT THE REQUEST OF
$requestedBy
############################
### FIRE WEATHER EMERGENCY #
@ -74,7 +83,7 @@ A FIRE WAS RACING TOWARD !** LOCATIONS **! AND COULD REACH THERE BY !** TIME **!
#end
##
#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
<L>PRECAUTIONARY/PREPAREDNESS ACTIONS...</L>
#end
#if(${productClass}=="T")
@ -106,13 +115,16 @@ HEED ANY EVACUATION ORDERS AND FOLLOW ALL SAFETY PRECAUTIONS.
#end
#if(${ctaSelected} == "YES")
&&
<L>&&</L>
#end
#### UN-REMARK BELOW FOR LAT/LON OUTPUT
## #printcoords(${areaPoly}, ${list})
#### UN-REMARK 3 LINES BELOW FOR LAT/LON OUTPUT
#### (leave double pound signs after the first lock tag and after the #printcoords call
#### to allow for text wrapping and locking to work properly)
## <L>##
## #printcoords(${areaPoly}, ${list}) ##
## </L>
$$
<L>$$</L>
#parse("forecasterName.vm")

View file

@ -5,6 +5,7 @@
DR 14691 added feAreaField
Evan Bookbinder 09-12-2012 added new areaSource object
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Dangelo 06-25-2014 disabled autoLockText and added example requesting agency bullets
-->
<warngenConfig>
@ -25,7 +26,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<unitDistance>mi</unitDistance>
<unitSpeed>mph</unitSpeed>
<!-- No WarnGen Pathcast Track -->
<!-- enable/disable WarnGen Pathcast Track -->
<trackEnabled>false</trackEnabled>
<!-- Maps to load on template selection. Refer to 'Maps' menu in CAVE.
@ -49,10 +50,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<enableRestart>true</enableRestart>
<!-- Enable/disables the system to lock text based on various patterns -->
<autoLockText>true</autoLockText>
<autoLockText>false</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
</includedWatches>
@ -77,6 +78,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bulletActionGroup action="NEW">
<bullets>
<bullet bulletName="fireEmergency" bulletText="** SELECT FOR FIRE EMERGENCY **" parseString="FIRE EMERGENCY" />
<bullet bulletText="****** REQUESTING AGENCY *******" bulletType="title" />
<bullet bulletName="manualAgency" bulletText="manually enter other agency name" bulletGroup="requestingAgency" bulletDefault="true" />
<bullet bulletName="agency1" bulletText="Requesting Agency example number 1" bulletGroup="requestingAgency" />
<bullet bulletName="agency2" bulletText="Requesting Agency example number 2" bulletGroup="requestingAgency" />
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title" />
<bullet bulletName="generic" bulletText="Generic wording..." bulletGroup="basis" bulletDefault="true" />
<bullet bulletName="actual" bulletText="Actual Fire..." bulletGroup="basis" parseText="COULD AFFECT" />
@ -90,6 +95,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bulletActionGroup action="COR">
<bullets>
<bullet bulletName="fireEmergency" bulletText="** SELECT FOR FIRE EMERGENCY **" parseString="FIRE EMERGENCY" />
<bullet bulletText="****** REQUESTING AGENCY *******" bulletType="title" />
<bullet bulletName="manualAgency" bulletText="manually enter other agency name" bulletGroup="requestingAgency" bulletDefault="true" />
<bullet bulletName="agency1" bulletText="Requesting Agency example number 1" bulletGroup="requestingAgency" />
<bullet bulletName="agency2" bulletText="Requesting Agency example number 2" bulletGroup="requestingAgency" />
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title" />
<bullet bulletName="generic" bulletText="Generic wording..." bulletGroup="basis" bulletDefault="true" />
<bullet bulletName="actual" bulletText="Actual Fire..." bulletGroup="basis" parseText="COULD AFFECT" />

View file

@ -10,6 +10,7 @@
## Gene Petrescu 09-19-2013 Added Alaska Modifications (GP comments)
## Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
## Mike Rega 03-05-2014 added 3rd bullet text ACROSS THE WARNED AREA
## Phil Kurimski 06-24-2014 minor changes for 14.2.2-9
#################################### SET SOME VARIABLES ###################################
#parse("config.vm")
#set($hycType = "")
@ -112,7 +113,7 @@ THIS IS A TEST MESSAGE. ##
## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
## #set($ctaSelected = "YES")
#elseif(${list.contains(${bullets}, "mudSlide")} )
#set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
#set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNED AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
## #set($ctaSelected = "YES")
#else
@ -547,7 +548,7 @@ IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY
#end
#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNED AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
#if(${list.contains(${bullets}, "powerFloodCTA")})

View file

@ -67,11 +67,11 @@ Must be paired with proper vm code (also commented out in flashFloodWarning.vm)!
<!-- <trackEnabled>true</trackEnabled> -->
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->
@ -116,8 +116,7 @@ Must be paired with proper vm code (also commented out in flashFloodWarning.vm)!
<bullet bulletName="thunder" bulletText="Thunderstorm(s)" bulletGroup="event" bulletDefault="true" parseString="THUNDERSTORM"/>
<bullet bulletName="plainRain" bulletText="Due to only heavy rain" bulletGroup="event" parseString="&quot;HEAVY RAIN&quot;,&quot;-THUNDERSTORM&quot;"/>
<bullet bulletName="flash" bulletText="Flash flooding occurring" bulletGroup="event" parseString="FLASH FLOODING IS ALREADY OCCURRING."/>
<!-- <bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" parseString="MOVING"/>
-->
<bullet bulletName="stormPosition" bulletText="* USE DOT to specify initial position *" parseString="MOVING"/>
<bullet bulletText="*********** (OPTIONAL) DEBRIS FLOW INFO **********" bulletType="title"/>
<bullet bulletName="burnScar" bulletText="Burn scar area with debris flow" bulletGroup="addevent" parseString="BURN SCAR"/>
<bullet bulletName="mudSlide" bulletText="Mud Slides" bulletGroup="addevent" parseString="MUD SLIDE"/>

View file

@ -15,6 +15,7 @@
## Mike Dangelo 09-19-2013 implemented config.vm
## Gene Petrescu 09-20-2013 added AK modifications (GP comments)
## Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
## Phil Kurimski 06-24-2014 minor changes for 14.2.2-9
#################################### SET SOME VARs ###################################
#parse("config.vm")
#set($hycType = "")
@ -262,7 +263,7 @@ REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimez
## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
## #set($ctaSelected = "YES")
#elseif(${list.contains(${bullets}, "mudSlide")} )
#set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
#set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNED AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
## #set($ctaSelected = "YES")
#else
@ -548,7 +549,7 @@ IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY
#end
#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNED AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
#if(${list.contains(${bullets}, "powerFloodCTA")})

View file

@ -82,12 +82,14 @@ Must be paired with proper vm code (also commented out in flashFloodWarningFollo
</bulletActionGroup>
<bulletActionGroup action="CAN" phen="FF" sig="W">
<bullets>
<bullet bulletText="****** CANCELLATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Water is receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>
</bulletActionGroup>
<bulletActionGroup action="EXP" phen="FF" sig="W">
<bullets>
<bullet bulletText="******* EXPIRATION OPTIONS **********" bulletType="title"/>
<bullet bulletName="recedingWater" bulletText="Water is receding" />
<bullet bulletName="rainEnded" bulletText="Heavy rain ended" />
</bullets>

View file

@ -155,6 +155,7 @@
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
<sort>warngenlev</sort>
</sortBy>
<filter>
<mapping key="WARNGENLEV">

View file

@ -136,6 +136,7 @@
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
<sort>warngenlev</sort>
</sortBy>
<filter>
<mapping key="WARNGENLEV">

View file

@ -163,6 +163,7 @@
<distanceThreshold>10</distanceThreshold>
<sortBy>
<sort>distance</sort>
<sort>warngenlev</sort>
</sortBy>
<filter>
<mapping key="WARNGENLEV">

View file

@ -2,12 +2,11 @@
## SEVERE THUNDERSTORM WARNING TEMPLATE ##
## FOR CR IMPACT BASED SVR INITIATIVE ##
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED 9-18-2013 Implement global config.vm ##
## UPDATED BOOKBINDER 9-18-2013 Implement global config.vm ##
## UPDATED BOOKBINDER 2-18-2014 Wind/hail order matrix ##
## UPDATED BOOKBINDER 9-16-2014 2015 IBW Tags ##
##################################################################
## Commented out Impact statements Feb 2013 and created file to
## be parsed into the template called impactStatements.vm
## Changes to the impact statements can be made to this file
## instead of the template
## Impact Statements for IBW templates are contained in impactStatements.vm
################################################################
##
#parse("config.vm")
@ -153,7 +152,7 @@
#if(${list.contains(${bullets}, "pingpongHail")})
#set($hailThreat = "PING PONG BALL SIZE")
#set($hailLead = "LARGE HAIL UP TO ")
#set($hailHazard = "PING PONG SIZE HAIL")
#set($hailHazard = "PING PONG BALL SIZE HAIL")
#set($hailTrail = "")
#set($hailSize = 1.50)
#set($hailTag = "1.50IN")
@ -260,6 +259,14 @@
#set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#elseif(${windSpeed} >= 80 || (${windSpeed} >= 70 && ${hailSize} <= 1.5) || (${windSpeed} >= 58 && ${hailSize} <= 1.25))
#set($hailwind = " ${reportAuthSVR} ${windThreat} AND ${hailLead}${hailThreat}${hailTrail}")
#set($hazard = "${windHazard} AND ${hailHazard}.")
#*
#if(${list.contains(${bullets}, "svrTorTag")})
#set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#else
#set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
#set($hazard = "${hailHazard} AND ${windHazard}.")
@ -429,10 +436,14 @@ THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF THIS STORM
#end
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
## parse file command here is to pull in mile marker info
##parse("mileMarkers.vm")
## parse file command here is to pull in extra points (venues) info
## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
##################################
######### CALLS TO ACTION ########
@ -624,12 +635,12 @@ TORRENTIAL RAINFALL IS OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FLOODIN
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#* NO NEED TO INCLUDE SVR T-STM WATCHES IN A SVR WARNING!!!!
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#
#end
@ -652,6 +663,14 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
${torTag}
<L>HAIL...${hailTag}</L>
<L>WIND...${windTag}</L>
### 2015 IBW ENHANCEMENT
#* REMOVE THIS COMMENT LINE WHEN DIRECTION BY YOUR REGION
#if((${hailSize} >= $svrHailExtremeThreshold) || (${windSpeed} >= $svrWindExtremeThreshold))
<L>$svrDamageExtremePhrase</L>
#elseif ((${hailSize} >= $svrHailConsiderableThreshold) || (${windSpeed} >= $svrWindConsiderableThreshold))
<L>$svrDamageConsiderablePhrase</L>
#end
*# ##REMOVE THIS COMMENT BLOCK WHEN DIRECTION BY YOUR REGION
$$

View file

@ -7,7 +7,8 @@
DR 14691 added feAreaField
Evan Bookbinder 09-11-2012 Added settings for locations shapefile
Added new areaSource object
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Evan Bookbinder 2-18-2014 corrected supercell CTA typo & added DSS Events
-->
<warngenConfig>
@ -19,10 +20,13 @@ PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
<!-- Include Various geospatial XML files to create their objects. These are *NOT*
turned on unless the corresponding .vm file is turned on in a given template's .vm file
-->
<include file="dssEvents.xml"/>
<!-- To enable, make sure dssEvents.vm is added/uncommented in the severeThunderstormWarning.vm .vm file -->
<include file="mileMarkers.xml"/>
<!-- To enable, make sure mileMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure mileMarkers.vm is added/uncommented in the severeThunderstormWarning.vm file -->
<include file="pointMarkers.xml"/>
<!-- To enable, make sure pointMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure pointMarkers.vm is added/uncommented in the severeThunderstormWarning.vm .vm file -->
<!-- Config distance/speed units -->
<unitDistance>mi</unitDistance>
@ -54,10 +58,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>torWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->
@ -142,7 +146,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can product all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>
@ -207,7 +211,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can product all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>

View file

@ -1,18 +1,20 @@
################################################################
## SEVERE WEATHER STATEMENT TEMPLATE ##
## FOR CR IMPACT BASED TOR/SVR INITIATIVE ##
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED Evan Bookbinder 2-22-13 2013 IBW Changes ##
## UPDATED -- Kurimski 5-20-13 2013 IBW Changes ##
## UPDATED -- Kurimski 9/17/13 Tor Emer Headline ##
## UPDATED -- Bookbinder 9/18/13 Implement config.vm ##
#################################################################
## SEVERE WEATHER STATEMENT TEMPLATE ##
## FOR CR IMPACT BASED TOR/SVR INITIATIVE ##
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED Evan Bookbinder 2-22-13 2013 IBW Changes ##
## UPDATED -- Kurimski 5-20-13 2013 IBW Changes ##
## UPDATED -- Kurimski 9/17/13 Tor Emer Headline ##
## UPDATED -- Bookbinder 9/18/13 Implement config.vm ##
## Mike Dangelo 1/24/2014 added logic to keep defaultCTAs from being used in a TOR EMER (duplication)
## Mike Rega 4/23/14 fixed MND blank line in CAN segment ##
## UPDATED -- Bookbinder 2/18/14 Hail/Wind priority matrix ##
## UPDATED -- Bookbinder 2/27/14 TOR EMER CTA ##
## Mike Rega 4/23/14 fixed MND blank line in CAN segment ##
## Bookbinder 6/24/14 Added code to prevent Lg/Vlnt TOR w/ base ##
## Evan Bookbinder 9/5/2014 Fixed law enf CTA ##
## Evan Bookbinder 9/16/2014 2015 IBW tag ##
################################################################
## Commented out Impact statements Feb 2013 and created file to
## be parsed into the template called impactStatements.vm
## Changes to the impact statements can be made to this file
## instead of the template
## Impact Statements for IBW templates are contained in impactStatements.vm
################################################################
#parse("config.vm")
###################################################################
@ -178,7 +180,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${action}=="EXP" || ${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
#### SET A DEFAULT STATEMENT IN CASE NO BULLET WAS SELECTED OR AVAILABLE
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED. MOVED OUT OF THE WARNED AREA.**! THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED. MOVED OUT OF THE WARNED AREA.**! THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#if(${phenomena}=="SV")
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED. MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
@ -190,9 +192,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${list.contains(${bullets}, "weakened")})
#if(${stormType} == "line")
#if(${phenomena}=="SV")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSE AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSE AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
#else
#if(${phenomena}=="SV")
@ -205,7 +207,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#### MOVED OUT OF THE WARNED AREA
#if(${list.contains(${bullets}, "movedout")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
@ -213,7 +215,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#### WEAKENED AND MOVED OUT OF THE AREA
#if(${list.contains(${bullets}, "wkndandmoved")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
@ -290,10 +292,10 @@ ${expcanPhrase} ${addthreat}
###########################################
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
@ -532,13 +534,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN ##
## VARIABLES TO HEIGHTEN AWARENESS OF THIS DANGEROUS SITUATION ##
############################################################################
#if(${list.contains(${bullets}, "torEmergency")})
#set($reportType = "TORNADO EMERGENCY FOR !** LOCATION **!. A CONFIRMED LARGE AND DESTRUCTIVE TORNADO WAS")
#if(${list.contains(${bullets}, "torEmergency")})
#set($ctaSelected = "YES")
#set($torTag = "OBSERVED")
#set($torHazard = "DEADLY TORNADO")
#set($torThreat = "<L>TORNADO DAMAGE THREAT...CATASTROPHIC</L>")
#set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#set($reportType = "A CONFIRMED LARGE AND DESTRUCTIVE TORNADO WAS")
#set($pdstor = "TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!. TAKE COVER NOW. THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
#set($pathcastLead = "THESE TORNADIC STORMS")
#set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
@ -648,7 +650,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${list.contains(${bullets}, "pingpongHail")})
#set($hailThreat = "PING PONG BALL SIZE")
#set($hailLead = "LARGE HAIL UP TO ")
#set($hailHazard = "PING PONG SIZE HAIL")
#set($hailHazard = "PING PONG BALL SIZE HAIL")
#set($hailTrail = "")
#set($hailSize = 1.50)
#set($hailTag = "1.50IN")
@ -751,8 +753,16 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${list.contains(${bullets}, "svrTorTag")})
#set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
*#
#end
#elseif(${windSpeed} >= 80 || (${windSpeed} >= 70 && ${hailSize} <= 1.5) || (${windSpeed} >= 58 && ${hailSize} <= 1.25))
#set($hailwind = " ${reportAuthSVR} ${windThreat} AND ${hailLead}${hailThreat}${hailTrail}")
#set($hazard = "${windHazard} AND ${hailHazard}.")
#*
#if(${list.contains(${bullets}, "svrTorTag")})
#set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#else
#set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
#set($hazard = "${hailHazard} AND ${windHazard}.")
@ -931,6 +941,8 @@ THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THIS STO
#end
#end
## parse file command here is to pull in mile marker info
## #parse("dssEvents.vm")
## parse file command here is to pull in extra locations (venues) info
## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
@ -954,7 +966,7 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
#if(${list.contains(${bullets}, "torEmergency")})
THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. DO NOT DELAY...SEEK SHELTER NOW! IF NO UNDERGROUND SHELTER IS AVAILABLE SEEK SHELTER IN AN INTERIOR ROOM OF THE LOWEST LEVEL OF A STRUCTURE...OR IF TIME ALLOWS...CONSIDER MOVING TO AN UNDERGROUND SHELTER ELSEWHERE. MOBILE HOMES AND OUTBUILDINGS WILL OFFER NO SHELTER FROM THIS TORNADO.
TO REPEAT...A LARGE...EXTREMELY DANGEROUS...AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...TAKE COVER NOW. MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#else
!** YOU SELECTED THE TORNADO EMERGENCY CTA WITHOUT SELECTING THE TORNADO EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
@ -965,11 +977,11 @@ THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COU
#set($dummy='dummy')
#else
#if(${list.contains(${bullets}, "defaultMobileCTA")})
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
#if(${list.contains(${bullets}, "defaultUrbanCTA")})
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE OUTDOORS OR IN A VEHICLE...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
#end
@ -986,11 +998,17 @@ TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SE
#end
#if(${list.contains(${bullets}, "largeTORCTA")})
#if(${list.contains(${bullets}, "baseTornado")} || ${list.contains(${bullets}, "landspoutTornado")})
!** LARGE AND EXTREME DANGEROUS TORNADO CTA SELECTED WITH A BASE/WEAK TORNADO WARNING. PLEASE CHECK
YOUR SELECTIONS AND REGENERATE THIS WARNING **!
#else
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
#if(${list.contains(${bullets}, "lawEnforcementCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL SEND YOUR REPORT. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
#if(${list.contains(${bullets}, "lawEnforcementTORCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL NEAREST LAW ENFORCEMENT AGENCY WHO WILL SEND YOUR REPORT. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
@ -1180,7 +1198,7 @@ TORRENTIAL RAINFALL IS OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FLOODIN
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")} && ${phenomena}=="SV")
#if(${list.contains(${includedWatches}, "torWatches")} && ${phenomena}=="SV")
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
@ -1201,6 +1219,14 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
${svrTorTag}
<L>${hailTag}</L>
<L>${windTag}</L>
### 2015 IBW ENHANCEMENT
#* REMOVE THIS COMMENT LINE WHEN DIRECTED BY YOUR REGION
#if((${hailSize} >= $svrHailExtremeThreshold) || (${windSpeed} >= $svrWindExtremeThreshold))
<L>$svrDamageExtremePhrase</L>
#elseif ((${hailSize} >= $svrHailConsiderableThreshold) || (${windSpeed} >= $svrWindConsiderableThreshold))
<L>$svrDamageConsiderablePhrase</L>
#end
*# ##REMOVE THIS COMMENT BLOCK WHEN DIRECTED BY YOUR REGION
#end
#################################################################################
## TOR Tornado/Hail/Wind Tags used by CR for the impact based Warning Experiment.

View file

@ -13,7 +13,11 @@
Added new areaSource object
Phil Kurimski 02-04-2013 OB13.2.1-5 Changed Sig Tor to Considerable
Phil Kurimski 05-20-2013 Added selection for very weak tornadoes and landspouts
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Evan Bookbinder 2-18-2014 corrected supercell CTA typo & added DSSEvents & 2014 IBW impacts
Evan Bookbinder 2-27-2014 parseStrings for Tornado Emergency and Default CTAs
Evan Bookbinder 9-5-2014 fixed parseStrings for law enf CTA
-->
<!--
Velocity Variables:
@ -41,9 +45,12 @@ PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
turned on unless the corresponding .vm file is turned on in a given template's .vm file
-->
<include file="mileMarkers.xml"/>
<!-- To enable, make sure mileMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure mileMarkers.vm is added/uncommented in the impactSevereWeatherStatement.vm file -->
<include file="pointMarkers.xml"/>
<!-- To enable, make sure pointMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure pointMarkers.vm is added/uncommented in the impactSevereWeatherStatement.vm file -->
<include file="dssEvents.xml" />
<!-- To enable, make sure dssEvents.vm is added/uncommented in the impactSevereWeatherStatement.vm file -->
<!-- Config distance/speed units -->
<unitDistance>mi</unitDistance>
@ -72,8 +79,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
</phensigs>
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<enableRestart>false</enableRestart>
@ -199,8 +206,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="*********** TYPE OF WARNING **********" bulletType="title"/>
<bullet bulletName="torEmergency" bulletText="TORNADO EMERGENCY/CATASTROPHIC TORNADO" bulletGroup="headline" parseString="TORNADO EMERGENCY"/>
<bullet bulletName="considerableTornado" bulletText="CONSIDERABLE TORNADO TAG" bulletGroup="headline" parseString="TORNADO DAMAGE THREAT...CONSIDERABLE"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" parseString="IMPACT...MOBILE HOMES WILL BE DAMAGED OR DESTROYED"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...SPORADIC DAMAGE TO MOBILE HOMES"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" parseString="IMPACT...FLYING DEBRIS WILL BE DANGEROUS"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...EXPECT DAMAGE TO MOBILE HOMES"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="dopplerTOR" bulletText="Doppler radar indicated" bulletGroup="group1" parseString="&quot;SOURCE...RADAR INDICATED&quot;,&quot;-SQUALL LINE&quot;"/>
@ -231,7 +238,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="smallHail" bulletText="Small Hail" bulletGroup="group2" parseString="&lt;.75IN"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="group2" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half Dollar size hail (1 1/4&quot;)" bulletGroup="group2" parseString="1.25IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong size hail (1 1/2&quot;)" bulletGroup="group2" parseString="1.50IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong ball size hail (1 1/2&quot;)" bulletGroup="group2" parseString="1.50IN"/>
<bullet bulletName="golfballHail" bulletText="Golf ball size hail (1 3/4&quot;)" bulletGroup="group2" parseString="1.75IN"/>
<bullet bulletName="twoinchHail" bulletText="Two Inch hail (2&quot;)" bulletGroup="group2" parseString="2.00IN"/>
<bullet bulletName="tennisBallHail" bulletText="Tennis ball hail (2 1/2&quot;)" bulletGroup="group2" parseString="2.50IN"/>
@ -252,13 +259,13 @@ 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="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS" bulletGroup="cta1"/>
<!-- <bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF IN A VEHICLE OR OUTDOORS" bulletGroup="cta1"/> -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementTORCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="NEAREST LAW ENFORCEMENT"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Thunderstorm lines can produce tornadoes" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -285,7 +292,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="nickelHail" bulletText="Nickel size hail (7/8&quot;)" bulletGroup="radioset3" parseString="0.88IN"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="radioset3" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half dollar size hail (1 1/4&quot;)" bulletGroup="radioset3" parseString="1.25IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong size hail (1 1/2&quot;)" bulletGroup="radioset3" parseString="1.50IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong ball size hail (1 1/2&quot;)" bulletGroup="radioset3" parseString="1.50IN"/>
<bullet bulletName="golfballHail" bulletText="Golf ball size hail (1 3/4&quot;)" bulletGroup="radioset3" parseString="1.75IN"/>
<bullet bulletName="twoinchHail" bulletText="Two Inch hail (2&quot;)" bulletGroup="radioset3" parseString="2.00IN"/>
<bullet bulletName="tennisBallHail" bulletText="Tennis ball hail (2 1/2&quot;)" bulletGroup="radioset3" parseString="2.50IN"/>
@ -319,12 +326,12 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="deadlyStormCTA" bulletText="(E) This is a potentially deadly storm" parseString="POTENTIALLY DEADLY STORM"/>
<bullet bulletName="widespreadWindCTA" bulletText="(E) This storm is producing widespread wind damage" parseString="EXTREMELY DANGEROUS SITUATION"/>
<bullet bulletName="historyWindHailCTA" bulletText="(E) This storm is producing destructive winds/large hail" parseString="PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="NEAREST LAW ENFORCEMENT"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can product all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>
@ -336,8 +343,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="*********** TYPE OF WARNING **********" bulletType="title"/>
<bullet bulletName="torEmergency" bulletText="TORNADO EMERGENCY/CATASTROPHIC TORNADO" bulletGroup="headline" parseString="TORNADO EMERGENCY"/>
<bullet bulletName="considerableTornado" bulletText="CONSIDERABLE TORNADO TAG" bulletGroup="headline" parseString="TORNADO DAMAGE THREAT...CONSIDERABLE"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" parseString="IMPACT...MOBILE HOMES WILL BE DAMAGED OR DESTROYED"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...SPORADIC DAMAGE TO MOBILE HOMES"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" parseString="IMPACT...FLYING DEBRIS WILL BE DANGEROUS"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...EXPECT DAMAGE TO MOBILE HOMES"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="dopplerTOR" bulletText="Doppler radar indicated" bulletGroup="group1" parseString="&quot;SOURCE...RADAR INDICATED&quot;,&quot;-SQUALL LINE&quot;"/>
@ -368,7 +375,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="smallHail" bulletText="Small Hail" bulletGroup="group2" parseString="&lt;.75IN"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="group2" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half Dollar size hail (1 1/4&quot;)" bulletGroup="group2" parseString="1.25IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong size hail (1 1/2&quot;)" bulletGroup="group2" parseString="1.50IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong ball size hail (1 1/2&quot;)" bulletGroup="group2" parseString="1.50IN"/>
<bullet bulletName="golfballHail" bulletText="Golf ball size hail (1 3/4&quot;)" bulletGroup="group2" parseString="1.75IN"/>
<bullet bulletName="twoinchHail" bulletText="Two Inch hail (2&quot;)" bulletGroup="group2" parseString="2.00IN"/>
<bullet bulletName="tennisBallHail" bulletText="Tennis ball hail (2 1/2&quot;)" bulletGroup="group2" parseString="2.50IN"/>
@ -389,13 +396,13 @@ 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="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS" bulletGroup="cta1"/>
<!-- <bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF IN A VEHICLE OR OUTDOORS" bulletGroup="cta1"/> -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementTORCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="NEAREST LAW ENFORCEMENT"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Thunderstorm line tornadoes" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -421,7 +428,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="nickelHail" bulletText="Nickel size hail (7/8&quot;)" bulletGroup="radioset3" parseString="0.88IN"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="radioset3" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half dollar size hail (1 1/4&quot;)" bulletGroup="radioset3" parseString="1.25IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong size hail (1 1/2&quot;)" bulletGroup="radioset3" parseString="1.50IN"/>
<bullet bulletName="pingpongHail" bulletText="Ping pong ball size hail (1 1/2&quot;)" bulletGroup="radioset3" parseString="1.50IN"/>
<bullet bulletName="golfballHail" bulletText="Golf ball size hail (1 3/4&quot;)" bulletGroup="radioset3" parseString="1.75IN"/>
<bullet bulletName="twoinchHail" bulletText="Two Inch hail (2&quot;)" bulletGroup="radioset3" parseString="2.00IN"/>
<bullet bulletName="tennisBallHail" bulletText="Tennis ball hail (2 1/2&quot;)" bulletGroup="radioset3" parseString="2.50IN"/>
@ -455,12 +462,12 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="deadlyStormCTA" bulletText="(E) This is a potentially deadly storm" parseString="POTENTIALLY DEADLY STORM"/>
<bullet bulletName="widespreadWindCTA" bulletText="(E) This storm is producing widespread wind damage" parseString="EXTREMELY DANGEROUS SITUATION"/>
<bullet bulletName="historyWindHailCTA" bulletText="(E) This storm is producing destructive winds/large hail" parseString="PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="NEAREST LAW ENFORCEMENT"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can product all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>

View file

@ -4,11 +4,14 @@
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED PHIL KURIMSKI -- SEP 17 2013 OB13.5.2-4 ##
## EVAN BOOKBINDER -- SEP 18 2013 Implemented config.vm
######################################################
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
## ADDED DSS EVENTS ##
#####################################################
#parse("config.vm")
################################################
## Set null variables used in the template
################################################
#set($marine = true)
#set($capable = "")
#set($ashfallPath = "")
#set($debrisflowPath = "")
@ -400,6 +403,12 @@ THIS IS A TEST MESSAGE. ##
THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent} AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
#####################
## CALL TO ACTIONS ##
#####################
@ -470,10 +479,10 @@ REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")

View file

@ -4,6 +4,7 @@
PHIL KURIMSKI WFO DTX 9-16-2013 OB13.5.2-4 FOR IMPACT BASED SMW WARNINGS
Note: Volcano information will not show up in the GUI unless uncommented out
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 06-26-2014 added DSS Events
-->
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
@ -14,6 +15,8 @@ PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
<!-- Include Various geospatial XML files to create their objects. These are *NOT*
turned on unless the corresponding .vm file is turned on in a given template's .vm file
-->
<include file="dssEvents.xml"/>
<!-- To enable, make sure dssEvents.vm is added/uncommented in the impactSpecialMarineWarning.vm .vm file -->
<include file="mileMarkers.xml"/>
<!-- To enable, make sure mileMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<include file="pointMarkers.xml"/>
@ -52,11 +55,11 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->

View file

@ -4,11 +4,14 @@
## CREATED BY PHIL KURIMSKI - WFO DTX ##
## UPDATED KURIMSKI SEP 17 2013 OB13.5.2-4 ##
## UPDATED BOOKBINDER 9-18-2013 Implemented config.vm
## PHIL KURIMSKI -- JUN 26 2014 OB14.2.2-9 ##
## ADDED DSS EVENTS ##
#####################################################
#parse("config.vm")
############################################
## Set null variables used in the template
############################################
#set($marine = true)
#set($capable = "")
#set($windhailTag = "")
#set($ashfallPath = "")
@ -397,10 +400,10 @@ ${canwarning}
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@ -501,6 +504,12 @@ THIS IS A TEST MESSAGE. ##
THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent} AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
#####################
## CALL TO ACTIONS ##
#####################
@ -571,10 +580,10 @@ REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@ -679,10 +688,10 @@ THE ${eventType} !** WEAKENED / MOVED OUT OF THE WARNED AREA **! AND NO LONGER $
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@ -810,6 +819,12 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
#end
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
#####################
## CALL TO ACTIONS ##
#####################
@ -880,10 +895,10 @@ REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#elseif(${CORCAN} == "true")
@ -952,10 +967,10 @@ THE ${eventType} !** WEAKENED / MOVED OUT OF THE WARNED AREA **! AND NO LONGER $
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@ -1072,6 +1087,12 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
#end
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
#####################
## CALL TO ACTIONS ##
#####################
@ -1142,10 +1163,10 @@ REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@ -1219,10 +1240,10 @@ ${expwarning}
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end

View file

@ -4,6 +4,7 @@
PHIL KURIMSKI WFO DTX 9-16-2013 OB13.5.2-4 FOR IMPACT BASED SMW WARNINGS
Note: Volcano information will not show up in the GUI unless uncommented out
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 06-26-2014 added DSS Events
-->
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
@ -14,6 +15,8 @@ PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
<!-- Include Various geospatial XML files to create their objects. These are *NOT*
turned on unless the corresponding .vm file is turned on in a given template's .vm file
-->
<include file="dssEvents.xml"/>
<!-- To enable, make sure dssEvents.vm is added/uncommented in the impactSpecialMarineWarningFollowup.vm .vm file -->
<include file="mileMarkers.xml"/>
<!-- To enable, make sure mileMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<include file="pointMarkers.xml"/>
@ -52,11 +55,11 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the svs -->

View file

@ -6,7 +6,8 @@
## EDITED EVAN BOOKBINDER 2-25-13 FOR IBW 2013 ##
## EDITED PHIL KURIMSKI 5-20-13 FOR UPDATED IMPACT STATEMENTS ##
## EDITED PHIL KURIMSKI 9-17-13 FOR SMW IMPACT STATEMENTS ##
## Mike D - 1/23/2014 changed to approved torEMER CTA wording, fixed typo in one $torImpact string
## EDITED EvAN BOOKBINDER 2-18-14 FOR 2014 IMPACT STATEMENTS ##
## EDITED PHIL KURIMSKI 6-26-15 FIXED CONSID IMPCT VARIABLE ##
################################################################
##
################################################################
@ -34,13 +35,13 @@
#set ($windImpactComb = "EXPECT CONSIDERABLE TREE DAMAGE. WIND DAMAGE IS ALSO LIKELY TO MOBILE HOMES...ROOFS AND OUTBUILDINGS.")
#end
#if(${windSpeed} == 80)
#set ($windImpact = "MOBILE HOMES WILL BE HEAVILY DAMAGED. FLYING DEBRIS WILL BE DANGEROUS TO PEOPLE AND ANIMALS. EXPECT CONSIDERABLE DAMAGE TO ROOFS...WINDOWS AND VEHICLES. EXTENSIVE TREE DAMAGE AND POWER OUTAGES ARE LIKELY.")
#set ($windImpact = "FLYING DEBRIS WILL BE DANGEROUS TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE HEAVILY DAMAGED. EXPECT CONSIDERABLE DAMAGE TO ROOFS...WINDOWS AND VEHICLES. EXTENSIVE TREE DAMAGE AND POWER OUTAGES ARE LIKELY.")
#end
#if(${windSpeed} == 90)
#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. MOBILE HOMES WILL BE HEAVILY DAMAGED OR DESTROYED. HOMES AND BUSINESSES WILL HAVE SUBSTANTIAL ROOF AND WINDOW DAMAGE. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. FLYING DEBRIS MAY BE DEADLY TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE HEAVILY DAMAGED OR DESTROYED. HOMES AND BUSINESSES WILL HAVE SUBSTANTIAL ROOF AND WINDOW DAMAGE. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
#end
#if(${windSpeed} == 100)
#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. MOBILE HOMES WILL BE DESTROYED. EXPECT CONSIDERABLE DAMAGE TO HOMES AND BUSINESSES. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. FLYING DEBRIS MAY BE DEADLY TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE DESTROYED. EXPECT CONSIDERABLE DAMAGE TO HOMES AND BUSINESSES. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
@ -78,27 +79,27 @@
################################################################
## The following is the base Tornado Impact Statement
################################################################
#set ($torimpact = "MOBILE HOMES WILL BE DAMAGED OR DESTROYED. DAMAGE TO ROOFS...WINDOWS AND VEHICLES WILL OCCUR. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. TREE DAMAGE IS LIKELY.")
#set ($torimpact = "FLYING DEBRIS WILL BE DANGEROUS TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE DAMAGED OR DESTROYED. DAMAGE TO ROOFS...WINDOWS AND VEHICLES WILL OCCUR. TREE DAMAGE IS LIKELY.")
################################################################
## IF A LANDSPOUT/VERY WEAK TORNADO IS SELECTED THE FOLLOWING
## IMPACT STATEMENT WILL BE USED WITH TONED DOWN WORDING
################################################################
#if(${list.contains($bullets, "landspoutTornado")})
#set ($torimpact = "SPORADIC DAMAGE TO MOBILE HOMES...ROOFS AND VEHICLES.")
#set ($torimpact = "EXPECT DAMAGE TO MOBILE HOMES...ROOFS AND VEHICLES.")
#end
############################################################################
## IF A SIGNIFICANT TORNADO IS SELECTED THE FOLLOWING IMPACT STATEMENT
## WILL BE USED FOR HEIGHTENED AWARENESS OF THIS DANGEROUS SITUATION
## WILL BE USED TO HEIGHTEN AWARENESS OF THIS DANGEROUS SITUATION
############################################################################
#if(${list.contains($bullets, "significantTornado")})
#set ($torimpact = "YOU ARE IN A LIFE THREATENING SITUATION. MOBILE HOMES WILL BE DESTROYED. CONSIDERABLE DAMAGE TO HOMES...BUSINESSES AND VEHICLES IS LIKELY AND COMPLETE DESTRUCTION IS POSSIBLE. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT TREES TO BE UPROOTED OR SNAPPED.")
#if(${list.contains($bullets, "considerableTornado")})
#set ($torimpact = "YOU ARE IN A LIFE THREATENING SITUATION. FLYING DEBRIS MAY BE DEADLY TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE DESTROYED. CONSIDERABLE DAMAGE TO HOMES...BUSINESSES AND VEHICLES IS LIKELY AND COMPLETE DESTRUCTION IS POSSIBLE.")
#end
############################################################################
## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING IMPACT STATEMENT
## WILL BE USED TO HEIGHTEN AWARENESS OF THIS DANGEROUS SITUATION
############################################################################
#if(${list.contains($bullets, "torEmergency")})
#set ($torimpact = "A LARGE...EXTREMELY DANGEROUS...AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...TAKE COVER NOW. MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.")
#set ($torimpact = "YOU ARE IN A LIFE THREATENING SITUATION. FLYING DEBRIS MAY BE DEADLY TO THOSE CAUGHT WITHOUT SHELTER. MOBILE HOMES WILL BE DESTROYED. CONSIDERABLE DAMAGE TO HOMES...BUSINESSES AND VEHICLES IS LIKELY AND COMPLETE DESTRUCTION IS POSSIBLE.")
#end
############################################################################
## Since the SVS template uses both the torimpact and svrimpact variables

View file

@ -6,14 +6,12 @@
## UPDATED -- Bookbinder 2/22/13 2013 IBW Changes ##
## UPDATED -- Kurimski 5/20/13 Addl IBW Changes ##
## UPDATED -- Kurimski 9/17/13 Tor Emer Headline ##
## UPDATED -- Bookbinder 9/18/2013 implement config.vm ##
## Mike D -- 1/23/2014 used approved wording for torEmerCTA and fixed position of 3rd bullet torEmer mention (immed. below "* AT" para).
## Mike D -- 1/24/2014 added logic to keep defaultCTAs from being used in a TOR EMER (duplication)
## UPDATED -- Bookbinder 9/18/2013 implement config.vm ##
## UPDATED -- Dangelo 1/24/2014 added logic to keep defaultCTAs from being used in a TOR EMER (duplication) ##
## UPDATED -- Bookbinder 2/27/2014 TOR EMER CTA ##
## UPDATED -- Bookbinder 6/24/14 Added code to prevent Lg/Vlnt TOR w/ base ##
##########################################################
## Commented out Impact statements Feb 2013 and created file to
## be parsed into the template called impactStatements.vm
## Changes to the impact statements can be made to this file
## instead of the template
## Impact Statements for IBW templates are contained in impactStatements.vm
################################################################
## ESTABLISH SOME INITIAL VARIABLES ############################
################################################################
@ -367,7 +365,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################################################################
## IF A CONSIDERABLE TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
## VARIABLES TO HEIGHTENHEIGHTEN AWARENESS OF THIS DANGEROUS SITUATION
############################################################################
#if(${list.contains(${bullets}, "considerableTornado")})
#set($reportType = "A ${confirmed}LARGE AND EXTREMELY DANGEROUS TORNADO WAS LOCATED")
@ -393,7 +391,7 @@ THIS IS A TEST MESSAGE. ##
#set($torTag = "OBSERVED")
#set($torHazard = "DEADLY TORNADO")
#set($torThreat = "<L>TORNADO DAMAGE THREAT...CATASTROPHIC</L>")
#set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#set($pdstor = "THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!. TAKE COVER NOW. THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
#set($pathcastLead = "THESE TORNADIC STORMS")
#set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
@ -470,13 +468,6 @@ THIS IS A TEST MESSAGE. ##
## Section to include the dangerous storm wording as well as the hazard ##
##########################################################################
#####################################################################
### TORNADO EMERGENCY PER NWS 10-511 DIRECTIVE GOES WITH 3RD BULLET #
#####################################################################
#if(${list.contains($bullets, "torEmergency")})
#wrapText("THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!. TAKE COVER NOW." 2 2)
#end
#wrapText("${pdstor}" 2 2)
#wrapText("HAZARD...${hazard}" 2 11)
@ -527,6 +518,10 @@ THOSE ATTENDING !**event/venue name or location**! ARE IN THE PATH OF THIS STORM
#end
#end
## Comment out #parse command below to pull in Dynamic DSS Event Info
## If this feature is utilized, the "specialEvent" bullet (output above) can
## likely be commented out from the impactSevereThunderstormWarning.xml file
#parse("dssEvents.vm")
## parse file command here is to pull in mile marker info
## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
@ -562,14 +557,14 @@ THIS TORNADO WARNING REPLACES THE SEVERE THUNDERSTORM WARNING ISSUED FOR THE SAM
#end
#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
#set($dummy='dummy')
##AVOID DUPLICATE CTAS FOR GENERIC AND TOR EMER
#else
#if(${list.contains(${bullets}, "defaultMobileCTA")})
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
#if(${list.contains(${bullets}, "defaultUrbanCTA")})
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF YOU ARE OUTDOORS OR IN A VEHICLE...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
#end
@ -585,9 +580,16 @@ HEAVY RAINFALL MAY HIDE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TA
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
#if(${list.contains(${bullets}, "largeTORCTA")})
#if(${list.contains(${bullets}, "baseTornado")} || ${list.contains(${bullets}, "landspoutTornado")})
!** LARGE AND EXTREME DANGEROUS TORNADO CTA SELECTED WITH A BASE/WEAK TORNADO WARNING. PLEASE CHECK
YOUR SELECTIONS AND REGENERATE THIS WARNING **!
#else
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
#end
#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL SEND YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.

View file

@ -10,7 +10,9 @@
Phil Kurimski 02-04-2013 OB13.2.1-5 Changed Sig Tor to Considerable
Phil Kurimski 05-20-2013 Added selection for very weak tornadoes and landspouts
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Dangelo 1/23/2014 changed parseString for defaultCTAs to match iTW.vm statements, removed cta1 bulletGroup from COR to ensure it is selected when doing a COR for a torEMER
Mike Dangelo 1/23/2014 changed parseString for defaultCTAs to match iTW.vm statements,
removed cta1 bulletGroup from COR to ensure it is selected when doing a COR for a torEMER
Evan Bookbinder 2-18-2014 added dssEvents hook, 2014 IBW impacts
-->
<warngenConfig>
@ -24,9 +26,11 @@ PLACED IN FULL BELOW THE INCLUDE LINE BELOW. -->
turned on unless the corresponding .vm file is turned on in a given template's .vm file
-->
<include file="mileMarkers.xml"/>
<!-- To enable, make sure mileMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure mileMarkers.vm is added/uncommented in the impactTornadoWarning.vm file -->
<include file="pointMarkers.xml"/>
<!-- To enable, make sure pointMarkers.vm is added/uncommented in a WarnGen template's .vm file -->
<!-- To enable, make sure pointMarkers.vm is added/uncommented in the impactTornadoWarning.vm file -->
<include file="dssEvents.xml"/>
<!-- To enable, make sure dssEvents.vm is added/uncommented in the impactTornadoWarning.vm file -->
<!-- Config distance/speed units -->
<unitDistance>mi</unitDistance>
@ -79,7 +83,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="torEmergency" bulletText="TORNADO EMERGENCY/CATASTROPHIC TORNADO" bulletGroup="headline" parseString="TORNADO EMERGENCY"/>
<bullet bulletName="considerableTornado" bulletText="CONSIDERABLE TORNADO TAG" bulletGroup="headline" parseString="TORNADO DAMAGE THREAT...CONSIDERABLE"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" bulletDefault="true" parseString="IMPACT...MOBILE HOMES WILL BE DAMAGED OR DESTROYED"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...SPORADIC DAMAGE TO MOBILE HOMES"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...EXPECT DAMAGE TO MOBILE HOMES"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="group1" bulletDefault="true" parseString="&quot;SOURCE...RADAR INDICATED&quot;,&quot;-SQUALL LINE&quot;"/>
@ -106,7 +110,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="90mphWind" bulletText="90 mph wind" bulletGroup="toggle2" parseString="90MPH"/>
<bullet bulletName="100mphWind" bulletText="100 mph wind" bulletGroup="toggle2" parseString="100MPH"/>
-->
<bullet bulletName="noHail" bulletText="NO HAIL" bulletGroup="group2" bulletDefault="true" parseString="0.00IN"/>
<bullet bulletName="noHail" bulletText="NO HAIL" bulletGroup="group2" parseString="0.00IN"/>
<bullet bulletName="smallHail" bulletText="Small Hail" bulletGroup="group2" bulletDefault="true" parseString="&lt;.75"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="group2" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half Dollar size hail (1 1/4&quot;)" bulletGroup="group2" parseString="1.25IN"/>
@ -123,15 +127,17 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="extraReportTornado" bulletText="Select to include additional tornado/damage information..."/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="************ LOCATIONS IMPACTED **************" bulletType="title"/>
<bullet bulletName="pathcast" bulletText="Select for pathcast" bulletGroup="group4" parseString="WILL BE NEAR..."/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletDefault="true" bulletGroup="group4"/>
<bullet bulletName="pathcast" bulletText="Select for pathcast" bulletDefault="true" bulletGroup="group4" parseString="WILL BE NEAR..."/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="group4"/>
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** CALLS TO ACTION (CHOOSE 1 OR MORE) **********" bulletType="title"/>
<bullet bulletName="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY" bulletGroup="cta1"/>
<bullet bulletName="replacesSVRCTA" bulletText="TOR Replaces Severe Thunderstorm Warning" parseString="TORNADO WARNING REPLACES THE SEVERE"/>
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE IN A MOBILE HOME...A VEHICLE OR OUTDOORS" bulletDefault="true" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE IN A VEHICLE OR OUTDOORS" bulletGroup="cta1"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that
do not have mobile homes. If you wish to switch defaults or provide a single option, add comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletDefault="true" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
@ -149,7 +155,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="torEmergency" bulletText="TORNADO EMERGENCY/CATASTROPHIC TORNADO" bulletGroup="headline" parseString="TORNADO EMERGENCY"/>
<bullet bulletName="considerableTornado" bulletText="CONSIDERABLE TORNADO TAG" bulletGroup="headline" parseString="TORNADO DAMAGE THREAT...CONSIDERABLE"/>
<bullet bulletName="baseTornado" bulletText="BASE TORNADO WARNING" bulletGroup="headline" bulletDefault="true" parseString="IMPACT...MOBILE HOMES WILL BE DAMAGED OR DESTROYED"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...SPORADIC DAMAGE TO MOBILE HOMES"/>
<bullet bulletName="landspoutTornado" bulletText="LANDSPOUT/VERY WEAK TORNADO" bulletGroup="headline" parseString="IMPACT...EXPECT DAMAGE TO MOBILE HOMES"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** BASIS FOR WARNING (CHOOSE 1) **********" bulletType="title"/>
<bullet bulletName="doppler" bulletText="Doppler radar indicated" bulletGroup="group1" bulletDefault="true" parseString="&quot;SOURCE...RADAR INDICATED&quot;,&quot;-SQUALL LINE&quot;"/>
@ -175,7 +181,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="90mphWind" bulletText="90 mph wind" bulletGroup="toggle2" parseString="90MPH"/>
<bullet bulletName="100mphWind" bulletText="100 mph wind" bulletGroup="toggle2" parseString="100MPH"/>
-->
<bullet bulletName="noHail" bulletText="NO HAIL" bulletGroup="group2" bulletDefault="true" parseString="0.00IN"/>
<bullet bulletName="noHail" bulletText="NO HAIL" bulletGroup="group2" parseString="0.00IN"/>
<bullet bulletName="smallHail" bulletText="Small Hail" bulletGroup="group2" bulletDefault="true" parseString="&lt;.75"/>
<bullet bulletName="quarterHail" bulletText="Quarter size hail (1&quot;)" bulletGroup="group2" parseString="1.00IN"/>
<bullet bulletName="halfdollarHail" bulletText="Half Dollar size hail (1 1/4&quot;)" bulletGroup="group2" parseString="1.25IN"/>
@ -200,8 +206,10 @@ 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="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY"/>
<bullet bulletName="replacesSVRCTA" bulletText="TOR Replaces Severe Thunderstorm Warning" parseString="TORNADO WARNING REPLACES THE SEVERE"/>
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE IN A MOBILE HOME...A VEHICLE OR OUTDOORS" bulletDefault="true" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE IN A VEHICLE OR OUTDOORS" bulletGroup="cta1"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that
do not have mobile homes. If you wish to switch defaults or provide a single option, add comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>

View file

@ -8,6 +8,7 @@
## Phil Kurimski -- FEB 07 2013 OB13.2.1-5 ##
## Phil Kurimski -- SEP 17 2013 OB13.5.2-4 ##
## Evan Bookbinder -- SEP 18 2013 Implemented config.vm
## Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1
#####################################################
#parse("config.vm")
## Set the visibility variable to be used for dense fog

View file

@ -4,6 +4,7 @@
Evan Bookbinder 09-11-2012 Added settings for locations shapefile
Added new areaSource objects
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1
-->
<warngenConfig>
@ -51,7 +52,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
< included with the warning product include TO.A and/or SV.A,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>

View file

@ -1,5 +1,6 @@
#*
CREATED 9-16-2013 BY EVAN BOOKBINDER
COMMENTS UPDATED 9-5-2014 BY EVAN BOOKBINDER
### THIS PLUG-IN VM FILE ALLOWS YOU TO CONSOLIDATE ALL YOUR
### MILEMARKER/EXIT/ROUTE OUTPUT INTO A SINGLE FUNCTION CALL
### A #parse("mileMarkers.vm") entry in your WarnGen .vm templates will thus
@ -24,7 +25,7 @@ $simplify is a boolean value (true or false)
###########################
CONFIGURATION:
###########################
#COMMENT OUT LINES 61-64 BELOW AS NEEDED, REPLACING/ADDING TO THE EXAMPLE WITH YOUR
#COMMENT OUT LINES 63-67 BELOW AS NEEDED, REPLACING/ADDING TO THE EXAMPLE WITH YOUR
#MILE MARKER/ROUTE ENTRIES
#EACH LINE CONTAINS A VARIABLE MM1,MM2,MM3,etc... REFERENCING AN ARRAY (LIST) OF DATA THAT
#WILL BE PASSED TO THE MMARKERS ROUTINE.
@ -43,25 +44,29 @@ The items in the array are as follows:
NOTE: PLEASE ENSURE PROPER SYNTAX. Java Objects are ${variable}, Text Strings are 'TEXT', and
Booleans are true/false (no quote)..see examples below
ALSO ENSURE THAT EACH LINE CONTAINS A UNIQUE VARIABLE NAME: MM1, MM2, MM3, etc..
*#
############## EXAMPLES FOLLOW BELOW ###########
#*
HERE IS AN EXAMPLE:
e.g.
#set ($mm1 = [${i435mm},${i435mmid},'INTERSTATE 435','MILE MARKER',true])
#set ($mm2 = [${i70momm},${i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
#set ($mm3 = [${route22mm},${route22mmid},'ROUTE 22','EXIT',true])
#set ($mm1 = [${EAX_i435mm},${EAX_i435mmid},'INTERSTATE 435','MILE MARKER',true])
#set ($mm2 = [${EAX_i70momm},${EAX_i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
#set ($mm3 = [${CTP_route22mm},${CTP_route22mmid},'ROUTE 22','EXIT',true])
After creating these, we must create a match list containing all of our variable names
e.g.
#set ($varList = [$mm1,$mm2,$mm3])
*#
############# END INSTRUCTIONS ########################################################################
#set($hits = 0)
#set($bigList = '')
##set ($mm1 = [${i435mm},${i435mmid},'INTERSTATE 435','MILE MARKER',true])
##set ($mm2 = [${i70momm},${i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
##set ($mm3 = [${i35momm},${i35mommid},'INTERSTATE 70 IN KANSAS','MILE MARKER',true])
##set ($mm1 = [${EAX_i435mm},${EAX_i435mmid},'INTERSTATE 435','MILE MARKER',true])
##set ($mm2 = [${EAX_i70momm},${EAX_i70mommid},'INTERSTATE 70 IN MISSOURI','MILE MARKER',true])
##set ($mm3 = [${EAX_i35momm},${EAX_i35mommid},'INTERSTATE 70 IN KANSAS','MILE MARKER',true])
##set ($varList = [$mm1,$mm2,$mm3])
#foreach ($var in $varList)

View file

@ -1,24 +1,31 @@
<!--
UPDATED 9-16-2013 BY EVAN BOOKBINDER
UPDATED INSTRUCTIONS 9-5-2014 BY EVAN BOOKBINDER
FOR EACH DATABASE TABLE IMPORTED USING THE importMarkersInfo.sh SCRIPT,
THERE WILL BE **TWO** pointSource OBJECTS CREATED BELOW.
ONLY THE pointSource variable (unique to each object) AND
pointSource attribute (the tablename created from importMarkersInfo.sh)
SHOULD BE MODIFIED.
THERE WILL BE **TWO** pointSource OBJECTS CREATED BELOW.
ONE POINTSOURCE OBJECT REFERENCES THE 'NAME' FIELD IN THE DATABASE TABLE
THE SECOND POINTSOURCE OBJECT REFERENCES THE 'GID" FIELD IN THE DATABASE TABLE
FOR EACH ENTRY ONLY MODIFY THE pointSource variable (unique to each object) AND
pointSource attribute (the tablename created from importMarkersInfo.sh)
EXAMPLE FOR INTERSTATE 435 in the Kansas City Metro follows:
The point source variables i435mm & i435mmid are used in the mileMarkers.vm
The point source variables EAX_i435mm & EAX_i435mmid are used in the mileMarkers.vm
file. The pointSource attribute must match whatever database table you created
with the importMarkersInfo.sh script. In this case our database table for
Interstate 435 was "i435".
with the importMarkersInfo.sh script. In this case our maps database table for
Interstate 435 was "EAX_i435".
For service backup purposes, PLEASE make sure that your maps database tables are prefixed
with your office ID as it's possible (if not likely) that you and your backup offices could
otherwise use identical interstate names.
Once you're done adding the pointSource pairs, additional configuration in
mileMarkers.vm is required
<pointSource variable="i435mm">
<pointSource>i435</pointSource>
<pointSource variable="EAX_i435mm">
<pointSource>EAX_i435</pointSource>
<pointField>NAME</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>
@ -29,8 +36,9 @@
<sort>gid</sort>
</sortBy>
</pointSource>
<pointSource variable="i435mmid">
<pointSource>i435</pointSource>
<pointSource variable="EAX_i435mmid">
<pointSource>EAX_i435</pointSource>
<pointField>GID</pointField>
<searchMethod>POINTS</searchMethod>
<withinPolygon>true</withinPolygon>

View file

@ -10,6 +10,7 @@
Modified Phil Kurimski 02-05-2013 Reordered GUI selections to make more sense
Modified Phil Kurimski 09-19-2013 added geospatialConfig.xml
Modified Mike Rega 01-18-2014 added Alaska GP changes for 14.2.1
Modified Phil Kurimski 06-24-2014 fixed Ice Jam Parse String error 14.2.2-9
-->
<warngenConfig>
@ -190,7 +191,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="levee" bulletText="Levee failure" bulletGroup="ic" parseString="A LEVEE FAILURE" showString="LEVEE FAILURE"/>
<bullet bulletName="floodgate" bulletText="Floodgate opening" bulletGroup="ic" parseString="FLOODGATE RELEASE" showString="FLOODGATE RELEASE"/>
<bullet bulletName="glacier" bulletText="Glacial-dammed lake outburst" bulletGroup="ic" parseString=".GO." showString=".GO."/>
<bullet bulletName="icejam" bulletText="Ice jam" bulletGroup="ic" parseString="ICE JAM FLOODING" showString=".IJ."/>
<bullet bulletName="icejam" bulletText="Ice jam" bulletGroup="ic" parseString=".IJ." showString=".IJ."/>
<bullet bulletName="rain" bulletText="Rapid rain induced snowmelt" bulletGroup="ic" parseString="EXTREMELY RAPID RAIN SNOWMELT" showString=".RS."/>
<!-- modified by GP -->
<bullet bulletName="volcano" bulletText="Volcano induced snowmelt" bulletGroup="ic" parseString="VOLCANIC INDUCED SNOWMELT" showString=".SM."/>

View file

@ -7,7 +7,7 @@
## Mike Dangelo 2-4-2013 NWS Mets detected a svr ##
## Evan Bookbinder 9-16-2013 Fixed CTA ##
## Evan Bookbinder 9-18-2013 Implemented config.vm ##
## Mike Dangelo 1/23/2014, law enf CTA change to match SVS parseString
## Evan Bookbinder 9-5-2014 fixed law enf cta ##
################################################################
##
#parse("config.vm")
@ -409,7 +409,7 @@ THIS STORM HAS A HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL. THIS IS
#end
##
#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER...CONTACT THE NATIONAL WEATHER SERVICE...OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
TO REPORT SEVERE WEATHER...CONTACT THE NATIONAL WEATHER SERVICE...OR YOUR NEAREST LAW ENFORCEMENT AGENCY WHO WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
##
@ -471,7 +471,7 @@ TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FL
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end

View file

@ -12,6 +12,7 @@
Mike Dangelo 2-4-2013 Added commented bullet for METS DETECTED
Phil Kurimski 09-16-2013 Fixed some spelling errors
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Evan Bookbinder 09-05-2014 Fixed law enf CTA parse string
-->
<warngenConfig>
@ -58,10 +59,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>torWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->
@ -133,7 +134,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="historyHailCTA" bulletText="History of Producing Large Hail" parseString="HISTORY OF PRODUCING LARGE HAIL"/>
<bullet bulletName="historyWindCTA" bulletText="History of Producing Wind Damage" parseString="HISTORY OF PRODUCING WIND DAMAGE"/>
<bullet bulletName="historyWindHailCTA" bulletText="History of Dmgg Winds and Large Hail" parseString="HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="squallLineCTA" bulletText="Thunderstorm lines can produce tornadoes (no TOR watch)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -190,7 +191,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="historyHailCTA" bulletText="History of Large Hail" parseString="HISTORY OF PRODUCING LARGE HAIL"/>
<bullet bulletName="historyWindCTA" bulletText="History of Wind Damage" parseString="HISTORY OF PRODUCING WIND DAMAGE"/>
<bullet bulletName="historyWindHailCTA" bulletText="History of Dmgg Winds and Large Hail" parseString="HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="CONTACT YOUR NEAREST LAW ENFORCEMENT"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report Svr Wx to Law Enforcement Agency" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="squallLineCTA" bulletText="Thunderstorm lines can produce tornadoes (no TOR watch)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>

View file

@ -11,6 +11,8 @@
## MIKE DANGELO 1-22-2104 Tweaked default CTA wording to fix parseString problems and torEmerCTA to use new verbage ##
## Removed preAmbleTOR (not used) -mmd 1/23/2014, preAmble for other tor-sighted/confirmed bullets retained
## Mike Rega 4/24/2014 fixed MND blank line in CAN ##
## Mike Dangelo 6/24/2014 fixed wording for plural storm references ##
## Evan Bookbinder 9/5/2014 fixed law enforcement CTA ##
#################################################################
##
###################################################################
@ -150,7 +152,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${action}=="EXP" || ${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
#### SET A DEFAULT STATEMENT IN CASE NO BULLET WAS SELECTED OR AVAILABLE
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#if(${phenomena}=="SV")
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
@ -162,9 +164,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${list.contains(${bullets}, "weakened")})
#if(${stormType} == "line")
#if(${phenomena}=="SV")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSES AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSES AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR TO BE CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR TO BE CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
#else
#if(${phenomena}=="SV")
@ -177,7 +179,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#### MOVED OUT OF THE WARNED AREA
#if(${list.contains(${bullets}, "movedout")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
@ -185,7 +187,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#### WEAKENED AND MOVED OUT OF THE AREA
#if(${list.contains(${bullets}, "wkndandmoved")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#set($expcanPhrase = "THE STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
@ -262,10 +264,10 @@ ${expcanPhrase} ${addthreat}
###########################################
## WATCHES ##
#############
###if(${list.contains(${includedWatches}, "TO.A")})
###if(${list.contains(${includedWatches}, "torWatches")})
###inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
###end
###if(${list.contains(${includedWatches}, "SV.A")})
###if(${list.contains(${includedWatches}, "svrWatches")})
###insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
###end
#if(${list.contains(${bullets}, "svrboxactive")})
@ -766,8 +768,8 @@ TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SE
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
#if(${list.contains(${bullets}, "lawEnforcementCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT. THIS ACT MAY SAVE THE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#if(${list.contains(${bullets}, "lawEnforcementTORCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR NEAREST LAW ENFORECEMENT AGENCY WHO WILL RELAY YOUR REPORT. THIS ACT MAY SAVE THE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
@ -924,7 +926,7 @@ TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FL
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")} && ${phenomena}=="SV")
#if(${list.contains(${includedWatches}, "torWatches")} && ${phenomena}=="SV")
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end

View file

@ -10,7 +10,8 @@
Mike Dangelo 2-5-2013 NWS Mets Detected options (commented by default)
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Richard Barnhill 10-28-2013 Changed/added torEMER bulletGroup to keep it locked on followups
Mike Dangelo 1-21-2014 Tweaked parseStrings for default safety rules, changed law enf CTA to match wording from both TOR and SVR
Mike Dangelo 1-21-2014 Tweaked parseStrings for default safety rules
Evan Bookbinder 9-5-2014 Fixed law enf CTA
-->
<!--
Velocity Variables:
@ -69,8 +70,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
</phensigs>
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<enableRestart>false</enableRestart>
@ -247,7 +248,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY OBSCURE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LOCAL AUTHORITY"/>
<bullet bulletName="lawEnforcementTORCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Thunderstorm line tornadoes" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -294,7 +295,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="********* LOCATIONS IMPACTED **********" bulletType="title"/>
<bullet bulletName="pathcast" bulletText="Select for pathcast" bulletGroup="pcast" parseString="WILL BE NEAR..."/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="&quot;LOCATIONS&quot;,&quot;INCLUDE...&quot;"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** CALL TO ACTIONS (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="torWatchRemainsInEffectCTA" bulletText="TOR WATCH IN EFFECT...If a tornado is spotted" parseString="TORNADO WATCH REMAINS IN EFFECT"/>
@ -306,7 +308,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="historyHailCTA" bulletText="History of Large Hail" parseString="HISTORY OF PRODUCING LARGE HAIL"/>
<bullet bulletName="historyWindCTA" bulletText="History of Wind Damage" parseString="HISTORY OF PRODUCING WIND DAMAGE"/>
<bullet bulletName="historyWindHailCTA" bulletText="History of Dmgg Winds and Large Hail" parseString="HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LOCAL AUTHORITY"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="squallLineCTA" bulletText="Thunderstorm lines can produce tornadoes (no TOR watch)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -363,17 +365,19 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="********* LOCATIONS IMPACTED **********" bulletType="title"/>
<bullet bulletName="pathcast" bulletText="Select for pathcast" bulletGroup="pcast" parseString="WILL BE NEAR..."/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="&quot;LOCATIONS&quot;,&quot;INCLUDE...&quot;"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="pcast" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="*********** CALLS TO ACTION (CHOOSE 1 OR MORE) **********" bulletType="title"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA**" parseString="TORNADO EMERGENCY"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the .="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules -- includes mobile homes" parseString="IF YOU ARE IN A MOBILE HOME OR OUTDOORS" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban -- no mobile homes" parseString="IF YOU ARE IN A VEHICLE OR OUTDOORS" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY OBSCURE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementTORCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Thunderstorm line tornadoes" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
@ -432,7 +436,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="historyHailCTA" bulletText="History of Large Hail" parseString="HISTORY OF PRODUCING LARGE HAIL"/>
<bullet bulletName="historyWindCTA" bulletText="History of Wind Damage" parseString="HISTORY OF PRODUCING WIND DAMAGE"/>
<bullet bulletName="historyWindHailCTA" bulletText="History of Dmgg Winds and Large Hail" parseString="HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LOCAL AUTHORITY"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="squallLineCTA" bulletText="Thunderstorm lines can produce tornadoes (no TOR watch)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>

View file

@ -8,6 +8,7 @@
## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
## Evan Bookbinder 9-18-2013 implemented config.vm
## Mike Dangelo 1/23/2014 Added blankStatement logic - default is still near-severe storm w/list of cities
## Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1
################################################################
##
#parse("config.vm")
@ -227,17 +228,16 @@ LOCATIONS CAN EXPECT !** EXPECTED SNOW **! INCHES OF SNOW.
## parse file command to pull in mile marker info
#parse("mileMarkers.vm")
#end
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")} && ${list.contains(${bullets}, "includeTorWatches")})
#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")} && ${list.contains(${bullets}, "includeSvrWatches")})
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
$$

View file

@ -10,6 +10,7 @@
Evan Bookbinder 5-5-2013 fixed <type> variable under areaSource objects
Chad Gimmestad 9-17-2013 made additional info bullet names/labels consistent
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1
-->
<warngenConfig>
@ -54,7 +55,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include TO.A and/or SV.A,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
@ -109,8 +110,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="frontalPassage" bulletText="cold frontal passage"/>
<bullet bulletName="heavySnow" bulletText="heavy snow/low visibility"/>
<bullet bulletName="snowAmt" bulletText="snowfall amounts"/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" parseString=""/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR">
@ -146,8 +147,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="frontalPassage" bulletText="cold frontal passage"/>
<bullet bulletName="heavySnow" bulletText="heavy snow/low visibility"/>
<bullet bulletName="snowAmt" bulletText="snowfall amounts"/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" parseString=""/>
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -5,6 +5,7 @@
## Modified by: ##
## Phil Kurimski 16 Sep 2013 OB13.5.2-4 ##
## Evan Bookbinder Sep 18 2013 Implemented config.vm ##
## Mike Dangelo 26 June 2014 made inclusion of both watches dependent on GUI bullet choices ##
###################################################################
##
##SET SOME INITIAL VARIABLES
@ -309,10 +310,10 @@ IF ON OR NEAR !**Name Of Lake**!...GET OUT OF THE WATER AND MOVE INDOORS OR INSI
#############
## WATCHES ##
#############
#if(${list.contains(${includedWatches}, "TO.A")})
#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "SV.A")})
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
####################################

View file

@ -6,6 +6,7 @@
9-12-2012 Added in new areaSource object and recode
for new locations shapefile
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Mike Dangelo 6/26/2014 added bullets for watch info inclusion (bulletDefault set to true)
-->
<warngenConfig>
@ -50,11 +51,11 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include torWatches and/or svrWatches,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
<includedWatch>SV.A</includedWatch>
<includedWatch>torWatches</includedWatch>
<includedWatch>svrWatches</includedWatch>
</includedWatches>
<!-- durations: the list of possible durations of the warning -->
@ -99,11 +100,9 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="stormIntensify" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<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 bulletText="******** MILE MARKERS *********" bulletType="title"/>
<bullet bulletName="interstates" bulletText="Interstate Mile Markers" bulletDefault="true" />
<bullet bulletName="roads" bulletText="Road Markers" />
-->
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletText="" bulletType="title"/>
</bullets>
</bulletActionGroup>
<bulletActionGroup action="COR">
@ -134,12 +133,9 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="stormIntensify" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<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="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletText="" bulletType="title"/>
<!--
<bullet bulletText="******** MILE MARKERS *********" bulletType="title"/>
<bullet bulletName="interstates" bulletText="Interstate Mile Markers" bulletDefault="true" />
<bullet bulletName="roads" bulletText="Road Markers" />
-->
</bullets>
</bulletActionGroup>
</bulletActionGroups>

View file

@ -7,6 +7,7 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
Evan Bookbinder 09-11-2012 Added settings for locations shapefile
Phil Kurimski 09-16-2013 Fixed multiple selections in pathcast
Phil Kurimski 09-19-2013 added geospatialConfig.xml
Phil Kurimski 06-24-2014 fixed capable of producing waterspouts parseString
-->
<!-- INCLUDE ALL GEOSPTATIAL INFORMATION FOR THIS PRODUCT
@ -54,7 +55,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include TO.A and/or SV.A,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
@ -121,7 +122,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="destructiveHail" bulletText="Large Destructive Hail" bulletGroup="hailThreat" parseString="LARGE DESTRUCTIVE HAIL"/>
<bullet bulletText=" ****Waterspout Section****...(Choose 1 if applicable) " bulletType="title"/>
<bullet bulletName="sightedSpout" bulletText="Waterspouts sighted" bulletGroup="wSpout" parseString="PRODUCING WATERSPOUT"/>
<bullet bulletName="possibleSpout" bulletText="Waterspouts possible" bulletGroup="wSpout" parseString="CAPABLE WATERSPOUT"/>
<bullet bulletName="possibleSpout" bulletText="Waterspouts possible" bulletGroup="wSpout" parseString="CAPABLE OF PRODUCING WATERSPOUT"/>
<bullet bulletText=" ****Volcano Section****...(Choose if applicable) " bulletType="title"/>
<bullet bulletName="ashfall" bulletText="Ashfall" parseString="ASHFALL"/>
<bullet bulletName="debrisFlow" bulletText="Lahar/Debris flow" parseString="A TORRENT OF MUD"/>
@ -172,7 +173,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="destructiveHail" bulletText="Large Destructive Hail" bulletGroup="hailThreat" parseString="LARGE DESTRUCTIVE HAIL"/>
<bullet bulletText=" ****Waterspout Section****...(Choose 1 if applicable) " bulletType="title"/>
<bullet bulletName="sightedSpout" bulletText="Waterspouts sighted" bulletGroup="wSpout" parseString="PRODUCING WATERSPOUT"/>
<bullet bulletName="possibleSpout" bulletText="Waterspouts possible" bulletGroup="wSpout" parseString="CAPABLE WATERSPOUT"/>
<bullet bulletName="possibleSpout" bulletText="Waterspouts possible" bulletGroup="wSpout" parseString="CAPABLE OF PRODUCING WATERSPOUT"/>
<bullet bulletText=" ****Volcano Section****...(Choose if applicable) " bulletType="title"/>
<bullet bulletName="ashfall" bulletText="Ashfall" parseString="ASHFALL"/>
<bullet bulletName="debrisFlow" bulletText="Lahar/Debris flow" parseString="A TORRENT OF MUD"/>

View file

@ -56,7 +56,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include TO.A and/or SV.A,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>

View file

@ -6,6 +6,8 @@
## Phil Kurimski WFO DTX 9.16.2013 (BUILD 13.5.2-4) ##
## Evan Bookbinder 9.18.2013 Implemented config.vm ##
## Mike Dangelo 1/23/2014 Added blankStatement logic - default is still near-severe storm w/list of cities
## Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1 ##
## Mike Dangelo 6/24/2014 headline tweak to add 'COUNTIES' ##
############################################################
##
## SET SOME INITIAL VARIABLES
@ -194,19 +196,21 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#if(${list.contains(${bullets}, "blankStatement")})
... !** headline **! ...
... !** edit headline **! ...
#else
...${describeEvent} WILL AFFECT ##
#set($full = '')
#foreach (${area} in ${areas})
#set($full = "${full}${area.name}...")
#end
#if(${full.length()} > 120)
!** DESCRIBE AREA **! ...
#if(${full.length()} > 140)
... !** edit headline **! ...
#else
${full}
...${describeEvent} WILL AFFECT ##
#headlineLocList(${affectedCounties} true true true false)...
#end
#end
@ -345,11 +349,12 @@ ICY ROADS ARE POSSIBLE AS THE SNOW MELTS ON THE ROADS THEN QUICKLY REFREEZES.
#if(${list.contains($bullets, "changingConditionsCTA")})
CONDITIONS CAN DETERIORATE RAPIDLY IN WINTER WEATHER SITUATIONS. BE PREPARED FOR SNOW OR ICE COVERED ROADS. SLOW DOWN AND ALLOW EXTRA TIME WHEN TRAVELING.
#end
#end
#############
## WATCHES ##
#############
#if(${list.contains($includedWatches, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
@ -365,8 +370,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
#end
$$
#parse("forecasterName.vm")
#parse("forecasterName.vm")

View file

@ -3,6 +3,8 @@
Phil Kurimski 2.05.2013 (on build 13.2.1-5)
Phil Kurimski 9-19-2013 added geospatialConfig.xml
Mike Dangelo 1/23/2014 added blankStatement bullet
Mike Rega 5/23/14 DR 17380 svr wx watch logic OB14.3.1
Mike Dangelo 6/24/2014 removed unnecessary example bullets
-->
<warngenConfig>
@ -49,7 +51,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<autoLockText>true</autoLockText>
<!-- Included watches: If a tornado watch or severe thunderstorm watch is to be
included with the warning product include TO.A and/or SV.A,
included with the warning product include TO.A and/or SV.A,
respectively. Please refer to 'includedWatchAreaBuffer' in <areaConfig/>. -->
<includedWatches>
<includedWatch>TO.A</includedWatch>
@ -104,20 +106,14 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="pathcast" bulletText="Select for pathcast" bulletGroup="toggle5" parseString="WILL BE NEAR..."/>
<bullet bulletName="listofcities" bulletDefault="true" bulletText="Select for a list of cities" bulletGroup="toggle5"/>
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<!--
<bullet bulletText="************ OPTIONAL ROAD INFO **************" bulletType="title"/>
<bullet bulletName="interstates" bulletText="include Interstates" bulletDefault="true"/>
<bullet bulletName="roads" bulletText="include Roads" bulletDefault="true"/>
<bullet bulletName="simple" bulletText="Only first and last mile markers" bulletDefault="true"/>
-->
<bullet bulletText="******** CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="stormIntensifyCTA" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="lightningCTA" bulletText="Frequent Lightning" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
<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="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" parseString=""/>
<bullet bulletText="******** WINTER WX CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="advisoryCTA" bulletText="Advisory may be required" bulletGroup="toggle3" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="advisoryEffectCTA" bulletText="Advisory in effect" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
@ -161,20 +157,14 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="toggle5" parseString="LOCATIONS IN THE WARNING INCLUDE" showString="LOCATIONS IN THE WARNING INCLUDE"/>
<bullet bulletName="listofcities" bulletText="Select for a list of cities" bulletGroup="toggle5" parseString="WILL REMAIN OVER" showString="WILL REMAIN OVER"/>
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<!--
<bullet bulletText="************ OPTIONAL ROAD INFO **************" bulletType="title"/>
<bullet bulletName="interstates" bulletText="include Interstates" bulletDefault="true"/>
<bullet bulletName="roads" bulletText="include Roads" bulletDefault="true"/>
<bullet bulletName="simple" bulletText="Only first and last mile markers" bulletDefault="true"/>
-->
<bullet bulletText="******** CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="stormIntensifyCTA" bulletText="Storm(s) May Intensify" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="lightningCTA" bulletText="Frequent Lightning" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="torrentialRainfallCTA" bulletText="Torrential rainfall" parseString="TORRENTIAL RAINFALL IS ALSO OCCURRING"/>
<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="includeTorWatches" bulletText="Include Tornado Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" bulletDefault="true" parseString=""/>
<bullet bulletName="includeTorWatches" bulletText="Include Tornado Watches" parseString=""/>
<bullet bulletName="includeSvrWatches" bulletText="Include Severe Thunderstorm Watches" parseString=""/>
<bullet bulletText="******** WINTER WX CALLS TO ACTION (CHOOSE 1 OR MORE) *********" bulletType="title"/>
<bullet bulletName="advisoryCTA" bulletText="Advisory may be required" bulletGroup="toggle3" parseString="STORMS MAY INTENSIFY...MONITOR TV"/>
<bullet bulletName="advisoryEffectCTA" bulletText="Advisory in effect" bulletGroup="toggle3" parseString="FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING"/>

View file

@ -9,6 +9,8 @@
## Evan Bookbinder 9-18-2013 Implemented config.vm ##
## Josh Huber and Mike Dangelo 1/22/14 Emer CTA wording tweak ##
## Mike Dangelo 1/24/2014 - Removed preAmbleTOR (not used), preAmble for other tor-sighted/confirmed bullets retained, law enf CTA changed to match SVS parseString, prevented largeTORCTA if confirmedLarge not selected as type.
## Phil Kurimski 6-26-2014 fixed large tornado cta
## Evan Bookbinder 9-5-2014 fixed law enf cta ##
###############################################################################
## ESTABLISH SOME INITIAL VARIABLES
#parse("config.vm")
@ -447,14 +449,14 @@ HEAVY RAINFALL MAY OBSCURE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO.
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
#if(${list.contains(${bullets}, "confirmedLarge")})
#if(${list.contains(${bullets}, "largeTORCTA")})
#if(${list.contains(${bullets}, "meteorologistsLarge")} || ${list.contains(${bullets}, "largeTORCTA")})
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS A LIFE-THREATENING SITUATION.
#end
#end
#if(${list.contains(${bullets}, "lawEnforcementCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...CONTACT THE NATIONAL WEATHER SERVICE...OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...CONTACT THE NATIONAL WEATHER SERVICE...OR YOUR NEAREST LAW ENFORCEMENT AGENCY WHO WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")

View file

@ -11,7 +11,8 @@
Create new areaSource objects
Mike Dangelo 2-4-2013 Added commented bullet for NWS METS DECTECTED
Richard Barnhill 10-28-2013 Changed/added torEMER bulletGroup to keep it locked on followups
Mike Dangelo 1-23-2014 Changed parseStrings for default safety rules CTAs and law enf CTA
Mike Dangelo 1-23-2014 Changed parseStrings for default safety rules CTAs and law enf CTA
Evan Bookbinder 9-5-2014 Fixed law enf CTA parse strings to match
-->
<warngenConfig>
@ -132,7 +133,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY OBSCURE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LOCAL AUTHORITY"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Squall line tornadoes" parseString="THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES"/>
@ -197,7 +198,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY OBSCURE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
<bullet bulletName="largeTORCTA" bulletText="Large/Violent tornado" parseString="A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LOCAL AUTHORITY"/>
<bullet bulletName="lawEnforcementCTA" bulletText="Report to NWS or Law Enforcement" parseString="LAW ENFORCEMENT AGENCY"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText="**** SPECIAL CASE CALLS TO ACTION *****" bulletType="title"/>
<bullet bulletName="squallCTA" bulletText="Squall line tornadoes" parseString="THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES"/>

View file

@ -1,19 +1,19 @@
##
# 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
# 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
#
# 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.
##

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AttributeSetGroup xmlns:ns2="http://www.example.org/productType">
<resource>HRRR</resource>
<attrSetGroupName>standard</attrSetGroupName>
<attrSetNames>1000-500_thkn,1000-850_thkn,1000mb_hght_tmp_wind,500mb_hght_wind,500mb_hght_tmp_wind,700mb_hght_tmp_wind,850mb_hght_tmp_wind</attrSetNames>
</AttributeSetGroup>

View file

@ -1455,4 +1455,7 @@
<ResourceDefinitionFilter isEnabled="true" rscDefnName="GEOMAG">
<filters>Forecast,SWPC</filters>
</ResourceDefinitionFilter>
<ResourceDefinitionFilter isEnabled="true" rscDefnName="HRRR">
<filters>Forecast,SBN</filters>
</ResourceDefinitionFilter>
</ResourceDefinitionFilters>

View file

@ -1,4 +1,4 @@
%define _ldm_version 6.11.5
%define _ldm_version 6.12.6
%define _ldm_src_tar ldm-%{_ldm_version}.tar.gz
# ldm-%{_ldm_version}.tar.gz is tarred up ldm-%{_ldm_version}/src dir after
# ISG makes retrans changes
@ -162,10 +162,12 @@ _myHost=`hostname`
_myHost=`echo ${_myHost} | cut -f1 -d'-'`
pushd . > /dev/null 2>&1
cd ${_ldm_dir}/SOURCES
cp ${_ldm_dir}/SOURCES/%{_ldm_src_tar} ${_ldm_dir}
# unpack the ldm source
/bin/tar -xf %{_ldm_src_tar} \
-C ${_ldm_dir}
#/bin/tar -xf %{_ldm_src_tar} \
# -C ${_ldm_dir}
cd ${_ldm_dir}
gunzip -c %{_ldm_src_tar} | pax -r '-s:/:/src/:'
if [ $? -ne 0 ]; then
exit 1
fi
@ -174,6 +176,7 @@ if [ $? -ne 0 ]; then
exit 1
fi
chown -R ldm:fxalpha ${_ldm_dir}
popd . > /dev/null 2>&1
# create .bash_profile
if [ ! -f /usr/local/ldm/.bash_profile ]; then
@ -194,7 +197,7 @@ if [ $? -ne 0 ]; then
exit 1
fi
export _current_dir=`pwd`
su ldm -lc "cd ${_current_dir}; ./configure --disable-max-size --with-noaaport --disable-root-actions --prefix=${_ldm_root_dir} CFLAGS='-g -O0'" \
su ldm -lc "cd ${_current_dir}; ./configure --disable-max-size --with-noaaport --with-retrans --disable-root-actions --prefix=${_ldm_root_dir} CFLAGS='-g -O0'" \
> configure.log 2>&1
if [ $? -ne 0 ]; then
echo "FATAL: ldm configure has failed!"
@ -209,11 +212,6 @@ if [ $? -ne 0 ]; then
exit 1
fi
su ldm -lc "cd ${_current_dir}; /bin/bash my-install" > my-install.log 2>&1
if [ $? -ne 0 ]; then
echo "FATAL: my-install has failed!"
exit 1
fi
popd > /dev/null 2>&1
pushd . > /dev/null 2>&1
cd ${_ldm_root_dir}/src

Binary file not shown.