################################################################################ ## TORNADO WARNING TEMPLATE ## ## VERSION AWIPS 2 ## ## RECENT CHANGES ## ## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ## ## Mike Dangelo 2-4-2013 NWS Mets detected a svr ## ## PHIL KURIMSKI 2-6-2013 Put tor emergency back in as 3rd bullet ## ## PHIL KURIMSKI 9-17-2013 Put tor emergency as a headline ## ## 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 ## ## MMD/DT/EB 3/26/2015 mixedCase Changes ## ## Evan Bookbinder 6-15-2015 fixed incorrect softball/grapefruit hail ## ## Evan Bookbinder 9-4-2015 cleaned up line-of-storm grammar ## ## Evan Bookbinder 12-07-15 fixed default preAmble var (extra space) ## ## Evan Bookbinder 12-07-16 fixed TEST wording case inconsistencies ## ## DR 19038 ## ################################################################################ ## ESTABLISH SOME INITIAL VARIABLES #parse("config.vm") #set($hailSize = 0) #set($hailTag = "<.75IN") #set($reportType = "A Tornado was reported") #set($pathcastLead = "This tornadic storm") #set($moveLead = " Doppler radar showed this tornado moving") #set($preAmble = "TAKE COVER NOW! ") #if(${stormType} == "line") #set($reportType = "Tornado producing storms were reported") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these storms moving") #end ####################################### ## HANDLE HAIL POSSIBILITIES ########## ####################################### #if(${list.contains(${bullets}, "pennyHail")}) #set($hailThreat = "penny size hail") #set($hailSize = 0.75) #set($hailTag = "0.75IN") #end #if(${list.contains(${bullets}, "nickelHail")}) #set($hailThreat = "nickel size hail") #set($hailSize = 0.88) #set($hailTag = "0.88IN") #end #if(${list.contains(${bullets}, "quarterHail")}) #set($hailThreat = "quarter size hail") #set($hailSize = 1.00) #set($hailTag = "1.00IN") #end #if(${list.contains(${bullets}, "halfdollarHail")}) #set($hailThreat = "half dollar size hail") #set($hailSize = 1.25) #set($hailTag = "1.25IN") #end #if(${list.contains(${bullets}, "pingpongHail")}) #set($hailThreat = "ping pong ball size") #set($hailSize = 1.50) #set($hailTag = "1.50IN") #end #if(${list.contains(${bullets}, "golfballHail")}) #set($hailThreat = "large damaging hail up to golf ball size") #set($hailSize = 1.75) #set($hailTag = "1.75IN") #end #if(${list.contains(${bullets}, "twoinchHail")}) #set($hailThreat = "large damaging hail up to two inches in diameter") #set($hailSize = 2.00) #set($hailTag = "2.00IN") #end #if(${list.contains(${bullets}, "tennisBallHail")}) #set($hailThreat = "large destructive hail up to tennis ball size") #set($hailSize = 2.50) #set($hailTag = "2.50IN") #end #if(${list.contains(${bullets}, "baseballHail")}) #set($hailThreat = "large destructive hail up to baseball size") #set($hailSize = 2.75) #set($hailTag = "2.75IN") #end #if(${list.contains(${bullets}, "threeinchHail")}) #set($hailThreat = "large destructive hail up to three inches in diameter") #set($hailSize = 3.00) #set($hailTag = "3.00IN") #end #if(${list.contains(${bullets}, "softballHail")}) #set($hailThreat = "dangerous and extremely large destructive hail up to softball size") #set($hailSize = 4.00) #set($hailTag = "4.00IN") #end #if(${list.contains(${bullets}, "grapefruitHail")}) #set($hailThreat = "dangerous and extremely large destructive hail up to grapefruit size") #set($hailSize = 4.50) #set($hailTag = "4.50IN") #end #if(${hailSize} >= 1.50) #if(${stormType} == "line") #set($extraThreat = "In addition to a tornado, ${hailThreat} is expected with these storms.") #else #set($extraThreat = "In addition to a tornado, ${hailThreat} is expected with this storm.") #end #else #set($extraThreat = "") #end ${WMOId} ${vtecOffice} 000000 ${BBBId} ${productId}${siteId} ${ugcline} /${productClass}.${action}.${vtecOffice}.TO.W.${etn}.${dateUtil.format(${start}, ${timeFormat.ymdthmz})}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ BULLETIN - EAS ACTIVATION REQUESTED #if(${productClass}=="T") TEST...Tornado Warning...TEST #else Tornado Warning #end ##National Weather Service ${officeShort} National Weather Service ${officeShort} #backupText(${backupSite}) ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} ## end of addition #if(${productClass}=="T") ...THIS MESSAGE IS FOR TEST PURPOSES ONLY... #end ################################################################# ### TORNADO EMERGENCY HEADLINE # ################################################################# #if(${list.contains(${bullets}, "torEmergency")}) ...TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!... #end #headline(${officeLoc}, ${backupSite}) ################## ## FIRST BULLET ## ################## * ## #if(${productClass}=="T") THIS IS A TEST MESSAGE. ## #end Tornado Warning for... #firstBullet(${areas}) ################### ## SECOND BULLET ## ################### * ## #if(${productClass}=="T") THIS IS A TEST MESSAGE. ## #end #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) #if(${list.contains(${bullets}, "meteorologistsTOR")}) #if(${stormType} == "line") #set($reportType = "National Weather Service meteorologists detected severe thunderstorms capable of producing a tornado. These dangerous storms were located") #set($pathcastLead = "These dangerous storms") #else #set($reportType = "National Weather Service meteorologists detected a severe thunderstorm capable of producing a tornado. This dangerous storm was located") #set($pathcastLead = "The tornado") #end #set($moveLead = ", and moving") #end #if(${list.contains(${bullets}, "meteorologistsSquall")}) #if(${stormType} == "line") #set($reportType = "National Weather Service meteorologists detected a severe squall line capable of producing a tornado as well as damaging straight line winds. These dangerous storms were located") #set($pathcastlead = "These dangerous storms") #else #set($reportType = "National Weather Service meteorologists detected a severe squall line capable of producing a tornado as well as damaging straight line winds. These dangerous storms were located") #set($pathcastLead = "These dangerous storms") #end #set($moveLead = ", and moving") #end #if(${list.contains(${bullets}, "meteorologistsLarge")}) #if(${stormType} == "line") #set($reportType = "National Weather Service meteorologists detected severe thunderstorms capable of producing a large and extremely dangerous tornado. These extremely dangerous storms were located") #set($pathcastLead = "These dangerous storms") #else #set($reportType = "National Weather Service meteorologists detected a severe thunderstorm capable of producing a large and extremely dangerous tornado. This extremely dangerous storm was located") #set($pathcastLead = "This dangerous storm") #end #set($moveLead = ", and moving") #end #if(${list.contains(${bullets}, "doppler")}) #if(${stormType} == "line") #set($reportType = "Doppler radar indicated a line of severe thunderstorms capable of producing a tornado. These dangerous storms were located") #set($pathcastLead = "These dangerous storms") #else #set($reportType = "Doppler radar indicated a severe thunderstorm capable of producing a tornado. This dangerous storm was located") #set($pathcastLead = "This dangerous storm") #end #set($moveLead = ", and moving") #end #if(${list.contains(${bullets}, "dopplerSquall")}) #if(${stormType} == "line") #set($reportType = "Doppler radar indicated a severe squall line capable of producing a tornado as well as damaging straight line winds. These dangerous storms were located") #set($pathcastLead = "These dangerous storms") #else #set($reportType = "Doppler radar indicated a severe squall line capable of producing a tornado as well as damaging straight line winds. These dangerous storms were located") #set($pathcastLead = "This dangerous storms") #end #set($moveLead = ", and moving") #end #if(${list.contains(${bullets}, "confirmedDoppler")}) #set($reportType = "Doppler radar was tracking a confirmed tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "This tornadic storm") #set($moveLead = ". Doppler radar showed this tornado moving") #end #end #if(${list.contains(${bullets}, "confirmedLarge")}) #set($reportType = "Doppler radar and storm spotters were tracking a large and extremely dangerous tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "The tornado") #set($moveLead = ". Doppler radar showed this tornado moving") #end #set($preAmble = "To repeat, a large and extremely dangerous tornado has been sighted. TAKE COVER NOW! ") #end #if(${list.contains(${bullets}, "spotter")}) #set($reportType = "trained weather spotters reported a tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "The tornado") #set($moveLead = ". Doppler radar showed this tornado moving") #end #set($preAmble = "To repeat, a tornado has been confirmed by storm spotters. TAKE COVER NOW! ") #end #if(${list.contains(${bullets}, "lawEnforcement")}) #set($reportType = "local law enforcement reported a tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "The tornado") #set($moveLead = ". Doppler radar showed this tornado moving") #end #set($preAmble = "To repeat, a tornado has been confirmed by local law enforcement. TAKE COVER NOW! ") #end #if(${list.contains(${bullets}, "emergencyManagement")}) #set($reportType = "emergency management reported a tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "The tornado") #set($moveLead = ". Doppler radar showed this tornado moving") #end #set($preAmble = "To repeat, a tornado has been confirmed by emergency management. TAKE COVER NOW! ") #end #if(${list.contains(${bullets}, "public")}) #set($reportType = "the public reported a tornado") #if(${stormType} == "line") #set($pathcastLead = "These tornadic storms") #set($moveLead = ". Doppler radar showed these tornadic storms moving") #else #set($pathcastLead = "The tornado") #set($moveLead = ". Doppler radar showed this tornado moving") #end #set($preAmble = "To repeat, a tornado has been sighted. TAKE COVER NOW! ") #end #if(${list.contains(${bullets}, "spotterFunnelCloud")}) #set($reportType = "trained weather spotters reported a funnel cloud") #if(${stormType} == "line") #set($pathcastLead = "These dangerous storms") #set($moveLead = ". A tornado may develop at any time. Doppler radar showed these dangerous storms moving") #else #set($pathcastLead = "This dangerous storm") #set($moveLead = " A tornado may develop at any time. Doppler radar showed this dangerous storm moving") #end #end #################################################### ############# THIRD BULLET ######################### #################################################### ###################################################### ###### Storm current location description ########## ###################################################### * ## #if(${productClass}=="T") THIS IS A TEST MESSAGE. ## #end #thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}), ${reportType} ## ##Many of the variables passed below are controlled by config.vm #if(${stormType} == "line") #handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceLine}) #else #handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, ${nearPhrase} , ${maxLandNearDistance}, ${overPhrase}, ${maxLandOverDistance}, ${landDistanceUnits}, ${useSecondReferenceCell}) #end #if(${movementSpeed} < ${landStationary} || ${stationary}) #if(${stormType} == "line") . The line of tornadic storms was nearly stationary. #else . The tornadic storm was nearly stationary. #end #else ${moveLead} #direction(${movementDirectionRounded}) at ${mathUtil.roundTo5(${movementSpeed})} mph. #end ##################################################################### ### 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 ############################ ### HAIL THREAT AS WELL? ### ############################ #if(${extraThreat} != "") ${extraThreat} #end ############################ ### ADDITIONAL REPORTS #### ############################ #if(${list.contains(${bullets}, "extraReportTornado")}) #wrapText("At !**ENTER TIME, TORNADO/DAMAGE INFO**! was reported !** ENTER LOCATION **!." 2 2) #end #if(${list.contains(${bullets}, "extraReportHail")}) #if(${stormType} == "line") #wrapText("In addition, at !**ENTER TIME, HAIL SIZE**! was reported !** ENTER LOCATION **! with these storms." 2 2) #else #wrapText("In addition, at !**ENTER TIME, HAIL SIZE**! was reported !** ENTER LOCATION **! with this storm." 2 2) #end #end #if(${list.contains(${bullets}, "extraReportWind")}) #if(${stormType} == "line") #wrapText("In addition, at !**ENTER TIME, WIND INFO**! was reported !** ENTER LOCATION **! with these storms." 2 2) #else #wrapText("In addition, at !**ENTER TIME, WIND INFO**! was reported !** ENTER LOCATION **! with this storm." 2 2) #end #end #if(${list.contains(${bullets}, "extraReportHailWind")}) #if(${stormType} == "line") #wrapText("In addition, at !**ENTER TIME, HAIL/WIND INFO**! were reported !** ENTER LOCATION **! with these storms." 2 2) #else #wrapText("In addition, at !**ENTER TIME, HAIL/WIND INFO**! were reported !** ENTER LOCATION **! with this storm." 2 2) #end #end ################################################### ######## GENERATE PATHCAST OR CITIES LIST ######### ################################################### #if(${stormType} == "line") #set($otherLead = "these tornadic storms") #else #set($otherLead = "this tornadic thunderstorm") #end #if(${list.contains(${bullets}, "pathcast")}) * ## #if(${productClass}=="T") THIS IS A TEST MESSAGE. ## #end #pathCast("${pathcastLead} will be near..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) #elseif(${list.contains(${bullets}, "listofcities")}) * ## #if(${productClass}=="T") THIS IS A TEST MESSAGE. ## #end #### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN #### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT #### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE #### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! #locationsList("Locations impacted include..." ${otherLead} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) #else * Locations impacted include... !** YOU DID NOT SELECT A PATHCAST OR LIST OF CITIES BULLET. PLEASE ENTER LOCATIONS IMPACTED **!. #end ############################################## ###### SPECIAL VENUE/EVENT CASE ############## ############################################## #if(${list.contains(${bullets}, "specialEvent")}) #if(${stormType} == "line") Those attending the !**EVENT/VENUE NAME OR LOCATION**! are in the path of these storms and should prepare for IMMINENT, DANGEROUS, AND POTENTIALLY LIFE-THREATENING WEATHER CONDITIONS. SEEK SHELTER NOW! #else Those attending the !**EVENT/VENUE NAME OR LOCATION**! are in the path of this storm and should prepare for IMMINENT, DANGEROUS, AND POTENTIALLY LIFE-THREATENING WEATHER CONDITIONS. SEEK SHELTER NOW! #end #end ## parse file command here is to pull in mile marker info ## #parse("mileMarkers.vm") ## Uncomment below pull in point marker info ## #parse("pointMarkers.vm") ##################### ## CALL TO ACTIONS ## ##################### ###Check to see if we've selected any calls to action. In our .xml file ##we ended each CTA bullet ID with "CTA" for this reason as a 'trip' #foreach (${bullet} in ${bullets}) #if(${bullet.endsWith("CTA")}) #set($ctaSelected = "YES") #end #end ## #if(${ctaSelected} == "YES") PRECAUTIONARY/PREPAREDNESS ACTIONS... #end ## #if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")}) #if(${list.contains(${bullets}, "torEmergency")}) 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 **! #end #end #if(${list.contains(${bullets}, "replacesSVRCTA")}) This Tornado Warning replaces the Severe Thunderstorm Warning issued for the same area. #end #if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")}) #set($dummy='dummy') #else #if(${list.contains(${bullets}, "defaultMobileCTA")}) ${preAmble}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 or outdoors, move to the closest substantial shelter and protect yourself from flying debris. #end #if(${list.contains(${bullets}, "defaultUrbanCTA")}) ${preAmble}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. #end #end #if(${list.contains(${bullets}, "motoristsCTA")}) Motorists should not take shelter under highway overpasses. If you cannot safely drive away from the tornado, as a last resort, either park your vehicle and stay put, or abandon your vehicle and lie down in a low lying area and protect yourself from flying debris. #end #if(${list.contains(${bullets}, "rainWrappedCTA")}) Heavy rainfall may obscure this tornado. Do not wait to see or hear the tornado. TAKE COVER NOW! #end #if(${list.contains(${bullets}, "nighttimeCTA")}) 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}, "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 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") This line of thunderstorms is capable of producing tornadoes and widespread significant wind damage. Do not wait to see or hear the tornado. For your protection move to an interior room on the lowest floor of your home or business. #elseif(${list.contains(${bullets}, "squallCTA")}) This cluster of thunderstorms is capable of producing tornadoes and widespread significant wind damage. Do not wait to see or hear the tornado. For your protection move to an interior room on the lowest floor of your home or business. #end #if(${list.contains(${bullets}, "waterCTA")}) If on or near !**NAME OF WATER BODY **!, get out of the water and move to safe shelter immediately. If you can hear thunder, you are close enough to be struck by lightning. In addition, severe thunderstorms can produce large capsizing waves, even on small bodies of water. Move into dock and seek safe shelter now! Do not be caught on the water in a thunderstorm. #end #if(${ctaSelected} == "YES") && #end ######################## ## LAT/LON, TML, SIGN ## ######################## #if(${productClass}=="T") THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. #end #printcoords(${areaPoly}, ${list}) #tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation}) $$ #parse("forecasterName.vm")