WXP version 5
Resource Reference

Resource: bull_file

Resource bull_file
Command Line -bf=filename
Environment Variable wxpbull
Default Value ingest.bul

The bulletin file is used by the ingest program to select and process products from various NWS data feeds.  The selection process is the same as is used by parse and the output of the selection process uses a similar mechanism to the file naming convention file.

This resource specifies the name of the bulletin file.  If a relative filename is used, the value of the file_path resource is prepended to the filename.  The default filename is "ingest.bul".  Often it is convenient to define a separate bulletin file for each data feed but this is not necessary.

Bulletin File Contents

The bulletin file consists of several lines, each defining a product to be selected.  There are three values listed on each line: the pattern to match, the action, and the output filename or command:

header [action] [command...]
header [action] [command...]

Here is a sample:

# Pattern        Action Filename          Header Filename
#
S[AP]             >>-15 %D/%h%m%d%y.sao
S[IMNS]           >>-05 %D/%h%m%d%y.syn
SD                >>+07 %D/%h%m%d%y.rad
...
F[^OT]            >>    @for_dat          @for_hdr
A                 >>    %D/%6h%m%d%y.sum  %D/hd%6h%m%d.sum
...
#
# Specific forecast products
#
FXUS01            >     %D/fore/48hr
...
FXUS06            >     %D/fore/10d_dsc
FPUS6_            >     %D/fore/30d
FPUS5_KIND        |     /usr/local/bin/parse - -ph=FPUS5_KIND -id=%%INZ029 -pa=dollar -of=%D/fore/laf_zone -me=none
FXUS07            >     %D/fore/30d_dsc
...
#
# HDS products
#
Y/M89             >>    %D/%12h%m%d%y.gbm
Y/M39G211         >>    %D/%12h%m%d%y.gbv
Y/M64G211         >>    %D/%12h%m%d%y.gbv

Pattern

Here is the simple pattern matching scheme:

. or ? match a single character
- or * match any character
[letters] match a character from the set.
[^letters] match any character except those from the set
(str1|str2...) match strings
_ underscore matches a space
/data match extra information

Short patterns such as "F" are the equivalent of "F*".  It will match on any pattern starting with "F".

Some example header strings are:

AB  Anything that starts with AB
S[AP] SA or SP
(W|AC|RG) Starts with W or AC or RG
F[^O] Anything that starts with F, second character NOT O
FQUS1_KIND Full header specification with spaces as underscores.
*_KIND  Wildcard match on any product that ends with KIND.

In some cases, it might be necessary to use product contents in selecting a product.  The ingest program does allow you to use the second line of a product in selecting a product.  For example, AFOS PILs are often listed on the second line.  To select the zone forecasts for Oklahoma, you can use the following pattern:

   /ZFPOKC

This also allows you to save HDS products based on their content rather than worrying about the header which often times can be misleading.  The syntax for this is:

/[Xvvv][Xvvv][Xvvv]...

Where X is:
M for model number
G for grid number
L for level type
H for level value
T for forecast time
V for variable number

For example, to save the ETA model, you can use "/M89".  To save the initialized field of the NGM model, use "/M39/G211/T0".

Action

The actions resemble standard Unix redirection symbols:

>> append to file with header
append same as above
> write to file with header, previous content overwritten
write same as above
# write to file without header, previous contents overwritten
file same as above
| pipe product to listed command
pipe same as above
@ run command when product complete
run same as above

By default, all products are stripped of control characters and generally cleaned up prior to writing to file.  There are a couple of exceptions.  First, if the product is a GRIB or BUFR product, it is assumed to contain binary data no stripping occurs.  Second, you can tell the ingest program to save the raw data by prepending a "R" to the action:

   R>>

When saving to the output filename, often you may want to offset the time slightly.  A good example of this is surface data where reports start streaming in up to 15 minutes before the top of the hour.  If you use the system clock to determine the filename, these early reports will get stuck in the previous hour's file.  A time offset in minutes can be appended to the action.  For example:

   >>-15   %D/%h%m%d%y.sao

will start saving data into the current hour's file starting 15 minutes prior to the hour.  It will stop saving data at 45 minutes past the hour.  In some cases as with model data, you may want this offset to be more than an hour.

Filename or Command

The last piece of information on each line is the filename or command (which depends on the action).  The filename of command is expanded from a set of wildcard characters.  These are the same as those used in the filename conventions with some additions.

Examples based on system time 1455Z Jan 12, 1997,
product header FPUS5 KIND 281512

Wildcard Explanation Example
@tag Name convention tag  
%Y current system year 1997
%y current system year (last 2 digits) 97
%m current system month 01
%d current system day 12
%j current system julian day 12
%h current system hour 14
%n current system minute 55
%pd product day 28
%ph product hour 15
%pn product minute 12
%T product type FPUS5
%t product type (lower case) fpus5
%L product locale KIND
%l product locale (lower case) kind
%D data_path resource  
%C con_path resource  
%R raw_path resource  
%G grid_path resource  
%W watch_path resource  
%I image_path resource  
%F file_path resource  

Some of the above wildcards can be preceded with a number.  For dates, the number is a modifier which rounds down to the nearest value which is a multiple of that number.  For example, "%6h" would round down to the nearest 6 hour boundary.  For the previous example, it results in the value 12.  

For the product type and locale, this number is used in a substring operation.  The first digit of the number is the offset into the string and the second digit refers to the number of characters to use.  For example, "%12T" results in "FP".  To get "IND", use "%23L".

Filenames

In general, you will use a simplistic file naming convention for the filenames.  In the above example, "%h%m%d%y" is used with an extension.  This generally have to match a similar naming convention in the name convention file to be useful.  As a shortcut, you can specify a name convention tag.  For example, you could list "@sfc_dat" rather than the verbose string listed above.  Sometimes, you still might want to use wildcard setup in ingest to determine file names.

Header Files

Header files are provided by the ingestor to speed up the searching of data. Since most data is keyed on the product header, it is often easier to search through a list of headers rather than a file with headers and product contents.  The header file essentially is a list of the headers and the position in the full file that each header exists.  Here is a sample:

      0 FZAK65 PANC 052359 CCA 
   1782 FPUS5 KABQ 052359
   9360 FZUS45 KFAR 052359
  11094 FXUS21 KLSE 060001
  13115 FXUS21 KLCH 060002
  14230 FQUS1 KELP 060001
  14934 FPCN11 CWVR 052355 PAA

The first column is the byte offset into the file, followed by the actual header.  

The ingestor can create these automatically if a header file naming convention is specified.  For the append, write and file actions, the header file is just separated from the regular filename by a white space character:

F[^OT]            >>    @for_dat          @for_hdr
A                 >>    %D/%6h%m%d%y.sum  %D/hd%6h%m%d.sum

Last updated July 30, 1998