CRS AWIPS FORMATTERS EXTENDED (CAFE) Last Updated: 5 March 2001 TABLE OF CONTENTS: PART I: DESCRIPTION INSTALLATION CONFIGURATION TESTING: RECOMMENDATION - USE THE GEN SECTION FIRST AUTOMATIC OPERATION ADDITIONAL CONFIGURATION Site Office Section in config.nnn Word Replacement File /home/CRS/bin/WordFile.txt Marine Product Formatters PART II: HOW CAFE WORKS DEBUGGING CAFE FORMATTERS GENERAL DEBUGGING CONFIGURATION PROBLEMS PROBLEMS WITH PRODUCTS PART III: FUTURE - WHAT NEEDS TO BE DONE ADDRESSING SRH NEEDS AND SWITCH TO CAFE Service Backup - Coordinate with MDL Full and Summary Zone Forecasts - already implemented with ZFP and EXT PARSE VTEC LINES Ignored by CAFE Formatters SVR and TOR detect but do nothing else with VTEC lines ZONE FORECAST COMBINATION NAMES Use as many name combinations as possible, see nowx code WHAT SHOULD NOT BE DONE RECOMMENDATIONS PART IV: CAFE FILES FIXES/ENHANCEMENTS TO SLC CODE AND/OR ADDED TO NEW CAFE FORMATTERS APPENDICES: A: WATCHES (SAW AND SLS) B: TROPICAL CYCLONE PRODUCT (TCP) C: NEARSHORE PRODUCT (NSH) D: GREAT LAKES FORECAST (GLF) E: TABULAR DATA FORMATTER (TAB) F: VERTICAL TABULAR DATA (TBV) G: COMPLETELY DISSECTED CAFE FORMATTER (FLS.TCL) SAMPLE DEBUG OUTPUT FORMATTED OUTPUT BEFORE POST-PROCESSING WEATHER MESSAGE FIELDS H: ZONE FORECAST (ZFP) AND EXTENDED FORECAST (EXT) I: SHORT TERM FORECAST (NOW) J: ROUTINE WEEKLY TEST (RWT) REFERENCES CRS AWIPS FORMATTERS EXTENDED (CAFE) DESCRIPTION: A CAFE formatter consists of two C Shell scripts, a Tcl script and a configuration file and is distributed in its own TAR file. For each product, there is a separate set of files and each set runs independently. Formatter utilities are contained in a common TAR file. These TAR files are downloaded from the NOAA1 server. When the TAR file is unpacked, the files are placed in its own subdirectory in /home/CRS. For example, the SPS product files are placed in: /home/CRS/SPS. Configuration for CAFE is done by editing just one file for each formatter. For the SPS formatter, this file is: /home/CRS/SPS/config.sps A site's parameters are in its own section of the file marked by the office's identifiers e.g. between OKC and OKCEND. Text weather products are retrieved from the AWIPS Informix database. During testing, the top level C shell formatter script is run MANUALLY using the text product as input: ./nwrnnn.csh CCCNNNXXX OFC where CCCNNNXXX is the product stored in the Informix database and OFC is the identifier for the site's section of the config.nnn file. Example: for the SPS product at Norman OK (OKC): ./nwrsps.csh OKCSPSOKC OKC The top level C-Shell script ensures that only one copy of the formatter is running. The main C-Shell script (nnn.csh) runs the Tcl formatter script (nnn.tcl), filters, and transferCRS to send the finished product either directly to CRS or to the AWIPS NWRBrowser. In partially automatic operation, a new product is written to the Informix database. This triggers the formatter script which places the voice ready product in the AWIPS NWRBrowser for examination (and editing if necessary) before it must be manually sent to CRS. In totally automatic operation, the new product triggers the formatter which then sends the voice ready product directly to CRS. INSTALLATION: Create the CAFE directory (do just once as fxa): Install on DS1 Log in as user 'fxa' Create the CAFE directory as 'fxa': mkdir /home/CRS Change the permission to 'awipsusr': chown awipsusr /home/CRS Change the directory permissions: chmod 775 /home/CRS FTP the CAFE Files from the NOAA1 Server (inside AWIPS firewall): Log into DS1 as 'awipsusr' ds1-{awipsusr}% Change to the newly created /home/CRS directory cd /home/CRS FTP to the NOAA1 Server ds1-{awipsusr}% ftp 165.92.25.15 Log in as 'ftp': ftp> user ftp FTP Password: 4Awips! Change to cafe directory: ftp> cd /crs/cafe Make sure the ftp mode is binary: bin List the files: ls Get the bin utility TAR file used by all formatters: ftp> get bin6b.tar Get the latest TAR file for each formatter: ftp> get nnnvv.tar [for the SPS formatter, get sps4i.tar] [for the TCP formatter, get tcp6a.tar] Quit FTP: ftp> bye Unpack the CAFE Bin TAR file: Log into DS1 as awipsusr Change to the CAFE directory: cd /home/CRS Unpack the bin TAR file: tar xvf bin6b.tar Creates the /home/CRS/bin Change to the 'bin' utility directory: cd /home/CRS/bin Change the permissions of the files: chmod 777 * If this is a first time installation, mv WordFile.ren WordFile.txt Change the bin directory permissions: chmod 777 /home/CRS/bin Check the ownership and permissions: cd /home/CRS ls -l |more drwxrwxrwx 2 awipsusr fxalpha 1024 Dec 5 17:04 bin Unpack each CAFE formatter TAR file: Log into DS1 as awipsusr Change to the CAFE directory cd /home/CRS For each formatter, unpack its TAR file: tar xvf sps4i.tar Change to the newly created directory eg SPS: cd /home/CRS/SPS Make .csh and .tcl files executable: chmod 777 *.csh *.tcl Change the directory permissions: chmod 777 /home/CRS/SPS Check the ownership and permissions: cd /home/CRS ls -l |more drwxrwxrwx 2 awipsusr fxalpha 1024 Dec 5 17:04 bin drwxrwxrwx 2 awipsusr fxalpha 1024 Dec 11 14:24 SPS CONFIGURATION: config.nnn The configuration file consists of at least one section for your site (office) and possibly additional sections for an adjacent site. A section is defined as the parameters between PPP and PPPEND where PPP is the identifier for your site eg for Norman, OK, between OKC and OKCEND. There is usually a GENeric office section between GEN and GENEND which contains default parameter settings. TRY THESE FIRST by specifying 'GEN' as the office site in the command line: ./nwrnnn.csh CCCNNNXXX GEN #This is the configuration file for the NNN product PROCESS= Y Determines if the formatter should be run OLD PRODUCT CHECK= N Determines if the 2nd SBN copy should be checked for GEN Marks the start of the office section AREAS= ALL Use whatever UGCs are present in the product INTRO= _ No introductory text HEADLINE= Y Include the headlines in the final product ISSUE TIME= Y Insert an issue time line into the product CRSID= _ Use the AWIPS ID as the default CRS ID ACTIVE= A Set the active flag to A in the header SEND TO CRS= N Don't send to CRS, put in NWRBrowser GENEND /// Following the /// are notes on how to use the formatter. ********** IMPORTANT ***** READ THE NOTES!! *********** IT DESCRIBES COMPLETELY HOW THE PARAMETERS SHOULD BE SET. THIS IS THE ONLY CONFIGURATION THAT IS REQUIRED FOR CAFE. EACH FORMATTER HAS SPECIFIC INFORMATION IN ITS CONFIG FILE. ********** IMPORTANT ***** READ THE NOTES!! *********** TESTING: RECOMMENDATION - USE THE GEN SECTION FIRST Log into DS1 as awipsusr Change to the product directory: cd /home/CRS/NNN Run the formatter using the GEN section: ./nwrnnn.csh CCCNNNXXX GEN The first argument CCCNNNXXX is the product stored in the Informix database The second argument specifies GEN as the section to use in config.nnn What you will see if the formatter is successful: No match. First time formatter is run with the product 1 Reached the GEN section of config.nnn N Don't send to CRS 0 Reached the end of the GEN section CCCNNNXXX.AW File name of the voice-ready product To view the formatted product, 'more' the file: more CCCNNNXXX.AW The product is placed in the pending directory of the NWRBrowser. AUTOMATIC OPERATION (only after testing and debugging) Check the following URL for the latest information on AWIPS triggers: http://www-sdd.fsl.noaa.gov/~fxa/doc/triggers.html When a product is written to the Informix database, an AWIPS trigger can be set up to automatically run the CAFE script. Check with your AWIPS point of contact before performing this part of the installation. Modifying the List of (Local) Triggers: (Ref. 3.2.3) Log into ds1 as 'fxa'. Review the file: $FXA_HOME/informix/fxatextTriggerActions.txt Change to the trigger directory: cd /awips/fxa/informix more fxatextTriggerActions.txt Edit the AWIPS trigger actions file: vi fxatextTriggerActions.txt Add the trigger PILs and CAFE command line to the end of the file for each product you want to trigger. OKCSPSOKC | | | /home/CRS/SPS/nwrsps.csh OKCSPSOKC OKC | Run fxatextTrigger.sh to establish the new triggers Configure AWIPS for LAN operation: On ds1: /data/fxa/workFiles/nwr/nwr.cfg crs Specifies user 'crs' on your CRS. cpe94cpe Enter your user 'crs' password LAN Use the network not the comms line. Configure CAFE to Automatically Send the Product to CRS: To automatically send the product to CRS after formatting, set the following in the config.nnn file for each product you want sent: OLD PRODUCT CHECK= Y Skip the product if it is the duplicate from SBN SEND TO CRS= Y Send to CRS automatically after formatting Operation: When the product is written to the Informix database, the AWIPS trigger runs the CAFE script. The product is formatted for voice output and automatically sent to CRS. If the product is defined in the CRS ASCII database and if it is placed in a suite, CRS will play the product on the appropriate transmitter(s) based on the UGCs found in LAC field of the header. ADDITIONAL CONFIGURATION: Creating your own site section in the config.nnn file: If the generic or default settings do not work or if you just want to change some parameters, you can customize the formatter to fit your site's requirements. Note: You must customize the configuration files for the NSH and OFF formatters since specific UGC codes are required to identify the paragraphs. Carefully edit the config.nnn file for the formatter that you want to customize. Copy the GEN section of the file and replace the GEN with your site's ID in GEN and GENEND. OKC AREAS= ALL INTRO= HEADLINE= Y ISSUE TIME= Y CRSID= _ ACTIVE= A SEND TO CRS= N OKCEND Change the parameters as necessary. OKC AREAS= OKC003...OKC009...OKC011...OKC015...OKC017...OKC027...OKC031 INTRO= HEADLINE= Y ISSUE TIME= N CRSID= ACTIVE= A SEND TO CRS= N OKCEND Note: the AREAS line should be on one line. Then run the CAFE scripts using the ID that you replaced 'GEN' with in the command line. For example: OKC for Norman OK: ./nwrnnn.csh CCCNNNXXX OKC Specify which UGCs to search for in the product: (see example above) These UGCs will be placed in the LAC field of the message header. Instead of the generic default: AREAS= ALL Enter the UGCs in the AREAS= line usually zone codes separated by (...). The AREAS= line is filled with the UGCs that should be found in the product. Some products (NSH, OFF), require specific UGC information and thus do not have a preconfigured GENeric section. For SVR, TOR and FFW, enter UGC COUNTY not ZONE codes in the COUNTIES= line. Adding or Changing Words in the Word Replacement file: The Word Replacement file is located in the directory: /home/CRS/bin It is called: WordFile.txt Remember for first time installation, rename (mv) the file: mv /home/CRS/bin/WordFile.ren /home/CRS/bin/WordFile.txt The formatters will report that they cannot find the word file if the rename is not done. Modify the Word Replacement File: /home/CRS/bin/WordFile.txt WordFile.txt contains word replacements for the text in the product old (tab) || (tab) new Note 1: There are tabs between the old word(s), vertical bars (||) and the new word(s). These tabs can be replaced by a white space character such as a space. Note 2: To remove a word or words, do not put anything after the || tab: rmword (tab) || (tab) Note 3: Order is important. Example: the replacement of FT, place: 1 FT || 1 foot before: FT || feet so that '1 FT' will properly be replaced by '1 foot' instead of '1 feet'. Specify a different CRS ID (not default which matches the AWIPS ID): Use the CRSID= option if you have a specific CRS ID for a message type already configured in your CRS ASCII database file in Block 10 that is different from the AWIPS ID used in the command line. CRSID= CCCNNNXXX This ID will be placed in the CRSID field of the CRS message header. See AFOS Weather Message Format Specification, Appendix 2 of the CRS Site User's Manual 6.4 for the description of the message fields (Ref 4). Configure an Adjacent Office: Set up another section between CCC and CCCEND in config.nnn for the adjacent office. To select the adjacent office's section, use its ID in the command line: ./nwrnnn.csh CCCNNNXXX CCC Products Without UGC lines: Some formatters allow products which don't contain UGC lines. The AREAS= line MUST be filled with specific UGC codes. These require the DURATION= option in the configuration file. Since there is no UGC line in the product, the LAC field is filled with UGC codes which must be placed in the AREAS= line. Further, since the expiration time is part of the UGC line and the UGC is not present, the DURATION parameter is used to calculate the expiration time by 'adding' to the creation time which is assumed to be the current UTC or AWIPS time. Examples of this type of formatter are: AQI, PNS, SWS, TCP. Watches (SAW and SLS) Formatter See Appendix A to configure CAFE for these products. Marine Product Formatters Tropical Cyclone Product (TCP) Formatter Enter specific UGC codes in the AREAS= line. Enter the longer DURATION parameter for the TCP: DURATION= ddhhmm See Appendix B to configure CAFE for this product. Nearshore (NSH), Great Lakes Forecast (GLF) and Offshore (OFF) Formatters Specific UGC codes must be entered into the configuration file. UGC codes mark the specific paragraphs See Appendices C and D to configure CAFE for these products. Special Marine Warning (SMW) Formatter Bullet-style format like the warnings (SVR TOR and FFW) HOW CAFE WORKS Formatter Files after Unpacking: All Products: config.nnn Configuration file, only file where changes are made nwrnnn.csh Top level C-Shell script ensures only one copy is running nnn.csh C-Shell script which runs the formatter and filters nnn.tcl The product formatter itself, a Tcl script whatsnew.nnn Description of changes made to the formatter The NOW, NPW and WSW Segmented Products add the following: getnum.tcl Gets the number of the current segment segment.tcl Divides up the segmented product into individual segments seginfo.tcl Gets CRS header information: flags, ugcs and exptime ovrview.tcl Extracts the Overview segment/paragraph Directory structure and program files: Each formatter has its own directory: /home/CRS/NNN where NNN is the name of the formatter e.g. SPS Each formatter has its own configuration file: /home/CRS/NNN/config.nnn The specific formatter is a Tcl script: /home/CRS/NNN/nnn.tcl Each formatter has a main C shell script: /home/CRS/nnn.csh Gets the product from the Informix database Expands the range UGC codes to explicit codes Runs the formatter Runs a postprocessor which does word replacement and cleans up the product: e.g. replace ellipses with commas. Uses transferCRS to send the product to CRS or places it in the NWR Browser as a pending file. Each formatter has a top level C Shell script: /home/CRS/nwrnnn.csh File contention problems can occur when two copies of the formatter are triggered very closely together. This script guarantees that only one copy is running at one time. When the formatter is run, the file 'lock' is created. Checks for the lock file to prevent a second copy of the formatter from starting and possibly overwriting working files. Note: should the formater ever be interrupted, the lock file may still be left in the formatter's directory. Its existence will prevent the formatter from running (or at least waiting for a long timeout). Simply, remove the 'lock' file to rerun the top level script. Files Created by a CAFE formatter (non-segmented product): Step: Input: Output: Purpose: echo $1 argument 1 crsid.txt Save product ID echo $2 argument 2 begin.txt Save office ID date Unix date command datim.txt Save current UTC time textdb -r $1 Informix db file temp.txt Save product codeexp.tcl temp.txt out.txt Expand UGC ranges nnn.tcl out.txt textout.txt Formats the text debug.txt Formatter debug output postpro.tcl textout.txt CCCNNNXXX.AW Post process SEND TO CRS= Y transferCRS -a CCCNNNXXX.AW CRS dir /awips Sends to CRS AWIPS dir SEND TO CRS= N transferCRS -d CCCNNNXXX.AW NWR delayed dir To NWRBrowser for edit and sending manually notsent.txt Creates pending message If successful, the file CCCNNNXXX.AW is created in the formatter directory. If unsuccessful: 1 N 0 XXX or ERROR: can't find xxx in config.nnn To see what happened, 'more' the debug file: more debug.txt ERROR: usually occurs when the config.nnn file is not correct or when your product does not follow standard format specified in the OMLs. Interaction between nnn.csh and nnn.tcl programs Both read and extract information from config.nnn nnn.csh Reads OLD PRODUCT CHECK Gets office section from NNN Gets end of office section NNNEND Reads SEND TO CRS nnn.tcl Reads office section between NNN and NNNEND Reads parameters and options The formatter scripts nnn.tcl send back information to nwrnnn.csh ERROR Sent back if there is an error in the config.nnn file or if there is an improper value for a parameter SKIP Sent back when a segment does not contain any of the UGCs specified in the config.nnn file i.e. don't send this segment to CRS XXX Sent back for UGCs contained in the AREAS= line and none of the UGCs are in the product [voice-ready finished product Tcl variable $finish] If no errors occur, the last puts sends back the voice ready formatted product which nnn.csh redirects to the file: /home/CRS/NNN/textout.txt Some formatters send back NNN before the formatted product: When text is found in the product, the CRS ID can be changed e.g. WSW send back BZW (in CCCBZWXXX) to change the crsid if the text "BLIZZARD WARNING" is embedded in the product DEBUGGING CAFE FORMATTERS Get Current Status for the Formatter: Log in as 'awipsusr' on DS1 Change to the formatter directory: cd /home/CRS/NNN Print these working files: Configuration file (need the notes): config.nnn Debug output file: debug.txt View these working files: Informix database product file: temp.txt Product with ranges expanded: out.txt Formatted product w/o final processing: textout.txt Voice-ready file (if available): CCCNNNXXX.AW For Non-Segmented Product: debug.txt contains value traceback information to see how far the formatter gets and what it extracts from the product temp.txt is the product that the formatter used as input. out.txt has the UGC ranges expanded e.g. OKZ009>011 expands to: OKCZ009-OKZ010-OKZ011 textout.txt contains the formatted product before the post processor filter (/home/CRS/bin/postpro.tcl) is run CCCNNNXXX.AW is the voice ready product after post processing For the NPW and WSW Products: sgmnts.txt Contains the last segment extracted from the product. The Tcl script segment.tcl breaks up out.txt into segments one by one. The formatter script npw.tcl or wsw.tcl reads sgmnts.txt not out.txt. Manual mode for testing and debugging: Manually run the C shell script: ./nwrnnn.csh CCCNNNXXX OFC Creates: temp.txt out.txt textout.txt cccnnnxxx.AW Manually run the Tcl formatter: ./nnn.tcl Reads out.txt for non-segmented products Reads sgmnts.txt for the NOW, NPW and WSW segmented products. curnum.txt contains the segment number. Writes to the standard output, i.e. the screen Optionally pipe to 'more' or capture to a file: ./nnn.tcl|more ./nnn.tcl > temp Note: output contains the product BEFORE the postprocessor changes Examine debug.txt See how far the formatter proceeds with the product. Rerun just the tcl file after adding puts statements - rewrites debug.txt GENERAL DEBUGGING: Problems occur for non-standard format (does not follow OML). Example: non-bullet format for SVR TOR or FFW warnings Punctuation: (either extra or missing) When lines are wrapped: Ex: ellipse used as comma, gets placed at the beginning of the line and the line appears to be the start of a headline. Ex: ellipse between standard and metrics values in TCP product gets placed at the beginning of the line. Ex: Riverpro output wraps lines after 65 characters(?) in zone names, UGCs, headlines -- CAFE checks for these. Are there others? Run the Tcl formatter script manually: (no post processing) Change to the formatter directory: cd /home/CRS/NNN Run the Tcl formatter script: ./nnn.tcl Reads out.txt (or sgmnts.txt for NPW WSW products) When run manually, the output is to the console. To view a long product, pipe the output to more: ./nnn.tcl|more When run from nwrnnn.csh, the output is redirected to: CCCNNNXXX.AW Note: no post processing is done when running the Tcl script manually: word replacements, dash replacements, ellipse replacement with commas. Zone Forecast ZFP: getnum.txt contains number of segment to format CONFIGURATION PROBLEMS (CONFIG.NNN FILE): Subscript out of range Blank line between #first line and /// in config.nnn file. Office section is not present in the config file. Product in non-standard format: e.g. no bullets used in warnings. ERROR: can't find OPTION= in config.nnn file Unpaired PPP and PPPEND No space after the '=' in the line. New Option in New Version of Formatter is NOT Added to Configuration File When an option is added, examples are placed in the configuration file. If the new option is not present, the error message says it is missing. PROBLEMS WITH PRODUCTS: Wrong Headlines Headlines must be enclosed inside of ellipses (...) ...GALE WARNING IN EFFECT... Note: when ... are used in place of commas and the line wraps, the ... can be placed at the beginning of the line and it looks like the beginning of a header line. Wrong Bullets for Convective Warnings (3 to 5 bullet format) Extra asterisks placed in product eg *** TEST *** interpreted as a bullet Extra text at end of product or end of segment: $$ should end all products and segments $$ is used to mark the end of segments in segmented products. $$ should be used before forecaster's name/initials/comments. Other end of products indicators sometimes present in products: && NNNN 76 (or some other number) Forecaster's first or last name or combination Missing Information e.g. CST missing in issuance line of MND Extra Information e.g. second time zone inside parentheses in issuance line. Match in Wrong Place e.g. _2000 looking for year in issuance line but: Somewhere in the text message the year 2000 or just the number is present. The Tcl regexp or string first command will match the 2000 in the text and not in the issuance line. Must either (1) make the search even more specific e.g. include a trailing newline character or (2) after the possible year is found check more around the found text to see if it really is in the issuance line. FUTURE - WHAT NEEDS TO BE DONE ADDRESSING SRH NEEDS AND SWITCH TO CAFE 1. Service Backup - need coordination with MDL Need switchable IP address for 'sister' site's 0MP or 5MP Can preload sister sites AWIPS triggers for their files but could cause resource problems. 2. Full and Summary ZFP - already implemented Use ZFP with just summary Use EXT with 30 minute periodic with 15 after the hour for 2 or 3 hours PARSE VTEC LINES 1. CAFE formatters handle the VTEC lines by ignoring them. 2. The SVR and TOR formatters have code which detects but does nothing with them. 3. Parsing should finish by spring when the VTEC codes are supposed to be enforced and in use by AWIPS (as per Ken Sperow at FTW SRH meeting). ZONE FORECAST COMBINATION NAMES Now need exact match and in numeric order of UGCs What was done in NOWX formatter How the logic is different from NOW - backwards One starts with segments Other starts with Zone Codes in product WHAT SHOULD NOT BE DONE USE AWIPS WARNGEN AND WWA INSTEAD OF CAFE WARNING FORMATTERS 1. USE AWIPS SOFTWARE!! 2. Pathcast variations handled correctly for now but probably will have many others. USE RIVERPRO FORMATTER Use instead of the following formatters: FLS, FFS, FFA, FLW RECOMMENDATIONS 1. Use as many zone combination names as possible Priority 1 For ZFP formatter, see NOWX formatter. 2. Eliminate hard coded path names: Priority 2 Use ./begin.txt rather than: /home/CRS/SPS/begin.txt Note: just replace, calling shell sps.csh changes to the correct directory. 3. Use arguments rather than files: Priority 2 For crsid.txt, use argument 1 from calling C script: nnn.csh For begin.txt, use argument 2 from calling C script: nnn.csh Use Unix date to replace ./datim.txt. CAFE FORMATTERS: Watches: SAW, SLS, Special Marine Products: GLF, NSH, OFF, Special UGC encoded TCP, TWO, HLS Statement with Paragraphs CFW, CWF, MWS, Statement SMW, Bullet Tabular Data: TAB, TBV, Tabular OMR, RVS Tabular Generic: GEN, MPF, Special Forecasts: EXT, SFP, ZFP, Segmented .Period... NOW, NOWX, Segmented .NOW... Statements: AQI, AWS, FWM, PNS, Statements REC, RER, RWT, SPS, SVS, SWS, SYN Convective Warnings: FFW, SVR, TOR, Bullet NPW, WSW, Segmented CEM Statement River Products: FFA, FFS, FLS, FLW Statement TAR FILES ON NOAA1 SERVER: (as of 01-05-01) 44 Products aqi3a.tar, aws2e.tar, bin6b.tar, cem1b.tar, cfw2b.tar, cwf4d.tar, ext2c.tar, ffa3f.tar, ffs4a.tar, ffw4d.tar, fls3b.tar, flw2b.tar, fwm2a.tar, gen3e.tar, glf5k.tar, hls2a.tar, mpf2a.tar, mws2b.tar, now8h.tar, nowx1f.tar,npw6g.tar, nsh4c.tar, off3b.tar, omr2b.tar, pns4a.tar, rec1a.tar, rer2a.tar, rwt3c.tar, saw6c.tar, sfp2b.tar, sls6f.tar, smw4b.tar, sps4i.tar, svr3d.tar, svs4b.tar, sws3b.tar, syn2c.tar, tab3b.tar, tbv1a.tar, tcp5e.tar, tor3d.tar, trv2b.tar, two4a.tar, wsw6g.tar, zfp6i.tar whatsnew, whatsnew.prd, cafe.fil, cafe.txt, CAFE FORMATTER DIRECTORIES AND FILES: /home/CRS/. ./AQI: aqi.csh, aqi.tcl, config.aqi, nwraqi.csh, whatsnew.aqi ./AWS: aws.csh, aws.tcl, config.aws, nwraws.csh, whatsnew.aws ./CEM: cem.csh, cem.tcl, config.cem, nwrcem.csh, whatsnew.cem ./CFW: cfw.csh, cfw.tcl, config.cfw, nwrcfw.csh, whatsnew.cfw ./CWF: config.cwf, cwf.csh, cwf.tcl, nwrcwf.csh, whatsnew.cwf ./EXT: config.ext, ext.csh, ext.tcl, nwrext.csh, whatsnew.ext ./FFA: config.ffa, ffa.csh, ffa.tcl, nwrffa.csh, whatsnew.ffa ./FFS: config.ffs, ffs.csh, ffs.tcl, nwrffs.csh, whatsnew.ffs ./FFW: config.ffw, ffw.csh, ffw.tcl, nwrffw.csh, whatsnew.ffw ./FLS: config.fls, fls.csh, fls.tcl, nwrfls.csh, whatsnew.fls ./FLW: config.flw, flw.csh, flw.tcl, nwrflw.csh, whatsnew.flw ./FWM: config.fwm, fwm.csh, fwm.tcl, nwrfwm.csh, whatsnew.fwm ./GEN: config.gen, gen.csh, gen.tcl, nwrgen.csh, whatsnew.gen ./GLF: config.glf, glf.csh, glf.tcl, nwrglf.csh, whatsnew.glf ./HLS: config.hls, hls.csh, hls.tcl, nwrhls.csh, whatsnew.hls ./MPF: config.mpf, mpf.csh, mpf.tcl, mpfgui.tcl, nwrmpf.csh, whatsnew.mpf ./MWS: config.mws, mws.csh, mws.tcl, nwrmws.csh, whatsnew.mws ./NOW: config.now, getnum.tcl, now.csh, now.tcl, nwrnow.csh, remove_now.csh, remseg.tcl, seginfo.tcl, segment.tcl, whatsnew.now ./NOWX: config.nowx, nowx.csh, nowx.tcl, nwrnowx.csh, whatsnew.nowx ./NPW: config.npw, getnum.tcl, npw.csh, npw.tcl, nwrnpw.csh, ovrview.tcl, remove_npw.csh, removr.tcl, remseg.tcl, seginfo.tcl, segment.tcl, whatsnew.npw ./NSH: config.nsh, nsh.csh, nsh.tcl, nwrnsh.csh, whatsnew.nsh ./OFF: config.off, nwroff.csh, off.csh, off.tcl, whatsnew.off ./OMR: config.omr, nwromr.csh, omr.csh, omr.tcl, whatsnew.omr ./PNS: config.pns, nwrpns.csh, pns.csh, pns.tcl, whatsnew.pns ./REC: config.rec, nwrrec.csh, rec.csh, rec.tcl, whatsnew.rec ./RER: config.rer, nwrrer.csh, rer.csh, rer.tcl, whatsnew.rer ./RWT: config.rwt, nwrrwt.csh, rwt.csh, rwt.tcl, whatsnew.rwt ./SAW: config.saw, nwrsaw.csh, saw.csh, saw.tcl, whatsnew.saw ./SFP: config.sfp, nwrsfp.csh, sfp.csh, sfp.tcl, whatsnew.sfp ./SLS: config.sls, nwrsls.csh, sendnow.csh, sls.csh, sls.tcl, whatsnew.sls ./SMW: config.smw, nwrsmw.csh, smw.csh, smw.tcl, whatsnew.smw ./SPS: config.sps, nwrsps.csh, sps.csh, sps.tcl, whatsnew.sps ./SVR: config.svr, nwrsvr.csh, svr.csh, svr.tcl, whatsnew.svr ./SVS: config.svs, nwrsvs.csh, svs.csh, svs.tcl, whatsnew.svs ./SWS: config.sws, nwrsws.csh, sws.csh, sws.tcl, whatsnew.sws ./SYN: config.syn, nwrsyn.csh, syn.csh, syn.tcl, whatsnew.syn ./TAB: config.tab, nwrtab.csh, tab.csh, tab.tcl, whatsnew.tab ./TBV: config.tbv, nwrtbv.csh, tbv.csh, tbv.tcl, whatsnew.tbv ./TCP: config.tcp, nwrtcp.csh, tcp.csh, tcp.tcl, whatsnew.tcp ./TOR: config.tor, nwrtor.csh, tor.csh, tor.tcl, whatsnew.tor ./TWO: config.two, nwrtwo.csh, two.csh, two.tcl, whatsnew.two ./WSW: config.wsw, getnum.tcl, nwrwsw.csh, ovrview.tcl, remove_wsw.csh, removr.tcl, remseg.tcl, seginfo.tcl, segment.tcl, wsw.csh, wsw.tcl ./ZFP: config.zfp, nwrzfp.csh, whatsnew.zfp, zfp.csh, zfp.tcl ./bin: WordFile.ren, WordFile.txt, codeexp.tcl, fips63.in, fixnl.tcl, issued.tcl, postpro.tcl, readme.bin, stateids, transferCRS, transferNWR, whatsnew.bin, zones.in FIXES/ENHANCEMENTS TO SLC CODE AND/OR ADDED TO NEW CAFE FORMATTERS: Fixes - make sure rest of formatters have the fixes: include fix isstime fix (don't update product or summary!!!) ckxxx nwrnnn.csh exit DDHHMM check for working file with WMO date-time not filled in yet ck $product=="", don't send to NWRBrowser ZCZC check see glf5i.tar Z|C allow either see sps w-w fix Files in: /home/CRS/utl 9charfix Make sure CRS ID has 9 characters append spaces if necessary. active1.cfg ACTIVE= A active2.cfg Description of ACTIVE options: A,I,X,C in config.nnn file active.tcl Code to read into nnn.tcl file to get ACTIVE flag alarm1.cfg ALARM= A alarm2.cfg Description of ALARM options: A, _, N areafix(.tcl) Get UGC areafix1(.tcl)Fix for possible split UGC line, wrapped lines areafix2(.tcl)Fix for possible split UGC line, in args.csh Get arguments from C shell command line crsid and begin argsget(.tcl) Get arguments from command line autodst(.tcl) Get TZ and AUTODST options from config.nnn file awfix(.csh) Append .AW to AWIPS ID for name to send to CRS bldlac(.tcl) New 'GO' loop, build LAC list from AREAS= UGC codes found in prod ckargs(.csh) Check if args 1 and 2 were entered on C shell command line ckxxx.csh Check if formatter Tcl script nnn.tcl returned 'XXX' cmpfil(.csh) cmp used for old product check codeexp.tcl Bin utility which expands UGC ranges to explicit codes crfix(.tcl) Removes double spacing crsid.csh C shell script to get NNN from CRS ID CCCNNNXXX crsid.tcl Get CRSID= flag from config.nnn file crsid1.cfg CRSID= line in config.nnn crsid2.cfg Explanation of CRSID= option for config.nnn crsid9 Make sure CRS ID has 9 charactes, append spaces if necessary datim(1.tcl) Read /home/CRS/NNN/datim.txt to variable datetime datim.csh C shell script writes current (UTC) time to ./datim.txt datim.tcl Tcl script writes current (UTC) time to ./datim.txt db2sgl(.tcl) Removes double spacing dblspc(.tcl) Check if double spaced i.e. \n\nNATIONAL WEATHER ddhhmm(.tcl) Ck if work prod, before WMO DDHHMM is replaced by numbers debug(.tcl) Open debug file (./debug.txt) debug2(.tcl) Append if ./debug.txt exists, create if not. dstcalc.tcl Test pgm for converting Zulu to localtime given GMT-5 autodst dupprod(.doc) Documentation of second product that arrives through SBN dur DURATION= 0000 line for config.nnn dur.cfg Explanation of DURATION= option for config.nnn duract(.cfg) Explanation of both DURATION= and ACTIVE= options duractv DURATION= and ACTIVE= lines for config.nnn eff.cfg Explanation of EFFECTIVE TIME= option for config.nnn effeq(.cfg) EFFECTIVE TIME= 00 line for config.nnn effopt(.tcl) Read EFFECTIVE TIME= option from config.nnn effset(.tcl) Combine period and effective time= options for effective time embed.cfg Explanation of optional embedded product NNN and search strs embnl(.tcl) Code to search for words with possible embedded nl chars envir(.csh) Set up environment from calling C shell program. epoch(.tcl) Seconds from 1-1-80(?) escchar.vi How to insert an escape char using vi expfix(.tcl) Better way to find expiration time at end of UGC line exptime(.tcl) Adding duration to effective time using epoch seconds extended.cfg Explanation of EXTENDED= Y,N,B. Leadin, no ext periods, or blank Y: Intro "And now the extended forecast." N: No extended periods or intro in forecast. B: No extended introduction, but extended periods are included. filefix(.csh) Old file name to send to CRS using crsid time and .AW fips63.in FIPS 6.3 County codes and names by states fixes.doc This file fixnl.tcl Tcl script which converts DOS cr/lf to Unix lf end of lines flagfix(.tcl) Expanded puts "XXX" to debug file along with std output (back to calling C shell nnn.csh program) from nnn.tcl ftp_send.csh Old way to send the product to CRS, requires hard coded IP addr getarea(.tcl) Get UGCs from UGC line, put in area variable getnames(.tcl)Proc getnames for UGC zone or county codes getnames0(tcl)Set file for ugc codes from zones.in or fips63.in getnames1(tcl)Calling sequence for getnames proc getw.ksh Korn shell script to get watch number hdlnfix(.tcl) Better routine to find headlines hosts CRS /etc/hosts file IP addresses for CRS systems SEB PCs iaflag1 MIA patch to detect CORrected warning and set ALARM= N. No iaflag2 SAME tone for corrected SVR,TOR,FFW (courtesy Pablo Santos) incr.csh C shell code to increment a variable informix(.csh)Check if product is in Informix database intro.cfg Explanation of INTRO= option for config.nnn intro1.tcl Get INTRO= option from config.nnn intro2.tcl Write intro to finished product if non blank ipadd.sav IP addresses (old) and pwd for 0MP CRS prototype (or 1st prod?) issue1.tcl Get ISSUE TIME= option from config.nnn issfix.doc Comment _200[0-9] isstime1(.tcl)Most rigorous check for issuance parameters issue.cfg Explanation of ISSUE TIME= optio issue1.tcl Get ISSUE TIME= flag from config.nnn issue2.tcl Check if issuance string is non blank laclist.cfg Explanation of AREAS= line laclist1 Proc getnames for getting lac list laclist2 New GO loop for getting lac list laclist3 Use laclist for area laclist4 If laclist non blank, write to product lacs5.tcl Test program for laclist and getnames nwr.csh Top level C shell script nwr.cfg File to enable LAN not COMMS line operation on AWIPS ofcfix1 Better check for PPP to PPPEND ofcfix2 Better check for PPP N to PPPEND i.e. with number of products oldprod Sample program to compare whole product not just first few lines open Open a file ovr1 NPW/WSW ovrview.tcl fixes ovr1.cfg ovr2 ovr2.cfg ovrfix ovrfix2 NPW/WSW ovrview.tcl fixes peropt(.tcl) Get PERIODICITY= option from config.nnn postpro.tcl Post processing utility in bin: ellipse to comma, dash to TO pwd Tcl code snippet to get current directory qmcode.cfg QUESTION MARKS= Y option for config.nnn TODAY? Cloudy qmcode1(.tcl) Get QUESTION MARKS= option from config.nnn qmcode2(.tcl) Check for qmcode option whether to replace with question marks qmcode2.cfg Explanation of QUESTION MARKS option in config.nnn reg1(.tcl) Regular expression code snippet regnl(.tcl) Regular expression code snippet with embedded nl regs(.tcl) Example on use of regexp repeat1.cfg REPEAT= Y option for config.nnn repeat1.tcl Get REPEAT option from config.nnn repeat2.cfg Explanation of REPEAT= Y or N for config.nnn repeat2.tcl Use REPEAT= option rmell Remove ellipse code snippet using while not regsub rmldper Remove leading periods in lines rmmet.tcl Remove metrics in TCP product rmnulls Remove nulls if in text product-put in codeexp.tcl as preproc rmspblnk Remove spaces from blank lines-interferes with paragraph checking segfix send2crs.csh Site developed check for Snuffle formatter running setenv(.csh) IMPORTANT: set the environment-required for automatic send tclsh First line in all Tcl scripts #!/usr/... tranfix1 Old Fixes used for conversion from ftp_send to transferCRS tranfix2 " tranfix3 " trans " tranwhat Old Fixes used for conversion to transferCRS trimiss Trim issuance line fix trp2sgl Remove triple spacing if present ugcexpir Use yr mo from AWIPS UTC time, ddhhmm from UGC expiration time ugcgui.tk Tk GUI script to get UGC codes for AREAS= line upper Code snippet to convert to uppercase usage.csh C script displays usage if 2 args not given ver Alternate routines to lock file - not used ver1 " ver2 " vers " version.txt Alternate routines to lock file - not used vtec(.tcl) Check for vtec line in product whenfix(.tcl) Make sure when bullet ends with period wmofix(.tcl) Better search for wmo line wmotime(.tcl) Get expiration time from wmo line xxxerr(.tcl) Detect xxx no ugc codes from AREAS= line in product zfp2prod.doc Discussion on future combining two ZFP products into one-Pri 2 zonefix(.tcl) Old - original fix for GO loop zones.in Zone forecast UGC codes and names by state, see fips63.in zorc(.tcl) Find AREAS= zone and/or county codes in product zulu(.tcl) Find Zulu time in TCP product APPENDIX A: WATCHES (SAW AND SLS): The SAW formatter is the FIRST of TWO steps which set up and send the SVA and TOAs to CRS. The SAW formatter reads and extracts information from SAW products received from the Storm Prediction Center (SPC). It extracts information from the SAW product and substitutes data for the variables contained in a watch statement template supplied in the SAW configuration file. The partially filled watch statement is written to a file 'watchnnn.txt' where nnn is the watch number issued from SPC. The last two variables, tower and county information, are filled in by the SLS formatter. The SAW formatter also places pending watch information (watch type and number, date-time issued, and states) in a status file 'prewch.txt' for the SLS formatter to read. The SLS formatter is the SECOND of the TWO steps. It processes SLS products and determines which counties must be toned. The watch number determines which partially filled prewatch file set up by the SAW formatter to use. From the config.sls file, the SLS formatter gets the initial list of counties which are reached by each transmitter. If the watch number in the SLS product is the same as in the pending status file, then it reads the county codes from the SLS product and checks off those counties for each tower that should be toned. When the SLS products for all of the states have reported, the tower name and its counties are substituted into the watch statement template and the SVA or TOA is sent. CONFIGURATION OF THE SAW FORMATTER: /home/CRS/SAW/config.saw Answer the following and edit the configuration file: 1. What offset from UTC is your time zone in? TZ= GMT-5 for EST/EDT Unix notation EST5EDT TZ= GMT-6 for CST/CDT CST6CDT 2. Do you use daylight savings time? AUTODST= N If no. If yes, do you want to automatically switch? Y or N AUTODST= Y Want to automatically switch AUTODST= N Don't want to switch 3. What states are you responsible for? STATES= OK KS TX 4. What statement do you want broadcast for SVA and TOA products? Place the wording and between FORM= and NNNEND in config.saw. Sample SAW Configuration File: #This is the configuration file for the SAW product PROCESS= Y OLD PRODUCT CHECK= N OKC TZ= GMT-6 AUTODST= Y STATES= OK KS TX FORM= The Storm Prediction Center in Norman has issued a watch for portions of , effective until . This watch covers the area of a line, from , to . This watch includes the following counties in the listening area. OKCEND Sample SAW product: WWUS40 KMKC 140629 SAW9 MKC AWW 140629 WW 449 SEVERE TSTM KS MO OK 140645Z - 141200Z AXIS..70 STATUTE MILES NORTH AND SOUTH OF LINE.. 20W OKC/OKLAHOMA CITY OK/ - SGF/SPRINGFIELD MO/ ..AVIATION COORDS..60NM N/S /17 W OKC - 9 SSW SGF/ HAIL SURFACE AND ALOFT..2 INCHES. WIND GUSTS..60 KNOTS. MAX TOPS TO 500. MEAN STORM MOTION VECTOR 26035. REPLACES WW 447..KS OK TX Map of Variables and Product Data: Variable: SAW Product Data: Substituted Text: SEVERE TSTM SEVERE THUNDERSTORM KS MO OK KANSAS, MISSOURI AND OKLAHOMA 141200Z 6:00 AM CST 70 STATUTE MILES 70 MILES NORTH AND SOUTH OF LINE NORTH AND SOUTH 20W 20 MILES WEST OF OKLAHOMA CITY OK OKLAHOMA CITY, OKLAHOMA _ [no distance or direction] SPRINGFIELD MO SPRINGFIELD, MISSOURI HAIL SURFACE AND ALOFT..2 INCHES HAIL SIZE 2 INCHES AND WIND WIND GUSTS..60 KNOTS. GUSTS TO 69 MILES PER HOUR ARE POSSIBLE. Run the SAW Formatter: Log in as 'awipsusr' Run for the OKCSAW9 product: ./nwrsaw.csh OKCSAW9 OKC If the states for the watch include those you specified in the config.saw file, then the prewatch statement file will be generated and an entry for that watch will be added to the prewch.txt pending status file. Prewatch Statement File after SAW Formatter Processing: watch449.txt The Storm Prediction Center in Norman has issued a SEVERE THUNDERSTORM watch for portions of Kansas, Missouri AND Oklahoma, effective until 6 AM CST. This watch covers the area 70 NORTH AND SOUTH of a line, from 20 miles west of OKLAHOMA CITY, OKLAHOMA, to SPRINGFIELD, MISSOURI. Hail to 2 INCHES and wind gusts to 69 miles per hour are possible. This watch includes the following counties in the listening area. Prewatch (Pending) Status file: /home/CRS/prewch.txt ##### PRE-WATCH STATUS FILE CREATED 0101021947 ##### SEVERE 449 0101141200 AR KS MO OK Multiple watches Multiple watches can be tracked concurrently since the SPC assigned watch numbers are used to distinguish the watches. Example: ##### PRE-WATCH STATUS FILE CREATED 0101021947 ##### SEVERE 449 0101141200 KS MO OK TORNADO 451 0101141400 KS OK More Examples of Watch Statement Templates: Example with a shorter watch statement: FORM= The Storm Prediction Center has issued a watch for . The watch is in effect until and includes the following counties in the broadcast area. NNNEND Example with the variable repeated in the watch statement. FORM= The Storm Prediction Center has issued a watch for . The watch is in effect until and includes the following counties in the broadcast area: Remember, a watch is a very dangerous condition... NNNEND Debugging the SAW Formatter - How to rerun the SAW formatter 1. Remove the entry in the prewatch file which contains the watch number. Edit: vi /home/CRS/SAW/prewch.txt [Remove line containing 449 in the example above] [Save and exit] 2. Rerun the formatter using the same product which is now saved in text.txt: ./saw.tcl The prewatch file containing the data will be updated: watch449.txt 3. Now, test the second test of the watch formatter namely the SLS formatter. CONFIGURATION OF THE SLS FORMATTER: /home/CRS/SLS/config.sls Answer the following and edit the configuration file: 1. What AWIPS products will be produced for the states that you monitor? Examples: OK...OKCSLSOK TX...FTWSLSTX KS...TOPSLSKS Are there multiple products for a single state? If yes, enter as follows: TX...FTWSLSTX...SANSLSTX 2. What UGC counties are reached by each of your transmitters? What broadcast area is serviced by each transmitter? Transmitter UGCs reached by this Transmitter: PONCA CITY OKC071 KSC035 OKC053 OKC103 OKC113 OKC117... OKLAHOMA CITY OKC109 OKC017 OKC027 OKC051 OKC073 OKC081... CLINTON OKC039 OKC009 OKC011 OKC015 OKC043 OKC129 OKC149... WICHITA FALLS TXC485 TXC009 TXC023 TXC077 OKC033 OKC141 3. How are the SVA and TOA message types defined in your CRS ASCII file? Is there one SVA for all of your transmitters? Is there one TOA for all of your transmitters? Are there unique SVA message types for each one of your transmitters? Are there unique TOA message types for each one of your transmitters? The configuration will be slightly different depending on whether you have just one SVA for all of your transmitters or a unique SVA for EACH of the transmitters. The table of transmitters and counties reached by the transmitters is the same. What is different is the XXX part. For one SVA and one TOA, the XXX part is the same. If you have unique message types for each of your transmitters, you must specify different XXXs for them in the configuration file. The following shows the different configuration files for the two cases: CASE 1: Unique Message Types for each of your transmitters: Example for OKC: XXX Transmitter UGCs reached by this Transmitter: PNC PONCA CITY OKC071 KSC035 OKC053 OKC103 OKC113 OKC117... OKC OKLAHOMA CITY OKC109 OKC017 OKC027 OKC051 OKC073 OKC081... CSM CLINTON OKC039 OKC009 OKC011 OKC015 OKC043 OKC129 OKC149... SPS WICHITA FALLS TXC485 TXC009 TXC023 TXC077 OKC033 OKC141 #This is SLS configuration file for UNIQUE SVA OR TOA transmitter products #Generates: OKCSVAPNC, OKCSVAOKC, OKCSVACSM, OKCSVASPS, etc # or: OKCTOAPNC, OKCTOAOKC, OKCTOACSM, OKCTOASPS, etc # XXX is PNC, OKC, CSM, SPS, etc for the transmitters OKC AWIPSIDS= OK...OKCSLSOK TX...FTWSLSTX KS...TOPSLSKS TOWERS= PNC...PONCA CITY...OKC071...KSC035...OKC053...OKC103...OKC113...OKC117 OKC...OKLAHOMA CITY...OKC109...OKC017...OKC027...OKC051...OKC073...OKC081 CSM...CLINTON...OKC039...OKC009...OKC011...OKC015...OKC043...OKC129...OKC149 SPS...WICHITA FALLS...TXC485...TXC009...TXC023...TXC077...OKC033...OKC141 ACTIVE= A SEND TO CRS= N OKCEND CASE 2: One Message Type for all of your transmitters: Example for OKC: XXX Transmitter UGCs reached by this Transmitter: OKC PONCA CITY OKC071 KSC035 OKC053 OKC103 OKC113 OKC117... OKC OKLAHOMA CITY OKC109 OKC017 OKC027 OKC051 OKC073 OKC081... OKC CLINTON OKC039 OKC009 OKC011 OKC015 OKC043 OKC129 OKC149... OKC WICHITA FALLS TXC485 TXC009 TXC023 TXC077 OKC033 OKC141 #This is SLS configuration file for ONE SVA OR TOA product for ALL transmitters #Generates: OKCSVAOKC and OKCTOAOKC # XXX is OKC for all transmitters OKC AWIPSIDS= OK...OKCSLSOK TX...FTWSLSTX KS...TOPSLSKS TOWERS= OKC...PONCA CITY...OKC071...KSC035...OKC053...OKC103...OKC113...OKC117 OKC...OKLAHOMA CITY...OKC109...OKC017...OKC027...OKC051...OKC073...OKC081 OKC...CLINTON...OKC039...OKC009...OKC011...OKC015...OKC043...OKC129...OKC149 OKC...WICHITA FALLS...TXC485...TXC009...TXC023...TXC077...OKC033...OKC141 ACTIVE= A SEND TO CRS= N OKCEND Operation of the SLS Formatter: When an incoming SLS product triggers this formatter: 1. The watch number in the product is checked with the pending watches in the SAW prewatch pending status file: /home/CRS/SAW/prewch.txt 2. If the watch number matches a pending watch, the AWIPS ID from the SLS command line is compared with the entries in the config.sls file. If this is the first SLS product after the SAW was issued, a list of AWIPS IDs is built from the list of states in the pending file and the states list from the config.sls file. For only those states that are both in the pending watch file and in the site's responsibility are used to build a list of AWIPS IDs by mapping the states to the AWIPS IDs. In OKC Example: the states in the watch are: KS MO and OK The states that OKC is responsible for are: OK KS and TX So the watches that must be checked for are: OKCSLSOK and TOPSLSKS. Note: FTWSLSTX is not monitored since it is for TX which is not in the watch. 3. The UGCs found in the product are compared with all of the UGCs in the config.sls file. If the UGC is in any of the transmitter-UGC lists, it is marked to be included when the watch product goes out and its UGC code will be included in the CRS LAC field in the message. 4. When the AWIPS product is processed, it is removed from the list of AWIPS IDs to check for. If the SLS product is the last one that must be checked, the watch is sent. If there are more SLS products to monitor, the formatter exits (and waits). 5. When all of the SLS products have been checked, the watch goes out. Example: Use the same example as above and the following two SLS products: 1. SLS Product from OKC Oklahoma City OK: WWUS64 KOKC 312250 SLSOK BULLETIN - IMMEDIATE BROADCAST REQUESTED AREAL OUTLINE FOR SEVERE THUNDERSTORM WATCH NUMBER 449 NATIONAL WEATHER SERVICE OKLAHOMA OK 449 PM CST TUE OCT 31 2000 ****** ****** ****** ****** OKC005-OKC017-OKC023-OKC053-OKC073-OKC089-OKC117-261100- IN OKLAHOMA 7 COUNTIES $$ Run the formatter manually with the first SLS product: ./nwrsls.csh OKCSLSOK OKC After this product triggers the SLS formatter, the watch449.txt file contains: TOPSLSKS PNC,PONCA CITY,OKC053,OKC117 OKC,OKLAHOMA CITY,OKC017,OKC073 CSM,CLINTON SPS,WICHITA FALLS /// OKCSLSOK,OKC053,OKC117,OKC017,OKC073 2. SLS Product from TOP Topeka KS: WWUS64 KTOP 312250 SLSKS BULLETIN - IMMEDIATE BROADCAST REQUESTED AREAL OUTLINE FOR SEVERE THUNDERSTORM WATCH NUMBER 449 NATIONAL WEATHER SERVICE TOPEKA KS 453 PM CST TUE OCT 31 2000 THIS WATCH INCLUDES THE FOLLOWING COUNTIES IN KANSAS AND IS VALID UNTIL 4 AM CST FRIDAY. ****** KSC015-KSC035-KSC077-KSC079-KSC095-KSC155-KSC173-KSC191-251000- IN SOUTH CENTRAL KANSAS 8 COUNTIES COWLEY HARPER HARVEY KINGMAN BUTLER RENO SEDGWICK SUMNER $$ Run the formatter manually with the second SLS product: ./nwrsls.csh TOPSLSKS OKC After this product triggers the SLS formatter, the watch449.txt file contains: PNC,PONCA CITY,OKC053,OKC117,KSC035 OKC,OKLAHOMA CITY,OKC017,OKC073 CSM,CLINTON SPS,WICHITA FALLS /// OKCSLSOK,OKC053,OKC117,OKC017,OKC073 TOPSLSKS,KSC035 Notes: 1. There no more AWIPS products to check for and the SVA goes out. 2. Only the first two transmitters will have products sent out since the other two's UGCs were not in either the OKCSLSOK or TOPSLSKS products. 3. The CRS ID which goes into the CRS field of the message header is composed of three parts: The OFC ID is used as the CCC part of the CRS ID: For this example, the office ID is: OKC The NNN is either SVA or TOA depending on the type of watch from SPC: In this case, the watch is a Severe Thunderstorm watch: SVA The XXX is either the unique IDs for each of the transmitters above OR the same ID for all transmitters. For Case 1: unique messages for each transmitter: see config.sls example 1 XXX: In CRS Header: Tower: LAC Field: PNC OKCSVAPNC PONCA CITY OKC053-OKC117-KSC035 OKC OKCSVAOKC OKLAHOMA CITY OKC017-OKC073 For Case 2: same message for all transmitter: see config.sls example 2 XXX: In CRS Header: Tower: LAC Field: OKC OKCSVAOKC PONCA CITY OKC053-OKC117-KSC035 OKC OKCSVAOKC OKLAHOMA CITY OKC017-OKC073 The SLS formatter takes the information in the table to substitute for the and variables in the watch statement. Names for the UGC counties are looked up in the fips63.in file and placed in the watch449.txt file. Testing the SLS Formatter: Run the formatter manually with the SLS products: ./nwrsls.csh OKCSLSOK OKC ./nwrsls.csh TOPSLSKS OKC Because a second copy of the product could arrive by way of the SBN, the SLS formatter checks if the SLS has already been parsed. Thus, if you try to run the formatter again, it will say that the product already has been processed (not in the first line of the watch449.txt) file. During testing, if you want to 'force' the SLS formatter to use the same product again, you must run the Tcl formatter script manually and use the '-f' force flag as an argument: ./sls.tcl OKCSLSOK OKC -f Or: ./sls.tcl TOPSLSKS OKC -f Sending the Watch Immediately without Waiting for the last SLS: SENDNOW There is a script which will send the watch to CRS without waiting for the last SLS(s) to arrive. Only those counties contained in the products that match those in the site's transmitter's lists will be toned. Run the SENDNOW script with the watch number as an argument, if known: ./sendnow.csh OKC 449 If the watch number is not known, run the SENDNOW script without any arguments, you will prompted to select a watch from a list: ./sendnow.csh OKC ##### PRE-WATCH STATUS FILE CREATED 0101021947 ##### SEVERE 449 0101141200 KS MO OK TORNADO 451 0101141400 KS OK Enter watch number: 449 APPENDIX B: TROPICAL CYCLONE PRODUCT (TCP) CONFIGURATION This product consists of paragraphs. Paragraphs are identified by keywords that appear inside or introduce the paragraph. 1. Specify which paragraphs to be included in the summary and full reports in the SUMMARY= and FULL= option lines. Put the paragraphs in any order. Paragraphs used are: WHAT_WHERE, ADVISORIES, WHEN, WINDS, PRESSURE, MOVEMENT, EXTEND, REPEAT, and NEXTADV. Example of specifying paragraphs in full and summary reports: FULL= WHAT_WHERE WHEN WINDS PRESSURE MOVEMENT REPEAT NEXTADV SUMMARY= WHAT_WHERE WHEN EXTEND REPEAT When the storm's center as determined by the LAT/LON is inside the OUTSIDE= coordinates, the SUMMARY paragraphs will be extracted from the product and put in the final voice-ready product. When the LAT/LON is inside the INSIDE= coordinates, the FULL paragraphs are used. If you do not want a second or full report, place the coordinates of the inside box over the north pole or somewhere else where the center of the storm should never occur. INSIDE= 28N,83W,19N,62W OUTSIDE= 50N,99W,10N,30W 2. Specify your time zone based on the Unix offset notation: EST5EDT offset -5 behind GMT/UTC CST6CDT 6 hours behind TZ= GMT-5 TZ= GMT-6 If you use daylight savings and want to automatically switch, use: AUTODST= Y If you use daylight savings but do not want to automatically switch, use: AUTODST= N If you do not use daylight savings, use: AUTODST= N 3. Each keyword is associated with phrases which the formatter will look for in order to find the keyword's paragraph. Separate more than one phrase with the vertical bar character. WINDS= MAXIMUM WINDS|MAXIMUM SUSTAINED PRESSURE= CENTRAL PRESSURE MOVEMENT= MOVING TOWARD|MOVEMENT TOWARD|MOVING BETWEEN 4. If you want to change the CRS ID of the product when a text string is found in the product, specify the NNN part of the ID and then the text you want to search for. HUA= HURRICANE WATCH If there is more than one string, separate them with a |. HUW= HURRICANE WARNING|ISSUED A HURRICANE If you want more than one, enter them between ACTIVE= and SEND TO CRS= lines: ACTIVE= A HUW= HURRICANE WARNING HUA= HURRICANE WATCH SEND TO CRS= N If you don't want to change the CRS ID, do not have any lines between the ACTIVE= and SEND TO CRS= lines: Example Configuration File: PROCESS= Y OLD PRODUCT CHECK= N MIA AREAS= FLC996...FLC998...FLC999 DURATION= 010000 PERIOD= 0000 EFFECTIVE TIME= 00 TZ= GMT-5 AUTODST= Y ISSUE TIME= N CRSID= INSIDE= 28N,83W,19N,62W OUTSIDE= 50N,99W,10N,30W FULL= WHAT_WHERE WHEN WINDS PRESSURE MOVEMENT REPEAT NEXTADV SUMMARY= WHAT_WHERE WHEN EXTEND REPEAT INTRO= HEADLINE= Y WHAT_WHERE= HURRICANE WATCH|HURRICANE WARNING ADVISORIES= REMAINS IN EFFECT WHEN= AT |SPACE AFTER AT WINDS= MAXIMUM WINDS|MAXIMUM SUSTAINED PRESSURE= CENTRAL PRESSURE MOVEMENT= MOVING TOWARD|MOVEMENT TOWARD|MOVING BETWEEN EXTEND= WINDS EXTEND REPEAT= REPEATING NEXTADV= NEXT ADVISORY|NEXT COMPLETE ADVISORY|NEXT SCHEDULED ADVISORY ACTIVE= A HUA= HURRICANE WATCH SEND TO CRS= N MIAEND /// Example TCP Product: ZCZC MIATCPAT2 WTNT32 KNHC 240905 TCPAT2 BULLETIN TROPICAL STORM DEBBY ADVISORY NUMBER 19 NATIONAL WEATHER SERVICE MIAMI FL 5 AM EDT THU AUG 24 2000 ...CORRECT CUBA PROVINCES UNDER WATCHES AND WARNINGS... ...DEBBY BARELY HANGING ON AS A TROPICAL STORM... A TROPICAL STORM WARNING IS IN EFFECT FOR THE NORTH COAST OF CUBA FOR THE PROVINCES OF GUANTANAMO...HOLGUIN...AND LAS TUNAS...BUT WILL LIKELY BE DISCONTINUED LATER TODAY. TROPICAL STORM WARNINGS ARE RECOMMENDED FOR THE SOUTH COAST OF CUBA FOR THE PROVINCES OF GRANMA AND SANTIAGO DE CUBA. A TROPICAL STORM WATCH REMAINS IN EFFECT FOR CUBA FOR THE PROVINCES OF CAMAGUEY...AND CIEGO DE AVILA. THIS WATCH COULD BE SHIFTED WESTWARD LATER TODAY. TROPICAL STORM WARNINGS FOR THE CENTRAL AND SOUTHEAST BAHAMAS WILL BE DISCONTINUED AT 6 AM AST. AT 5 AM EDT...0900Z...THE POORLY DEFINED CENTER OF TROPICAL STORM DEBBY WAS LOCATED NEAR LATITUDE 19.6 NORTH...LONGITUDE 75.9 WEST OR ABOUT 25 MILES...40 KM...SOUTH OF SANTIAGO DE CUBA IN SOUTHEASTERN CUBA. DEBBY IS MOVING TOWARD THE WEST NEAR 20 MPH...28 KM/HR...AND THIS GENERAL MOTION IS EXPECTED TO CONTINUE FOR THE NEXT 24 HOURS. MAXIMUM SUSTAINED WINDS ARE NEAR 40 MPH... 65 KM/HR...WITH HIGHER GUSTS. FURTHER WEAKENING IS POSSIBLE...AND DEBBY MAY BE DOWNGRADED TO A DEPRESSION LATER TODAY. TROPICAL STORM FORCE WINDS EXTEND OUTWARD UP TO 115 MILES ...185 KM TO THE NORTH OF THE CENTER. ESTIMATED MINIMUM CENTRAL PRESSURE IS 1011 MB...29.85 INCHES. STORM SURGE FLOODING OF 1 TO 3 FEET ABOVE NORMAL TIDE LEVELS...WITH DANGEROUS BATTERING WAVES...IS EXPECTED OVER PORTIONS OF THE WARNING AREAS. RAINFALL TOTALS OF 4 TO 6 INCHES AND AS HIGH AS 10 TO 15 INCHES OVER MOUNTAINOUS AREAS ARE ASSOCIATED WITH DEBBY. THESE RAINS COULD CAUSE LIFE-THREATENING FLASH FLOODS AND MUDSLIDES. HEAVY RAINS ARE CURRENTLY AFFECTING PORTIONS OF THE DOMINICAN REPUBLIC AND HAITI... AND ARE SPREADING INTO EASTERN CUBA. REPEATING THE 5 AM EDT POSITION...19.6 N... 75.9 W. MOVEMENT TOWARD...WEST NEAR 20 MPH. MAXIMUM SUSTAINED WINDS... 40 MPH. MINIMUM CENTRAL PRESSURE...1011 MB. AN INTERMEDIATE ADVISORY WILL BE ISSUED BY THE NATIONAL HURRICANE CENTER AT 8 AM EDT FOLLOWED BY THE NEXT COMPLETE ADVISORY AT 11 AM EDT. $$ NOTES ABOUT THE TCP FORMATTER: The TCP formatter uses several ways to find the center location depending on the wording: NORTH...LONGITUDE NORTH AND LONGITUDE NORTH LATITUDE AND DEBBY WAS LOCATED NEAR LATITUDE 19.6 NORTH...LONGITUDE 75.9 WEST 11.2 NORTH LATITUDE AND 38.3 WEST LONGITUDE and whether embedded newlines are in the phrase: NORTH AND LONGITUDE NORTH AND LONGITUDE The 'when' section not really searched for i.e. search words for 'when' from the config.tcp file are never used. The post processor (/home/CRS/bin/postpro.tcl) removes other ellipses (after English and before equivalent metric units): Times: AT 1 PM CDT...1800Z...THE CENTER OF TROPICAL STORM Speeds: BERYL IS MOVING TOWARD THE NORTHWEST NEAR 6 MPH... 9 KM/HR...AND Distances: ABOUT 175 MILES...280 KM...SOUTH-SOUTHEAST OF BROWNSVILLE Pressures: WAS 1009 MB...29.80 INCHES. APPENDIX C: NEARSHORE PRODUCT (NSH) CONFIGURATION The synopsis and outlook paragraphs are given a special UGC number. These must be entered for a specific site. Note: many of the UGCs for several sites are already set up in the config.nsh file for some of the sites that have already been contacted. FZUS53 KMQT 300242 NSHMQT NEARSHORE MARINE FORECAST NATIONAL WEATHER SERVICE MARQUETTE MI 942 PM EST SUN OCT 29 2000 FOR WATERS WITHIN FIVE NAUTICAL MILES OF SHORE LSZ241-LSZ242-LSZ243-301000- LAKE SUPERIOR...SAXON HARBOR TO ONTONAGON MI ONTONAGON TO UPPER ENTRANCE OF PORTAGE CANAL MI UPPER ENTRANCE OF PORTAGE CANAL TO MANITOU ISLAND MI .OVERNIGHT...SOUTHEAST WIND 5 TO 15 KNOTS. PARTLY CLOUDY. WAVES 1 TO 3 FEET. .MONDAY...SOUTHEAST WIND 10 TO 20 KNOTS. INCREASING CLOUDS. WAVES 1 TO 3 FEET. .MONDAY NIGHT...SOUTHEAST WIND 10 TO 20 KNOTS. MOSTLY CLOUDY. WAVES 1 TO 3 FEET. THIS IS THE LAST NEARSHORE MARINE FORECAST OF THE SEASON. NEARSHORE MARINE FORECASTS WILL RESUME IN APRIL 2001. $$ LSZ221-LSZ244-LSZ245-LSZ246-LSZ247-301000- MANITOU ISLAND TO LOWER ENTRANCE OF PORTAGE CANAL MI LOWER ENTRANCE OF PORTAGE CANAL...INCLUDING KEWEENAW BAY AND HURON BAY...TO THE HURON ISLANDS MI HURON ISLANDS TO MARQUETTE MI MARQUETTE TO GRAND MARAIS MI GRAND MARAIS TO WHITEFISH POINT MI .OVERNIGHT...SOUTHEAST WIND 5 TO 15 KNOTS. PARTLY CLOUDY. WAVES 1 TO 3 FEET. .MONDAY...SOUTHEAST WIND 10 TO 15 KNOTS. MOSTLY SUNNY. WAVES 1 TO 3 FEET. .MONDAY NIGHT...SOUTHEAST WIND 10 TO 20 KNOTS. PARTLY CLOUDY. WAVES 2 TO 4 FEET. THIS IS THE LAST NEARSHORE MARINE FORECAST OF THE SEASON. NEARSHORE MARINE FORECASTS WILL RESUME IN APRIL 2001. $$ APPENDIX D: GREAT LAKES FORECAST (GLF) CONFIGURATION Initially, could set AREAS= ALL and use the subsection option to select which to extract for the final product. If there are several segments possible, use the AREAS= line to specify which to select. For example, if you need only one section from a neighboring site's product. Note: many of the UGCs for several sites are already set up in the config.glf file for some of the sites that have already been contacted. Synopsis: Specify whether you want the synopsis paragraph in the final product using the SYNOPSIS= Y or N option. Subsections: Specific text strings which identify the subsections found in the product must be entered on the SECTIONS= option line. If only some of the sections are to be included in the final product, the SELECT= option line must contain the specific text strings which identify the subsection. It should be listed in the SECTIONS= option. Configuration of GLF for MQT: MQT AREAS= ALL INTRO= HEADLINE= Y ZONE NAMES= N SYNOPSIS= Y SECTIONS= WEST HALF|EAST HALF|NORTH HALF|SOUTH HALF SELECT= EAST HALF|SOUTH HALF ISSUE TIME= N ACTIVE= A SEND TO CRS= N MQTEND Example: GLF Product from MQT: FZUS63 KMQT 111357 GLFLS LSZ260-112000- <---- Could put LSZ260 in AREAS= line LAKE SUPERIOR FORECAST NATIONAL WEATHER SERVICE MARQUETTE MI 957 AM EDT MON SEP 11 2000 FOR WATERS BEYOND FIVE NAUTICAL MILES FROM SHORE. .SYNOPSIS FOR 48 HOURS...A FRONT STRETCHING FROM SAULT STE MARIE TO GREEN BAY WILL TRACK NORTH TO CENTRAL LAKE SUPERIOR TODAY. A LOW PRESSURE CENTER OF 29.5 INCHES WILL MOVE FROM WISCONSIN TO JAMES BAY TONIGHT. THIS LOW WILL DRAG THE WEST END OF THE FRONT ACROSS LAKE SUPERIOR TONIGHT. WEST HALF <---- Subsection .THIS AFTERNOON...VARIABLE WIND 10 TO 15 KNOTS BECOMING WESTERLY 10 TO 20 KNOTS. SCATTERED SHOWERS AND THUNDERSTORMS DEVELOPING LATE. .TONIGHT...NORTHWEST WIND 15 TO 25 KNOTS. SCATTERED SHOWERS AND THUNDERSTORMS THROUGH MIDNIGHT. WAVES BUILDING TO 5 TO 8 FEET. .TUESDAY...NORTHWEST WIND 10 TO 20 KNOTS BECOMING WEST. WAVES 4 TO 7 FEET. .OUTLOOK FOR WEDNESDAY THROUGH FRIDAY...WIND 25 KNOTS OR LESS. EAST HALF <---- Subsection .THIS AFTERNOON...SOUTH WIND 5 TO 15 KNOTS INCREASING TO 15 TO 25 KNOTS. SCATTERED SHOWERS AND THUNDERSTORMS DEVELOPING LATE. WAVES 1 TO 3 FEET BUILDING TO 3 TO 5 FEET. .TONIGHT...SOUTH WIND 15 TO 25 KNOTS VEERING NORTHWEST. SCATTERED SHOWERS AND THUNDERSTORMS. WAVES BUILDING TO 4 TO 6 FEET. .TUESDAY...NORTHWEST WIND 15 TO 25 KNOTS BECOMING WEST 10 TO 20 KNOTS. WAVES 5 TO 8 FEET. .OUTLOOK FOR WEDNESDAY THROUGH FRIDAY...WIND 25 KNOTS OR LESS. $$ LSZ261-112000- MAFOR 1115/ SUPERIOR WEST 1/2 11910 12620 14730 11720 SCATTERED SHOWERS AND THUNDERSTORMS LATE THIS AFTERNOON THROUGH MIDNIGHT. 210103 210204. $$ APPENDIX E: TABULAR DATA TAB FORMATTER The tabular data formatter extracts data from a table in the product. The text in front of the table is ignored since a keyword is given to mark the start of the table; it must appear in the column headings line. The columns of data must have a clearly defined headings which consists of one or two lines with column headers separated by at least two spaces. Two spaces distinguishes two headings from the heading itself which could consist of words separated by a single space. The data must be below each header and not go past the next column's header. STATION MAX MIN PCPN SNOW Two spaces between each DEPTH Second line of headings GOODLAND WSO 100 57 GOODLAND CITY 101 57 0.000 PCPN up to the SNOW GOODLAN 19SW 100 56 SAINT FRANCIS 103 Missing values SELDEN 60 Missing values SHARON SPRINGS 102 59 0.000 0 SNOW DEPTH well past Data values can be missing. Blank lines in the table will be skipped. Separator lines containing --- or *** will be ignored. Data consists of lines containing at least one number. Data lines with just text will be considered a comment and be ignored. If two non-data lines occur in succession, it is interpreted as the end of the table since it usually is more text in the product. Tabular Data Rules: The VARIABLE option identifies the column labels in the single-line header. Labels in the VARIABLE lines are separated by the | character. The labels in the product must be separated by at least two spaces. The KEYWORD option must uniquely identify the column label line in the product. Data must not extend into the first column of the next column's data. Two consecutive lines without numeric data is used to identify the end of the table. Lines can be selected from the table and put in the product. The narrative must contain the exact match to the column labels. Normal form for text: variable and text and comma (,). At STATION, the max was MAX, and min MIN. Can change from the standard form to make it sound better: At STATION, the high and low were MAX and MIN. How to fix the product so that it will be parsed correctly At least two spaces between column headings. Example of fixing the column header: CITY SKY/WX TMP DP RH WIND PRES REMARKS GOODLAND KS CLEAR 57 36 45 NW12 29.87R HILL CITY KS CLEAR 67 48 50 SW7 29.76R Change the spacing of the labels in the column header line as follows: CITY SKY/WX TMP DP RH WIND PRES REMARKS GOODLAND KS CLEAR 57 36 45 NW12 29.87R HILL CITY KS CLEAR 67 48 50 SW7 29.76R Note: there at least two spaces between the labels: TMP and DP, and RH and WIND. The data need not be changed in the above. The two space rule allows for more than one word in a label. SNOW DEPTH PRECIP Options in the config.tab file: I. VARIABLES= list of all of the column header names of the data separated by '|' if there is more than one. Example: VARIABLES= LOCATION|WIND|GUSTS J. KEYWORD= Word or words that uniquely identifies the column header line in a data table. Example: KEYWORD= LOCATION K. SEPARATOR= If blank, two spaces will be used to find the column header names for the data. If a specific charaacter or characters are used to separate the columns in the column header line, enter it here. Example: for LOCATION /WIND /GUSTS SEPARATOR= / L. SELECT= Lines in the table that will be selected. If all of the lines should be included, leave this option blank. Otherwise, enter word(s) which will uniquely identify the line to select to be included in the product. If a word appears in two lines, to specify each uniquely add more characters. Example: DUCK DUCK TO CAPE MAY DUCK COE PIER SELECT= DUCK ...DUCK COE PIER In the select line, two spaces after the first identifies it as the the first line above. The second entry in the select line selects the tird table line. M. NARRATIVE= Text with the data variables that will be substituted 'in the blanks'. If data is missing, the phrase which contains the variable will NOT be included. If no data is available in a table line, the line will not be formatted. A 'phrase' is defined as text back from the variable name to the last COMMA and forward to but NOT including a comma or period or the end of the line. In the following example, there are two phrases: At LOCATION, the wind was WIND knots, water temperature was TEMP. At LOCATION[, the wind was WIND knots][, water temperature was TEMP]. Sample MMT Tabular Data Product for GLD: KSZ101-080717- WEATHER RADIO TEMPERATURE AND PRECIPITATION REPORT NATIONAL WEATHER SERVICE GOODLAND KS 753 AM MDT THU SEP 07 2000 THE FOLLOWING ARE TEMPERATURE AND PRECIPITATION REPORTS FOR NORTHWEST KANSAS FOR THE 24 HOUR PERIOD ENDING AT 7 AM LOCAL TIME TODAY. THE MAXIMUM TEMPERATURE IS FOR THE PREVIOUS DAY. STATION MAX MIN PCPN SNOW DEPTH ------------------------------------------------------- ATWOOD 2SW 103 60 BREWSTER 4W 104 55 COLBY 1SW 103 58 GOODLAND WSO 100 57 GOODLAND CITY 101 57 0.000 GOODLAN 19SW 100 56 HOXIE 103 64 0.000 MCDONALD 102 59 OAKLEY 4W 105 61 OBERLIN 105 66 0.000 QUINTER 103 64 RUSSEL SPRINGS 3N 105 62 SAINT FRANCIS 103 SELDEN 60 SHARON SPRINGS 102 59 0.000 0 WALLACE 2S 101 59 ******************************************************** Configuration file for the MMT Tabular Data (TAB) MMT product for GLD PROCESS= Y OLD PRODUCT CHECK= N GLD AREAS= KSZ100 DURATION= 1200 INTRO= HEADLINE= N ISSUE TIME= N CRSID= VARIABLES= STATION|MAX|MIN|PCPN|SNOW DEPTH KEYWORD= STATION SEPARATOR= SELECT= NARRATIVE= At STATION, the max and min were MAX and MIN. ACTIVE= A SEND TO CRS= N GLDEND Tabular Data OMR Product from BOS: OTHER MARINE REPORTS NATIONAL WEATHER SERVICE TAUNTON MA 250 PM EST THU JAN 4 2001 TIME LOCATION WINDS SEAS 1440 BLOCK ISLAND SOUND W 18 2 $$ Configuration Section for BOS: BOS AREAS= MAZ101 DURATION= 1200 INTRO= HEADLINE= N ISSUE TIME= N CRSID= VARIABLES= TIME|LOCATION|WINDS|SEAS KEYWORD= LOCATION SEPARATOR= SELECT= NARRATIVE= At LOCATION, wind was WINDS, and seas were SEAS. ACTIVE= A SEND TO CRS= N BOSEND Tabular Data Product OMR for NYC: OTHER MARINE REPORTS NATIONAL WEATHER SERVICE NEW YORK NY 412 AM EST FRI JAN 5 2001 LOCATION TIME WX VSBY WIND SEAS TEMP PRES (MI) (KT) (FT) (F) (IN) PLUM ISLAND 09Z CLDY 10 340/10 1-2 32 29.90 $$ #Configuration File Section for NYC NYC AREAS= NYZ101 DURATION= 1200 INTRO= HEADLINE= N ISSUE TIME= N CRSID= NYCOMRNYC VARIABLES= LOCATION|TIME|WX|VSBY|WIND|SEAS|TEMP|PRES KEYWORD= LOCATION SEPARATOR= SELECT= NARRATIVE= At LOCATION, conditions were WX, wind WIND, seas were SEAS, temperature TEMP. ACTIVE= A SEND TO CRS= N NYCEND APPENDIX F: VERTICAL TABLE DATA PRODUCTS Vertical Tabular Data OMR Product for Gray ME GYX: SXUS81 KGYX 111544 OMRPWM OTHER MARINE REPORTS NATIONAL WEATHER SERVICE GRAY ME 1144 EDT WED OCT 11 2000 LOCATION: MONHEGAN ISLAND WIND: WNW 18 MPH GUSTS TO 25 MPH SKY: PARTLY CLOUDY VISIBILITY: 7 MILES BAROMETER 29.86 INCHES AND RISING TEMPERATURE: 53 F #This is the configuration file for the GYX TBV product GYX AREAS= MEZ101 DURATION= 1200 INTRO= HEADLINE= Y ISSUE TIME= N VARIABLES= LOCATION...WIND...SKY...VISIBILITY...BAROMETER...TEMPERATURE KEYWORD= LOCATION SEPARATOR= SELECT= ACTIVE= A NARRATIVE= At LOCATION, the wind was WIND, sky SKY, visibility VISIBILITY, temperature was TEMPERATURE. SEND TO CRS= N SUBHEADER= N GYXEND Vertical Tabular Product for Philadelphia PHL: SXUS81 KPHI 081927 OMRPHL COASTAL OBSERVATIONS NATIONAL WEATHER SERVICE MT HOLLY NJ 227 PM EST WED MAR 8 2000 N : CAPE MAY - LEWES FERRY P : MOUTH OF DELAWARE BAY T : 225 PM EST W : E 5 - 10 KT S : 1 FT V : 8 - 10 NM K : MOSTLY CLEAR A : 66 DEG F WT: 46 DEG F X : R : 30.02 INCHES AND FALLING #This is the configuration file for the PHL TBV product PHL AREAS= PAZ101 DURATION= 1200 INTRO= HEADLINE= N ISSUE TIME= N VARIABLES= N ...P ...T ...W ...S ...V ...K ...A ...WT...X ...R KEYWORD= N SEPARATOR= SELECT= ACTIVE= A NARRATIVE= At N , wind W knots, seas S , conditions K , visibility V , air temp A . SEND TO CRS= N SUBHEADER= N PHLEND APPENDIX G: COMPLETELY DISSECTED CAFE FORMATTER PARTS OF A TYPICAL PRODUCT STORED IN THE INFORMIX DATABASE: WMO Header AATTnn KOFC DDHHMM RWUS42 KSLC 162216 Effective time Message Type Office FLSSLC UGC Line: UGC codes separated by - for single code > for range ST State ID Z or C Zone or County indicator nnn Zone or County number STZ001>003 UGC Range means STZ001-STZ002-STZ003 Date time DDHHMM- Expiration Day Hour and Minute Mass News Dissemination Block Message type Weather Service Office Issuance line 415 PM MDT THU SEP 16 2000 Sometimes the time zone string is not present 415 PM THU SEP 16 2000 Sometimes a second time zone is included inside parens 415 PM MDT (315 PM PDT) THU SEP 16 2000 ...Headlines... Leading and trailing ellipses Could be wrapped on several lines Could have several (up to 4) headlines Message Paragraphs Usually separated by double spaces End of Product Indicator $$ Sometimes NNNN or && or forecasters name is used FLASH FLOOD STATEMENT EXAMPLE - OKCFLSOKC RWUS42 KSLC 162216 FLSSLC UTC047-162245- FLASH FLOOD STATEMENT NATIONAL WEATHER SERVICE SALT LAKE CITY UT 415 PM MDT THU SEP 16 2000 ...FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY EXPIRING... THE FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY IS BEING ALLOWED TO EXPIRE. THE HEAVY RAINS OVER THE AREA HAVE ENDED. ADDITIONAL SHOWERS ARE EXPECTED TO MOVE ACROSS THIS AREA THROUGH EARLY EVENING. THIS MAY KEEP HIGHER THAN NORMAL FLOWS IN THE SMALL STREAMS IN EXTREME NORTHEAST IRON COUNTY THROUGH THE EVENING HOURS. $$ WHAT THE FORMATTER CODE DOES 1. All Tcl scripts begin with the execution of the tclsh program: #!/usr/local/tcl/bin/tclsh #Flash Flood Statement formatter 2. Read product with the UGC range codes expanded from: /home/CRS/FFS/out.txt #READ THE MODIFIED FFS FORECAST WORKFILE INTO STRING...FFSTATE set ffstate [read [open /home/CRS/FFS/out.txt r]] 3. Open the debugging file in the formatter directory: #OPEN DEBUG FILE set debug [open ./debug.txt w] 4. Remove the WMO header so that the DDHHMM will not be found when looking for the year in the issuance line. WMO header: RWUS42 KSLC 162216 Issuance line: 415 PM MDT THU SEP 16 2000 The issuance year is searched for by looking for _200[0-9] but this can match the DDHHMM of the WMO header when the UTC date and time is the combination for the 20th of the month and UTC time is between midnight and 9am: RWUS42 KSLC 200000 RWUS42 KSLC 2001mm ... RWUS42 KSLC 2009mm #TRIM OFF WMO HEADER set a [regexp -- {([\ ][0-9][0-9][0-9][0-9][0-9][0-9])} $ffstate ddhhmm] if {$a<=0} { puts $debug "No wmo header line" } else { set a [string first $ddhhmm $ffstate] set ffstate [string range $ffstate $a end] set a [string first \n $ffstate] if {$a==-1} { puts "ERROR: cannot locate newline after wmo header line" puts $debug "ERROR: cannot locate newline after wmo header line" return } set ffstate [string range $ffstate [expr $a+1] end] } 5. Get the AWIPS date and time which is stored in the file: /home/CRS/FFS/datim.txt placed there by the ffs.csh script. #GET AWIPS DATE AND TIME FOR MESSAGE HEADER set datetime [read [open /home/CRS/FFS/datim.txt]] set datetime [string trim $datetime] 6. Read the whole formatter configuration file: #READ IN CONFIG.FFS FILE set config [read [open /home/CRS/FFS/config.ffs r]] 7. Read the Office section argument 2 in the calling program's command line from the file: /home/CRS/FFS/begin.txt placed there by the ffs.csh script. set begin [read [open /home/CRS/FFS/begin.txt r]] set begin [string trim $begin] Note: trim off any white space so that just the three character office is left. 8. Check AREAS= line in the config.fls file. If it contains ALL, continue. Otherwise, get the UGCs in the line and one by one check if at least one is in the product. If no UGCs from the line are present, skip this product since it does not have any areas of interest with respect to this site. The screen will display 'XXX' and the formatter will quit when this happens. #CHECK FOR AREA CODE AND ESCAPE IF NOT FOUND set a [string first $begin $config] set arealine [string range $config $a end] set a [string first "AREAS=" $arealine] if {$a==-1} { puts "ERROR: Could not find AREAS= line in config.ffs $datetime"; close $debug;return} 9. Check for INTRO= which is the next line after the AREAS= line. set b [string first "INTRO" $arealine] if {$b==-1} { puts "ERROR: Could not find INTRO= line in config.ffs $datetime"; close $debug;return} set arealine [string range $arealine [expr $a+6] [expr $b-1]] 10. Check for the ellipse which should be just after ALL or the first UGC in the AREAS= line set c [string first "..." $arealine] 11. If there isn't any ellipse, then it might be the form: AREAS= ALL if {$c == -1} {set c [string first "\n" $arealine]} if {$c==-1} { puts "ERROR: Couldn't find an area entry line in config.ffs $datetime" close $debug;return} set areacode [string range $arealine 0 [expr $c-1]] set areacode [string trim $areacode]; 12. Now have either ALL or the first UGC code. arealine is the whole line. If ALL, then will use the UGC line in the LAC field. Otherwise, check which UGCs are actually in the product and put the list in the LAC field. #include in lac field only those zone/county codes that are in the product set swcodes 0 set area "" set laclist "" set flag "XXX" if {$areacode == "ALL"} {set flag "GO" } else { #change list with ellipses to a list regsub -all {\.\.\.} $arealine { } alist foreach ii $alist { puts $debug "Next pair|$ii|" #get first code of pair set aa [string first "|" $ii] if {$aa!=-1} { #zone|county or county|zone set ugc [string range $ii [expr $aa+1] [expr $aa+6]] set ii [string range $ii 0 [expr $aa-1]] set swcodes 1 puts $debug "Replace 1st with 2nd switch=|$swcodes|" } else {puts $debug "Pairs not present, switch=|$swcodes|"} if {[string first $ii $ffstate]!=-1} { set flag "GO" puts $debug "Code $ii in message" #add replace areas with 2nd not 1st codes if swcodes is set if {$swcodes==1} { #add 2nd code to lac field puts $debug "Replace 1st|$ii|with 2nd|$ugc|in LAC field" if {[string length $laclist]>0} {append laclist "-" $ugc } else {set laclist $ugc} } else { #no pairs just add code to lac field if {[string length $laclist]>0} {append laclist "-" $ii } else {set laclist $ii} } } else {puts $debug "Code $ii not in message"} } } if {$flag == "XXX"} { puts $flag puts $debug $flag close $debug;return } 13. Use UGCs from AREAS= which are actually in the product for the LAC field if {[string length $laclist]>0} {set area $laclist} puts $debug "laclist|$laclist|" 14. Read the AWIPS ID argument 1 in the calling program's command line from the file: /home/CRS/FFS/crsid.txt placed there by the ffs.csh script. It will be used as in the CRS ID field. #READ IN CRSID set crsid [read [open /home/CRS/FFS/crsid.txt r]] set crsid [string trim $crsid] 15. Get the section of the configuration file for the office between PPP and PPPEND #GET APPROPRIATE SECTION OF CONFIG.FFS set ending $begin append ending "END" set a [string first $begin\n $config] set b [string first $ending $config] if {$a==-1 || $b==-1} { puts "ERROR: can't find office '$begin' section in config.ffs $datetime" return} set config [string range $config $a [expr $b-1]] 16. Look for any text after the INTRO= in the config file. If present it will be used to introduct the message text. #GET INTRO LINE IF ANY FROM CONFIG FILE set a [string first "INTRO=" $config] if {$a==-1} { puts "ERROR: Could not find INTRO= line in config.ffs $datetime" close $debug;return} 17. Look for the HEADLINE= line which marks the next line after the intro text set b [string first "HEADLINE=" $config] if {$b==-1} { puts $debug "ERROR: Could not find end of INTRO line in config.ffs"; puts $datetime";close $debug;return} set intro [string range $config [expr $a+6] [expr $b-1]] set intro [string trim $intro] #append space only if intro is present if {[string length $intro]>0} {append intro " "} 18. Get headline and issue time codes #GET HEADLINE CODE set headcode [string range $config [expr $b+9] [expr $b+11]] set headcode [string trim $headcode] #GET ISSUE TIME CODE set a [string first "ISSUE TIME=" $config] if {$a==-1} { puts "ERROR: Could not find ISSUE TIME= line in config.ffs $datetime" close $debug;return} set isscode [string range $config [expr $a+11] [expr $a+13]] set isscode [string trim $isscode]; 19. Get CRSID if any so that this will be placed in the CRS ID field instead of the default AWIPS ID from the command line (and the product stored in the Informix database). #GET CRSID IF ANY set a [string first "CRSID=" $config] if {$a==-1} { puts $debug "ERROR: Could not find CRSID= line in config.ffs $datetime" close $debug;return} set newid [string range $config [expr $a+6] end] set a [string first \n $newid] if {$a==-1} {puts "ERROR: could not find end of CRSID= line";return} set newid [string range $newid 0 [expr $a-1]] set newid [string trim $newid] set newid [string toupper $newid] puts $debug "new crsid=$newid" if {[string length $newid]>0} { set crsid $newid puts $debug "Changing CRS ID to |$newid|" } 20. Get the ACTIVE flag, default is 'A'. Later 'C' for concatenated voice. #GET ACTIVE FLAG CODE set a [string first "ACTIVE=" $config] if {$a==-1} { puts "ERROR: Can't find ACTIVE= line in config.ffs file $datetime" close $debug;return} set active [string range $config [expr $a+7] [expr $a+9]] set active [string trim $active] 21. Get the expiration times for the day hour and minute from the end of the UGC line (just before the trailing -). The SLC code had to be refined since the UGC line is often wrapped and the first - nl is not the ddhhmm- at the end of the UGC line. #GET EXPIRATION DATE AND TIME FROM PRODUCT #fix for split ugc line set a [regexp -- {([0-9][0-9][0-9][0-9][0-9][0-9][-])} $ffstate ddhhmm] if {$a!=1} {puts "ERROR: finding end of UGC line";return} set a [string first $ddhhmm $ffstate] set b [expr $a + 5] set exdate [string range $ffstate $a $b] 22. Break out the expiration day, hour and minute from the UGC line time set da1 [string range $exdate 0 1] set hr1 [string range $exdate 2 3] set mn1 [string range $exdate 4 5] 23. Get the year, month and day from the AWIPS UTC time #GET AWIPS DATE AND TIME FOR MESSAGE HEADER set yr [string range $datetime 0 1] set mo [string range $datetime 2 3] set da [string range $datetime 4 5] 24. 'Convert' from leading 0 in strings to integers for comparisons # SET EXPIRATION MONTH AND YEAR TO INTEGERS FOR POSSIBLE FUTURE ADDITIONS if {[string range $mo 0 0]=="0"} {set mo [string range $mo 1 1]} set mo1 $mo if {[string range $yr 0 0]=="0"} {set yr [string range $yr 1 1]} set yr1 $yr 25. If product UGC day is less than current time AWIPS day, then make expiration month next month. If the next month becomes 13, make it Jan and increment the year. If the year rolls into the next century, correct it so that just the last two digits are placed in the YY part of the expiration time. Combine all parts into the one expiration time expression: YYDDMMhhmm #CK TO SEE IF DAY SHOULD BE ADDED TO EXPIRATION AND CHANGE MO AND YR AS NEEDED if {$da1 < $da} {set mo1 [expr $mo1+1]} if {$mo1=="13"} {set mo1 "1"; set yr1 [expr $yr1+1]} if {$yr1 > "99"} {set yr1 [expr $yr1-100]} if {$mo1 < "10"} {set mo2 "0"; append mo2 $mo1; set mo1 $mo2} if {$yr1 < "10"} {set yr2 "0"; append yr2 $yr1; set yr1 $yr2} #COMBINE EXPIRATION DATE VARIABLE set exdate $yr1 append exdate $mo1 append exdate $da1 append exdate $hr1 append exdate $mn1 26. Find UGC line. Had to enhance SLC original code since the - does not always mark the end of the UGC line for products in which the UGC line wrapped: IDZ024-IDZ025-UTZ001-UTZ002-UTZ003-UTZ004-UTZ005-UTZ006-UTZ007-UTZ008- UTZ009-UTZ010-UTZ011-UTZ012-UTZ013-UTZ014-UTZ015-UTZ016-UTZ017-UTZ018- UTZ019-UTZ020-UTZ021-WYZ021-091900- In the above, the rest of the UGC line would be cut off if just the first dash is used. In the following enhanced search, regexp is used to specifically find the START of the UGC line which has the form: [A-Z][A=Z] for the state ID [CZ] for the County or Zone indicator [0-9][0-9][0-9] for exactly 3 numeric digits Then it looks for the possibility that the UGC line is wrapped. #GET LISTENING AREA FROM FFSTATE STRING #set a [string first "-" $ffstate] #set a [expr $a-6] #set area [string range $ffstate $a $a1] #area set from config if area ugcs are given if {[string length $area]==0} { #GET LISTENING AREA FROM PRODUCT STRING if {[regexp {[A-Z][A-Z][CZ][0-9][0-9][0-9]} $ffstate xxx]>0} { set a [string first $xxx $ffstate] set area [string range $ffstate $a end] #better: may be on several lines! set a [regexp -- {[0-9][0-9][0-9][0-9][0-9][0-9][-]} $area ddhhmm] if {$a==0} {puts "ERROR: can't find ddhhmm in UGC line";close $debug;return} set a [string first $ddhhmm $area] set area [string range $area 0 [expr $a-1]] #fix possible split ugc line while {1} { set aa [string first \n $area] if {$aa==-1} {break} set part2 [string range $area [expr $aa+1] end] set area [string range $area 0 [expr $aa-1]] append area $part2 } #check for dash before ddhhmm set a [string last "-" $area] if {$a==-1} { puts "ERROR: no dash before ddhhmm in UGC line" return } set area [string range $area 0 [expr $a-1]] } else { puts "ERROR: no UGC present in product" return } } else { puts $debug "Using area from areas line found in product" } puts $debug "area|$area|" 27. Get and process issuance line in main product. For some products, have issuance lines in segments but this is not a segmented product so there should only be one issuance line found. Note: Cannot just look for ' 200' since often the year is part of the product. #GET AND PROCESS ISSUE DATE AND TIME #more refined checking set a [regexp {[ ]200[0-9]} $ffstate year] if {$a<=0} {set isstime "" } else { puts $debug "year in issuance line|$year|" set a [string first $year $ffstate] set isstime [string range $ffstate 0 $a]; #go back to last newline, should then have the issuance line set a [string last "\n" $isstime]; set isstime [string range $isstime [expr $a+1] end]; puts $debug "isstime|$isstime|" set a [string first "AM " $isstime]; if {$a==-1} {set a [string first "PM " $isstime]}; if {$a==-1} {puts "ERROR: no AM or PM in issuance line";close $debug;return} set isstime0 [string range $isstime 0 [expr $a+2]] puts $debug "isstime0|$isstime0|" set isstime [string range $isstime [expr $a+3] end] #more carefull checking for time zone string, some do not have it set aa [regexp {[A-Z][SD]T} $isstime tz] if {$aa<=0} { #timezone not present #caution: assumes day is next set daycode [string range $isstime 0 2] set a 3 } else { #get it set aa [string first $tz $isstime] #caution must match regexp above append isstime0 [string range $isstime 0 3] #caution: assumes that there isn't another time zone expr inside () set daycode [string range $isstime [expr $aa+4] [expr $aa+6]] set a 7 } set day "" if {$daycode == "MON" || $daycode == "FRI" || $daycode == "SUN"} { set day $daycode;append day "DAY"} if {$daycode == "TUE"} {set day "TUESDAY"} if {$daycode == "WED"} {set day "WEDNESDAY"} if {$daycode == "THU"} {set day "THURSDAY"} if {$daycode == "SAT"} {set day "SATURDAY"} set isstime1 "ISSUED AT " append isstime1 $isstime0 set isstime [string range $isstime [expr $a] end] append isstime1 $day append isstime1 $isstime set isstime1 [string trim $isstime1] set isstime $isstime1 append isstime ".\n" puts $debug "isstime|$isstime|" } if {$isscode != "Y"} {set isstime ""} 28. Get and remove headline ellipses for up to 4 headlines. Cautions: Often in products have subheadlines which confuses this code. See more rigorous checks for headlines code. #PROCESS HEADLINES #refined headline defn:NOT just text btn nl... and ...nl but ck for paragraphs set headlines "" set ffstate1 $ffstate set flg 0 #caution: finds only 4 headlines and also anywhere in product #caution: discards any text before the last headline! for {set j 1} {$j <= 4} {incr j} { set a [string first "\n..." $ffstate1] if {$a==-1} {set a [string first " ..." $ffstate1]} set flg [expr $flg+1] if {$a==-1} {break} set a [expr $a+4] set b [string first "...\n" $ffstate1] if {$b==-1} {set b [string first "... \n" $ffstate1]} if {$b==-1} {break} #fix for ellipses from conversions or line wraps if {$a>$b} {puts $debug "a=$a to b=$b";break} set temp [string range $ffstate1 $a $b] #check for end of paragraph in between, if so then not a headline set c [string first \n\n $temp] puts $debug "a=$a to b=$b c=[expr $c+$a]" if {$c==-1} { append headlines [string range $ffstate1 $a [expr $b-1]] #make sure that no trailing periods are present set headlines [string trimright $headlines .] #now append a period append headlines ".\n" } else {puts $debug "eop before ...nl"} puts $debug "headlines|$headlines|" set ffstate1 [string range $ffstate1 [expr $b+3] end] } if {$headcode != "Y"} {set headlines ""}; puts $debug "Processed headlines|$headlines|" #CAUTION: discards anything before the last headline! set ffstate $ffstate1 29. Delete from start of Informix product to end of issuance line #TRIM FFSTATE AS NEEDED #flg is 1 only if there was a single headline if {$flg == 1} { set a [string first " 200" $ffstate]; if {$a==-1} {set a [string first " 201" $ffstate]}; set a [expr $a+6] } else {set a 0} 30. Delete from various end of product markers. Try in the following order: LAT... $$ Normal end of product marker && Sometimes found in products NNNN Legacy AFOS end of product marker Otherwise, use end of product. set b [string first "LAT..." $ffstate] if {$b == -1} {set b [string first "$$" $ffstate]} if {$b == -1} {set b [string first "&&" $ffstate]} if {$b == -1} {set b [string first "NNNN" $ffstate]} if {$b != -1} {set b [expr $b-1]} {set b end} set ffstate [string range $ffstate $a $b] puts $debug "trimmed product\n|$ffstate|" #need ck for single word without punctuation from the end ie forecaster 31. Remove lead ellipses at beginning of lines. Note: post processor does this? #REMOVE LEADING ELLIPSES IN TEXT BODY while {1} { set aa [string first "\n..." $ffstate] if {$aa==-1} {break} set part2 [string range $ffstate [expr $aa+4] end] set ffstate [string range $ffstate 0 $aa] append ffstate $part2 } puts $debug "Removed leading ellipses|$ffstate|" 32. Write CRS message header to finished product #CREATE MESSAGE HEADER append finish \x1b "aT_ENG" $crsid $datetime $datetime " " \ $active "D " $area "c" $exdate "\n\n" 33. Write formatted text to finished product append finish $intro $isstime "\n" $headlines $ffstate 34. Put CRS trailer Esc b on product append finish \x1b "b" 35. Write product back to calling C shell program ffs.csh: #OUTPUT FORMATED FFSTATE TO WORKFILE DESIGNATED IN UNIX BATCH FILE puts $finish 36. Write formatted product to debug file puts $debug $finish close $debug SAMPLE DEBUG OUTPUT FROM FLS FORMATTER FLS formatter Product OKCFLSOKC Office OKC County OKC047 in message new crsid= a=119 to b=181 c=118 headlines|FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY EXPIRING. | headlines|FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY EXPIRING. |flg=2| flstate1| THE FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY IS BEING ALLOWED TO EXPIRE. THE HEAVY RAINS OVER THE AREA HAVE ENDED. ADDITIONAL SHOWERS ARE EXPECTED TO MOVE ACROSS THIS AREA THROUGH EARLY EVENING. THIS MAY KEEP HIGHER THAN NORMAL FLOWS IN THE SMALL STREAMS IN EXTREME NORTHEAST IRON COUNTY THROUGH THE EVENING HOURS. $$ | a=0| aT_ENGOKCFLSOKC00020920060002092006 AD OKC047c0002162245 FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY EXPIRING. THE FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY IS BEING ALLOWED TO EXPIRE. THE HEAVY RAINS OVER THE AREA HAVE ENDED. ADDITIONAL SHOWERS ARE EXPECTED TO MOVE ACROSS THIS AREA THROUGH EARLY EVENING. THIS MAY KEEP HIGHER THAN NORMAL FLOWS IN THE SMALL STREAMS IN EXTREME NORTHEAST IRON COUNTY THROUGH THE EVENING HOURS. b TCL SCRIPT FORMATTED FLS PRODUCT BEFORE POST-PROCESSING textout.txt ^[aT_ENGOKCFLSOKC00020920060002092006 AD OKC047c0002162245 FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY EXPIRING. THE FLASH FLOOD WARNING FOR EXTREME NORTHEAST IRON COUNTY IS BEING ALLOWED TO EXPIRE. THE HEAVY RAINS OVER THE AREA HAVE ENDED. ADDITIONAL SHOWERS ARE EXPECTED TO MOVE ACROSS THIS AREA THROUGH EARLY EVENING. THIS MAY KEEP HIGHER THAN NORMAL FLOWS IN THE SMALL STREAMS IN EXTREME NORTHEAST IRON COUNTY THROUGH THE EVENING HOURS. ^[b Reference: AFOS CRS PRODUCT SPECIFICATION Example: Field: Description: A Esc a CRS Leadin ASCII Esc lowercase a B T_ENG T_ENG English Text Default in CAFE T_SPA Spanish Text D_ENG Digitized Voice in English D_SPA Digitized Voice in Spanish C_ENG Concatenated Voice in English C_ENG Concatenated Voice in Spanish C OKCFLSOKC CRS ID CCCNNNXXX NNN is product type CCC is typically issuing office XXX is often the transmitter mnemonic Usually command line argument 1 ./nwrnnn.csh CCCNNNXX OFC D 0002092006 Creation time YYMMDDHHMM Usually AWIPS UTC time E 0002082006 Effective time YYMMDDHHMM Usually AWIPS UTC time F ________ Periodicity MMDDHHMM Blank default in CAFE PERIOD= G A Active Flag: Active A Set by ACTIVE= A Inactive I SSO O Concatenated C H D Deposit Flag: Delete D Default in CAFE Save S I _ Confirm Flag: Confirm C Don't _ Default in CAFE J _ Interrupt Flag: Interrupt I INTERRUPT= I or I=Y Don't _ Default otherwise in CAFE K _ Alarm Flag: A 1050Hz,SAME ALARM= Y or A, A=Y or A _ No 1050/SAME Default in CAFE N No SAME For Warning Correction L RRR Message Replace Descriptor M N O STZnnn UGC codes STate id, Z or C, nnn code - separator for single code > separator for range P c End of UGC c Lowercase c indicator Q 0002162245 Expiration time YYMMDDHHMM Usually from UGC line R TEXT Message Text Formatted text S Esc b CRS trailer ASCII Esc lowercase b APPENDIX H: ZONE FORECAST (ZFP) AND EXTENDED (EXT) PRODUCTS The ZFP and EXT often read the same product in the Informix database. The ZFP can be made to extract just two or three periods. The EXT extracts the time periods after the .EXTENDED marker in the product. Note: Requirement from Corpus Christi for summary and full zone forecasts can be implemented as follows: Use the ZFP to extract just the first few periods, broadcast at all times Use the EXT to extract the extendeds but broadcast them starting at :15 past the hour, repeat every 30 minutes, for a duration of 2 hours. Only possible problem is that the extended could get scheduled before the summary by CRS. #This is the configuration file for the zone forecasts. PROCESS= Y OLD PRODUCT CHECK= N LEADIN WORDS= N BOS 3 1 BOXZFPCT (3) CTZ001...CTZ001...CTZ002...CTZ003...MAZ011...MAZ012 CTZ001...FORECAST FOR Connecticut and Massachusetts 2 BOXZFPMA1 (6) MAZ002...MAZ002...MAZ003...MAZ004...MAZ008...MAZ010...NHZ011 MAZ002...FORECAST FOR Massachusetts 2 3 BOXZFPMA2 (4) MAZ005...MAZ005...MAZ006...MAZ007...NHZ012 MAZ005...FORECAST FOR Massachusetts 3 ISSUE TIME= N HEADLINE= Y MAIN= Y SPOTS= N EXTENDED= B QUESTION MARKS= N PERIODICITY= 00 EFFECTIVE TIME= 00 ACTIVE= A SEND TO CRS= Y BOSEND Sample ZFP Product for BOS Configuration File: FPUS51 KBOX 061551 ZFPBOX ZONE FORECAST PRODUCT NATIONAL WEATHER SERVICE TAUNTON MA 1051 AM EST MON NOV 6 2000 CTZ002-CTZ003-MAZ011-MAZ012-070351- EASTERN HAMPDEN-HARTFORD-SOUTHERN WORCESTER-TOLLAND-WINDHAM- INCLUDING THE CITIES OF...HARTFORD...SPRINGFIELD...STAFFORD... WILLIMANTIC...WORCESTER 1051 AM EST MON NOV 6 2000 .THIS AFTERNOON...PARTLY SUNNY. HIGH IN THE LOWER 50S. NORTHWEST WIND 10 TO 20 MPH. .TONIGHT...PARTLY CLOUDY. LOW IN THE MID 30S. NORTH WIND AROUND 10 MPH. .TUESDAY...MOSTLY SUNNY. HIGH IN THE UPPER 50S. .EXTENDED FORECAST... .TUESDAY NIGHT...MOSTLY CLEAR. LOW IN THE UPPER 30S. .WEDNESDAY...PARTLY CLOUDY. HIGH IN THE LOWER 60S. .THURSDAY...PARTLY CLOUDY. A CHANCE OF SHOWERS LATE. LOW NEAR 40 AND HIGH IN THE UPPER 50S. .FRIDAY...PARTLY CLOUDY WITH A CHANCE OF SHOWERS. LOW IN THE UPPER 30S AND HIGH IN THE MID 50S. $$ MAZ002-MAZ003-MAZ004-MAZ008-MAZ009-MAZ010-MAZ011-NHZ011-070351- CHESHIRE-EASTERN FRANKLIN-EASTERN HAMPSHIRE-NORTHERN WORCESTER- WESTERN FRANKLIN-WESTERN HAMPDEN-WESTERN HAMPSHIRE- INCLUDING THE CITIES OF...BLANDFORD...CHESTERFIELD...FITCHBURG... GREENFIELD...KEENE...NORTHAMPTON...SHELBURNE 1051 AM EST MON NOV 6 2000 .THIS AFTERNOON...PARTLY CLOUDY WITH A CHANCE OF SPRINKLES. HIGH IN THE UPPER 40S. NORTHWEST WIND 10 TO 20 MPH. .TONIGHT...PARTLY CLOUDY. LOW IN THE LOWER 30S. NORTHWEST WIND AROUND 10 MPH. .TUESDAY...PARTLY SUNNY AND MILD. HIGH IN THE MID 50S. .EXTENDED FORECAST... .TUESDAY NIGHT...MOSTLY CLEAR. LOW IN THE UPPER 30S. .WEDNESDAY...PARTLY CLOUDY. HIGH IN THE LOWER 60S. .THURSDAY...PARTLY CLOUDY. A CHANCE OF SHOWERS LATE. LOW IN THE UPPER 30S AND HIGH IN THE UPPER 50S. .FRIDAY...PARTLY CLOUDY WITH A CHANCE OF SHOWERS. LOW IN THE MID 30S AND HIGH IN THE LOWER 50S. $$ Configuration Using Core Zones (OKC): OKC Configuration Uses Core Zones: ICWF Output with XNow corrections Transmitters are mapped to a single zone (county). ICWF produces zone 'groups' that do not usually map one-to-one to these transmitters since it is based on meteorological conditions and not geography. But usually all of the areas are mentioned and every one of the core zones are placed in the product. If there is special conditions somewhere in a county other than the core county, an SPS is issued for that county and region. OKC 8 1 OKCZFPPNC (1) OKZ008...OKZ008 OKZ008...THE FORECAST FOR PONCA CITY AND SURROUNDING AREA. 2 OKCZFPOKC (1) OKZ025...OKZ025 OKZ025...THE FORECAST FOR OKLAHOMA CITY AND SURROUNDING AREA. 3 OKCZFPCSM (1) OKZ016...OKZ016 UTZ016...THE FORECAST FOR CLINTON AND SURROUNDING AREA. 4 OKCZFPSPS (1) TXZ086...TXZ086 TXZ086...THE FORECAST FOR WICHITA FALLS AND SURROUNDING AREA. 5 OKCZFPEND (1) OKZ012...OKZ012 OKZ012...THE FORECAST FOR ENID AND SURROUNDING AREA. 6 OKCZFPWWR (1) OKZ010...OKZ010 OKZ010...THE FORECAST FOR WOODWARD AND SURROUNDING AREA. 7 OKCZFPLAW (1) OKZ038...OKZ038 OKZ038...THE FORECAST FOR LAWTON AND SURROUNDING AREA. 8 OKCZFPLTS (1) OKZ036...OKZ036 OKZ036...THE FORECAST FOR ALTUS AND SURROUNDING AREA. ISSUE TIME= N HEADLINE= Y MAIN= Y SPOTS= N EXTENDED= B QUESTION MARKS= N PERIODICITY= 0000 EFFECTIVE TIME= 00 ACTIVE= A SEND TO CRS= Y OKCEND /// Two often different issues when dealing with the ZFP: One is the list of UGCs, the other is the list of zone names. One way of configuring the ZFP is to just place AREAS= ALL and let all of the names be said in the product. Another way is to list the specific zones which map to the particular transmitters and the requirement is to just list those matches of the zones in the product with the zones in the lists. Further though, the sites want to use a name for a combination of names. This is the purpose of the zone combination UGCs and names after the single zone list. Problem: need an exact match to be able to use the combo name. Fixed in NOWX formatter, find the longest combination UGCs in the product and use the combo name for that list or lists. EXAMPLE OF ZFP SEGMENTED ZONE FORECAST PRODUCT WITH ONLY ONE SEGMENT FPUS54 KOUN 282003 ZFPOKC ZONE FORECAST...UPDATED NATIONAL WEATHER SERVICE NORMAN OK 200 PM CST MON FEB 28 2000 OKZ004-OKZ005-OKZ009-OKZ010-282330- ELLIS OK-HARPER OK-WOODS OK-WOODWARD OK- INCLUDING THE CITY OF...WOODWARD OK 200 PM CST MON FEB 28 2000 ...WIND ADVISORY THIS AFTERNOON... .THIS AFTERNOON...PARTLY CLOUDY AND VERY WINDY. HIGH IN THE LOWER 70S. SOUTH WIND 25 TO 35 MPH WITH OCCASIONAL GUSTS OVER 40 MPH. .TONIGHT...PARTLY CLOUDY. A 20 PERCENT CHANCE OF SHOWERS AFTER MIDNIGHT. WINDY. LOW IN THE MID 40S. SOUTH WIND 15 TO 25 MPH AND GUSTY. .TUESDAY...PARTLY CLOUDY. HIGH IN THE MID 60S. SOUTHWEST WIND 15 TO 25 MPH SHIFTING TO THE NORTHWEST IN THE MORNING AND DECREASING DURING THE AFTERNOON. .TUESDAY NIGHT...PARTLY CLOUDY. LOW IN THE LOWER 30S. .EXTENDED FORECAST... .WEDNESDAY...PARTLY CLOUDY. A CHANCE OF SHOWERS AND THUNDERSTORMS LATE. HIGH IN THE MID 60S. .THURSDAY...MOSTLY CLOUDY WITH A GOOD CHANCE OF SHOWERS AND THUNDERSTORMS. LOW IN THE LOWER 40S AND HIGH NEAR 60. .FRIDAY...PARTLY CLOUDY. LOW IN THE MID 30S AND HIGH IN THE LOWER 60S. $$ PARTS OF THE ZONE FORECAST ZFP PRODUCT 1. WMO Header: FPUS54 KOUN 282003 ddhhmm at end of header ZFPOKC 2. MND Mass News Disseminator Block BEFORE UGC line ZONE FORECAST...UPDATED NATIONAL WEATHER SERVICE NORMAN OK 200 PM CST MON FEB 28 2000 3. UGC Line followed by zone name list and another segment issuance line OKZ004-OKZ005-OKZ009-OKZ010-282330- ELLIS OK-HARPER OK-WOODS OK-WOODWARD OK- INCLUDING THE CITY OF...WOODWARD OK 200 PM CST MON FEB 28 2000 UGC codes are expanded by /home/CRS/bin/codeexp.txt which reads: ./home/CRS/NNN/temp.txt and writes to: ./home/CRS/NNN/out.txt The date-time at the end of the UGC line is often used for the expiration time with the year and month components extracted from the AWIPS UTC time. Zone names are separated with dashes With ISSUE TIME= Y, the issue time is included in the product: ISSUED AT 2:00 PM CST MONDAY FEB 28. Issuance Line Variations: Sometimes the timezone expression is not present: 200 PM MON FEB 28 2000 Sometimes another time and timezone expression is included in parentheses: 200 PM CST (100 PM MST) MON FEB 28 2000 4. Headline ...WIND ADVISORY THIS AFTERNOON... The formatter extracts the headlines (up to 4) and removes the ellipses. 5. Two to four periods with leading dot before day or part of day .THIS AFTERNOON...PARTLY CLOUDY AND VERY WINDY. HIGH IN THE LOWER 70S. SOUTH WIND 25 TO 35 MPH WITH OCCASIONAL GUSTS OVER 40 MPH. .TONIGHT...PARTLY CLOUDY. A 20 PERCENT CHANCE OF SHOWERS AFTER MIDNIGHT. WINDY. LOW IN THE MID 40S. SOUTH WIND 15 TO 25 MPH AND GUSTY. .TUESDAY...PARTLY CLOUDY. HIGH IN THE MID 60S. SOUTHWEST WIND 15 TO 25 MPH SHIFTING TO THE NORTHWEST IN THE MORNING AND DECREASING DURING THE AFTERNOON. .TUESDAY NIGHT...PARTLY CLOUDY. LOW IN THE LOWER 30S. 6. Extended period with leadin for extended forecast .EXTENDED FORECAST... .WEDNESDAY...PARTLY CLOUDY. A CHANCE OF SHOWERS AND THUNDERSTORMS LATE. HIGH IN THE MID 60S. .THURSDAY...MOSTLY CLOUDY WITH A GOOD CHANCE OF SHOWERS AND THUNDERSTORMS. LOW IN THE LOWER 40S AND HIGH NEAR 60. .FRIDAY...PARTLY CLOUDY. LOW IN THE MID 30S AND HIGH IN THE LOWER 60S. 7. End of product indicator with extra text afterward $$ 24 APPENDIX I: SHORT TERM FORECAST (NOW) This segmented product is divided up into separate product and the the UGCs that head each segment are placed in the LAC field of the CRS message header. CRS will determine how to map the LACs to the transmitters. FPUS71 KBUF 051518 NOWBUF SHORT TERM FORECAST NATIONAL WEATHER SERVICE BUFFALO NY 1115 AM EDT THU OCT 5 2000 NYZ001-NYZ002-NYZ010-NYZ011-NYZ012-051700- ----+ NIAGARA FRONTIER...INCLUDING BATAVIA...BUFFALO...NIAGARA FALLS | | .NOW... | RAIN OVER THE NIAGARA PENINSULA WILL MOVE EAST REACHING BUFFALO AND | Seg 1 NIAGARA FALLS AROUND 1230 PM AND BATAVIA ABOUT 130 PM. THE RAIN WILL | THEN CONTINUE ON AND OFF THROUGH THE AFTERNOON. | $$ ----+ NYZ019-NYZ020-NYZ021-051700- ----+ WESTERN SOUTHERN TIER...INCLUDING JAMESTOWN...OLEAN...WELLSVILLE | | Seg 2 .NOW... | RAIN WILL CONTINUE THROUGH THE AFTERNOON. | $$ ----+ Notes: 1. WMO header followed immediately with MND 2. Segment leadin is .NOW... 3. Segment trailer is $$ 4. Original NOW formatter from SLC breaks product up into the segments. UGCs are as they appear in the segment and therefore are placed in the LAC. Zone names are either all included or not. Cannot specify what CRS IDs are used. Defaults are: CCCNOWNW1, CCCNOWNW2, etc. 5. NOWX tries to: Allow different CRS IDs like the ZFP Allow just those UGCs that are in the product to be placed in the LAC. Tries to use zone combination names. Problem is that the individual single zone names must all be listed in the configuration file in order that they be included in the zone name list, when ZONE NAMES= Y. NOWX This differs from the NOW formatter in that separate products will be sent for the individual transmitters. APPENDIX J: Routine Weekly Test (RWT) CONFIGURATION A different test message can be sent to each transmitter by adding another section to the config.rwt file. #This is the configurations file for RWT - Required Weekly Test for 2 xmtrs PROCESS= Y SLC 2 1 ----- Transmitter 1 --- CRSID= SLCRWTSLC CODES= UTC001>009 PERIOD= 0000 ALARM= Y INTERRUPT= N REPEAT= 1 ACTIVE= A TEXT= THIS IS A TEST, OF THE NOAA WEATHER RADIO WARNING DEVICE. DURING POTENTIALLY DANGEROUS WEATHER SITUATIONS, SPECIALLY BUILT RECEIVERS, ARE AUTOMATICALLY ACTIVATED. SEND TO CRS= N 2 ----- Transmitter 2 --- CRSID= SLCRWTSL2 CODES= UTC011>019 PERIOD= 0000 ALARM= Y INTERRUPT= Y REPEAT= 1 ACTIVE= A TEXT= THIS IS A TEST OF THE NOAA WEATHER RADIO WARNING DEVICE FOR TRANSMITTER 2. DURING DANGEROUS WEATHER SITUATIONS, SPECIALLY BUILT RECEIVERS, ARE AUTOMATICALLY ACTIVATED, TO WARN OF THE IMPENDING HAZARD. SEND TO CRS= N SLCEND /// Note: Often a source of confusion: REPEAT= 1 to play at least once. It does not mean repeat once after playing or two times. REFERENCES 1. Tcl/Tk Programmer's Reference (Includes Tcl/Tk 8.2), Christopher Nelson, ISBN 0-07-212004-5, 2000 Valuable Tcl/Tk Reference with code snippet examples 2. Federal Information Processing Standards Publication 6-3 1979 December 15 Counties and County Equivalents of the States of the United States and the District of Columbia FIPS 6.3 UGC county codes - information is in: /home/CRS/bin/fips63.in 3. NOAA Weather Wire Service Weather Message Product Catalog Revision 94-01 October 1994 GTE Federal Systems Division, Chantilly VA 22021-3808 Zone forecast codes - information is in: /home/CRS/bin/zones.in CCC and NNN codes for AWIPS issued products. 4. CRS SOM for Build 6.4, May 2000, Appendix 2, AFOS Weather Message Format Specification